====== 05 KVM Multi-Queue ======
KVMのデフォルトだと、並列パケット処理できなくてUDPで大量のアクセスが来た場合、
1つのCPUが100%に張り付いて処理できなくなる。
[[https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-virtualization_tuning_optimization_guide-networking-multi-queue_virtio-net]]
===== xml修正 =====
この部分追加
===== VM再起動 =====
xml修正後は、VMの停止・起動が必要
virsh shutdown [vm]
virsh start [vm]
===== VM再起動後 =====
VM内で、NICのマルチキューサポートを有効化
ethtool -L eth0 combined M
※KVM側で、ちゃんと対応した後で無いとエラーなります。
==== KVM側で設定してない場合のエラー ====
# ethtool -L eth0 combined 2
Cannot set device channel parameters: Invalid argument
===== 確認 =====
動作検証はiperf3とhtopコマンドで見ると分かりやすい
==== ethtoolで確認 ====
ethtool -L eth0 combined 2とした場合、下記のようになっているはず。
# ethtool -l eth0
Channel parameters for ens3:
Pre-set maximums:
RX: 0
TX: 0
Other: 0
Combined: 2
Current hardware settings:
RX: 0
TX: 0
Other: 0
Combined: 2
# ls /sys/class/net/eth0/queues/
rx-0 rx-1 tx-0 tx-1
==== VM側 ====
# iperf3 -s
==== クライアント側 ====
# iperf3 -c 10.10.102.10 -P 4 -t 100 -b 1G -u
=== top/htopで確認 ===
こんな感じでsoft割り込み(si)がバラけてくれる
# top
top - 13:26:49 up 2:07, 2 users, load average: 0.47, 0.33, 0.26
Tasks: 124 total, 2 running, 122 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 1.4 sy, 0.0 ni, 82.7 id, 0.0 wa, 0.0 hi, 15.9 si, 0.0 st
%Cpu2 : 3.4 us, 19.0 sy, 0.0 ni, 15.6 id, 0.0 wa, 0.0 hi, 62.0 si, 0.0 st
%Cpu3 : 2.2 us, 12.9 sy, 0.0 ni, 62.9 id, 0.0 wa, 0.0 hi, 21.9 si, 0.0 st
=== interruputsで確認 ===
# cat /proc/interrupts | grep virtio0-input
27: 14371000 19775189 0 0 PCI-MSI-edge virtio0-input.0
29: 9 0 293 41440575 PCI-MSI-edge virtio0-input.1
31: 7669896 3004 8222898 858360 PCI-MSI-edge virtio0-input.2
33: 3929884 0 22509786 0 PCI-MSI-edge virtio0-input.3
{{tag>KVM network queue}}