본문으로 바로가기
반응형

RHOSP13에서 이미지에 hw:vif_multiqueue_enabled": "true" 멀티큐 적용을 한 후 vCPU 8 이상의 VM을 생성하여도 queue가 8로 고정되는 이슈가 있어 내용 공유차 작성합니다.

 

vcpu 8 이하의 VM을 생성하면 생성한 vcpu 만큼 queue가 적용됩니다.

TripleO만 그런 것인지, 다른 오픈스택이 없어서 차이를 확인하지는 못하였습니다.

 

# 211104 추가

centos7.7 - packstack queens에서 테스트 해 본 결과 여기도 8이상 queue 설정이 되지 않았습니다. (4번 참고)

 

liberty 버전에서는 multiqueue를 적용해도 VM으로 들어가서 queue 설정을 직접 해줬어야되는데, RHOSP13

(Queens)에서는 multiqueue enable 설정을 하면 VM에서 작동으로 queue 적용이 됩니다.

 

# 211104 추가

packstack에서도 멀티큐 적용하면 자동으로 queue 설정이 8로 되는 것을 확인했습니다. (4번 참고)

 

 

## 레드햇 관련 링크

https://access.redhat.com/solutions/3227911

 

1. 이슈 : vCPU 10 Core임에도 queue는 8로 됨

[root@3333-2 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                10
On-line CPU(s) list:   0-9
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             10
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 13
Model name:            QEMU Virtual CPU version 2.5+
Stepping:              3
CPU MHz:               2593.906
BogoMIPS:              5187.81
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
L3 cache:              16384K
NUMA node0 CPU(s):     0-9
Flags:                 fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl xtopology eagerfpu pni cx16 x2apic hypervisor lahf_lm
[root@3333-2 ~]# ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
RX:		0
TX:		0
Other:		0
Combined:	8
Current hardware settings:
RX:		0
TX:		0
Other:		0
Combined:	8
[root@rhosp-comp-dell-3 ~]# virsh list
 Id    이름                         상태
----------------------------------------------------
 2     instance-0000001f              실행중

[root@rhosp-comp-dell-3 ~]# virsh dumpxml 2 | grep queue
      <driver name='vhost' queues='8' rx_queue_size='1024'/>

 

2. 원인

RHOSP13은 RHEL7기반으로 kernel이 3.x 인데 아래와 같이 최대 8입니다.

아래 소스 코드에서 8의 값을 12 -> 16등으로 설정 후 서버 재기동해도 8로 유지 되었으며, OpenStack Controller에서의 값도 변경했지만 8이상 변경 되지 않았습니다.

/usr/lib/python2.7/site-packages/nova/virt/libvirt/vif.py
(...)
    167     def _get_max_tap_queues(self):
    168         # NOTE(kengo.sakai): In kernels prior to 3.0,
    169         # multiple queues on a tap interface is not supported.
    170         # In kernels 3.x, the number of queues on a tap interface
    171         # is limited to 8. From 4.0, the number is 256.
    172         # See: https://bugs.launchpad.net/nova/+bug/1570631
    173         kernel_version = int(os.uname()[2].split(".")[0])
    174         if kernel_version <= 2:
    175             return 1
    176         elif kernel_version == 3:
    177             return 8
    178         elif kernel_version == 4:
    179             return 256
    180         else:
    181             return None
(...)

 

 

3. 해결방법

일단 방법을 찾고 있지만, 위 값을 변경해서 된다고 하여도 아마 RedHat에서는 guarantee 하지 않는다고 할 것 같습니다.

방법을 찾으면 다시 업데이트 예정입니다.

 

 

4. packstack에서 multiqueue 테스트 결과

위에서 설명한 내용에 대한 자료를 추가하였습니다.

[root@packstack images(keystone_admin)]# virsh list
 Id    이름                         상태
----------------------------------------------------
 4     instance-00000004              실행중
 5     instance-00000005              실행중

[root@packstack images(keystone_admin)]# virsh dumpxml 5 | grep queue
      <driver name='vhost' queues='8'/>
      
      
      
[root@packstack images(keystone_admin)]# virsh console 5
도메인 instance-00000005에 연결되었습니다
Escape character is ^]

Red Hat Enterprise Linux Server 7.6 (Maipo)
Kernel 3.10.0-957.12.2.el7.x86_64 on an x86_64

2 login: root
Password:
Last login: Sun Jun 16 03:28:20 on tty1
[root@2 ~]# ethtool -l eth0
Channel parameters for eth0:
Pre-set maximums:
RX:		0
TX:		0
Other:		0
Combined:	8
Current hardware settings:
RX:		0
TX:		0
Other:		0
Combined:	8

[root@2 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                12
On-line CPU(s) list:   0-11
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             12
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
Model name:            Intel Xeon Processor (Skylake, IBRS)
Stepping:              4
CPU MHz:               2593.910
BogoMIPS:              5187.82
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
L3 cache:              16384K
NUMA node0 CPU(s):     0-11
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat pku ospke avx512_vnni md_clear spec_ctrl intel_stibp

 

728x90