Quantcast
Channel: Xen –笑遍世界
Viewing all articles
Browse latest Browse all 13

Xen中绑定CPU

$
0
0

在最新Xen4.2中,对CPU的调度默认是基于Credit的调度算法,其效率还是不错的;不过,为了获得更好的CPU性能,我们有时还是需要将guest的vCPU绑定到固定的pCPU上去。在本文最后第2个链接中,IBM的文档提到在以前的Xen,是否绑定vCPU可能会导致2-3倍的性能差异;今后我有空时也考虑做下简单的关于vCPU是否绑定的性能对比。
本文主要说明,在Xen4.2中如何绑定dom0和guest的CPU。思路是:先限制dom0的vCPU数为2,然后绑定dom0的vCPU到固定的2个pCPU上;启动设置有4个vCPU的guest,将guest的vCPU绑定到固定的4个pCPU上。当然不要绑定geust的vCPU到和dom0同样的pCPU上,另外,为了获得更好的性能,最好将guest的多个vCPU都尽可能地绑定到同一个CPU的Node(Socket)上。

1. Dom0的vCPU个数设置和绑定:
对与dom0的vCPU个数,可以有两种方法来设置:
1.1 在grub中Xen启动行上添加dom0_max_vcpus=N参数,gurb.conf中的配置dom0仅使用2个vCPU的实例如下:

title xen-test
        root (hd0,0)
        kernel (hd0,0)/boot/xen.gz dom0_mem=2048M dom0_max_vcpus=2 iommu=1 
        module (hd0,0)/boot/vmlinuz-xen o root=/dev/sda1  console=hvc0
        module (hd0,0)/boot/initrd-xen.img

1.2 在dom0启动后,使用”xl vcpu-set $dom-ID N”命令来动态地设置

[root@jay-xen ~]# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2047    24     r-----     821.1
[root@jay-xen ~]# xl vcpu-list
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Domain-0                             0     0    4   -b-      68.3  any cpu
Domain-0                             0     1   15   -b-      39.3  any cpu
Domain-0                             0     2   13   -b-      36.2  any cpu
Domain-0                             0     3   18   -b-      43.5  any cpu
Domain-0                             0     4    7   -b-      32.4  any cpu
Domain-0                             0     5    5   -b-      35.7  any cpu
Domain-0                             0     6    3   -b-      32.6  any cpu
Domain-0                             0     7   14   -b-      36.4  any cpu
Domain-0                             0     8    1   -b-      37.0  any cpu
Domain-0                             0     9    8   -b-      34.3  any cpu
Domain-0                             0    10   20   -b-      34.1  any cpu
Domain-0                             0    11   11   -b-      33.8  any cpu
Domain-0                             0    12   10   -b-      29.0  any cpu
Domain-0                             0    13    6   -b-      30.7  any cpu
Domain-0                             0    14   17   -b-      30.6  any cpu
Domain-0                             0    15    2   -b-      33.1  any cpu
Domain-0                             0    16    0   -b-      28.0  any cpu
Domain-0                             0    17    1   -b-      30.9  any cpu
Domain-0                             0    18   19   -b-      28.1  any cpu
Domain-0                             0    19   23   r--      29.4  any cpu
Domain-0                             0    20   21   -b-      28.4  any cpu
Domain-0                             0    21   22   -b-      30.5  any cpu
Domain-0                             0    22    9   -b-      28.8  any cpu
Domain-0                             0    23   16   -b-      30.1  any cpu
[root@jay-xen ~]# xl vcpu-set 0 2
[root@jay-xen ~]# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2047     2     r-----     824.1
[root@jay-xen ~]# xl vcpu-list
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Domain-0                             0     0    4   -b-      68.5  any cpu
Domain-0                             0     1   15   r--      39.6  any cpu
Domain-0                             0     2    -   --p      36.3  any cpu
Domain-0                             0     3    -   --p      43.6  any cpu
Domain-0                             0     4    -   --p      32.5  any cpu
Domain-0                             0     5    -   --p      35.8  any cpu
Domain-0                             0     6    -   --p      32.7  any cpu
Domain-0                             0     7    -   --p      36.6  any cpu
Domain-0                             0     8    -   --p      37.1  any cpu
Domain-0                             0     9    -   --p      34.4  any cpu
Domain-0                             0    10    -   --p      34.2  any cpu
Domain-0                             0    11    -   --p      33.9  any cpu
Domain-0                             0    12    -   --p      29.1  any cpu
Domain-0                             0    13    -   --p      30.8  any cpu
Domain-0                             0    14    -   --p      30.7  any cpu
Domain-0                             0    15    -   --p      33.2  any cpu
Domain-0                             0    16    -   --p      28.1  any cpu
Domain-0                             0    17    -   --p      31.0  any cpu
Domain-0                             0    18    -   --p      28.2  any cpu
Domain-0                             0    19    -   --p      29.5  any cpu
Domain-0                             0    20    -   --p      28.5  any cpu
Domain-0                             0    21    -   --p      30.5  any cpu
Domain-0                             0    22    -   --p      29.0  any cpu
Domain-0                             0    23    -   --p      30.3  any cpu

