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