可以看出来,Dom0中的vCPU数量已经被设置为2了(这vcpu-list里面,”Domain-0 0 2 – –p 36.3 any cpu”这样的行没有调度到任何pCPU是没有意义的)。

对于dom0的vCPU绑定,使用”xl vcpu-set $dom-ID $Nvcpu $Npcpu”命令来实现虚拟CPU到物理CPU的绑定。

[root@jay-xen ~]# xl vcpu-pin 0 0 0
[root@jay-xen ~]# xl vcpu-pin 0 1 1
[root@jay-xen ~]# xl vcpu-list
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Domain-0                             0     0    0   -b-      72.3  0
Domain-0                             0     1    1   r--      43.2  1

可以看到,经过绑定之后,dom0的0/1vCPU分别被绑定到,物理CPU的0/1之上(如:CPU Affinity一列所示)。

2. 设置和绑定guest的vCPU:
2.1 创建Guest时绑定:在guest的config文件中,写上如下的配置,则启动包含4个vCPU的guest,且其中四个CPU分别绑定到2/3/4/5号pCPU上。
关于hvm guest的配置文件个,请参考我前面一篇文章:Xen HVM guest配置

# Number of VCPUS
vcpus = 4
cpus = ["2", "3", "4", "5"]

guest启动后,查看vCPU的情况,其操作过程如下:

[root@jay-xen jay]# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2047     2     r-----     859.0
Jay hvm                                      3  1019     4     -b----       9.6
[root@jay-xen jay]# xl vcpu-list 0
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Domain-0                             0     0    0   -b-      94.8  0
Domain-0                             0     1    1   r--      55.0  1
[root@jay-xen jay]# xl vcpu-list 3
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Jay hvm                              3     0    2   -b-      12.5  2
Jay hvm                              3     1    3   -b-       2.3  3
Jay hvm                              3     2    4   -b-       3.8  4
Jay hvm                              3     3    5   -b-       1.8  5

2.2 guest创建后动态地用’xl vcpu-pin’命令来绑定vCPU到pCPU上。
在创建guest时,只是启动4个vCPU而不绑定(即没有“cpus = [“2”, “3”, “4”, “5”]”这个配置)。
具体绑定vCPU的过程如下:

[root@jay-xen jay]# xl list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2047     2     r-----     916.7
Jay hvm                                      4  1023     4     -b----      23.2
[root@jay-xen jay]# xl vcpu-list 4
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Jay hvm                              4     0    6   -b-      13.7  any cpu
Jay hvm                              4     1    4   -b-       2.8  any cpu
Jay hvm                              4     2   23   -b-       4.8  any cpu
Jay hvm                              4     3    2   -b-       2.6  any cpu
[root@jay-xen jay]# xl vcpu-pin 4 0 2
[root@jay-xen jay]# xl vcpu-pin 4 1 3
[root@jay-xen jay]# xl vcpu-pin 4 2 4
[root@jay-xen jay]# xl vcpu-pin 4 3 5
[root@jay-xen jay]# xl vcpu-list 4
Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
Jay hvm                              4     0    2   -b-      13.8  2
Jay hvm                              4     1    3   -b-       2.8  3
Jay hvm                              4     2    4   -b-       4.9  4
Jay hvm                              4     3    5   -b-       2.6  5

最后我们可以看到dom 4上的4个vCPU分别绑定到了2~5号pCPU上了。

延展阅读:
1.关于Xen的基于Credit的CPU调度器:http://wiki.xen.org/wiki/Credit_Scheduler
2.http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=%2Fliaai%2Fxen%2Frhel%2Fliaaixenrfirst.htm
3.在本问写作之时,在xen-unstable tree上有个bug,命令’xl vcpu-set’对guest失效,所以前面我没有对guest用这个命令。详情,请见我们报的一个bug:
http://bugzilla.xen.org/bugzilla/show_bug.cgi?id=1822

Original article: Xen中绑定CPU

©2016 笑遍世界. All Rights Reserved.


Viewing all articles
Browse latest Browse all 13

Trending Articles