동일한 하이퍼바이저(Qemu/KVM에서 실행)에서 두 VM 사이에 Wireguard 터널을 실행하는 데 성능 문제가 발생하고 있으며 이 문제에 대한 통찰력/조언을 주시면 정말 감사하겠습니다. 내가 겪고 있는 문제는 다양한 벤치마크에서 wireguard 연결/터널이 wireguard가 실행되는 "일반" 네트워크 연결보다 약 80-90% 느린 것으로 나타난다는 것입니다. Wireguard 구성은 간단한 지점 간 구성입니다.
두 물리적 시스템 간의 동일한 Wireguard 구성은 잘 작동하며 약 4-5%의 성능 손실만 발생합니다. 이로 인해 문제는 가상화 계층 어딘가에 있다고 믿게 되었습니다. 나는 긍정적인 결과 없이 많은 것을 시도했습니다.
- 가상 시스템의 CPU 및 RAM을 늘려도 효과가 없습니다.
- 이러한 가상 머신에서 암호화/암호 해독 작업의 성능을 테스트한 결과 심각한 성능 저하가 발견되지 않았습니다. 그래서 이들 가상머신의 CPU 성능은 꽤 좋은 것 같습니다.
- 하이퍼바이저 BIOS에서 활성화된 CPU에 대한 가상화 지원
- 몇 가지 다른 MTU 크기를 시도했지만 실제 차이는 없었습니다.
- Qemu/KVM 내에서 CPU 고정과 다양한 CPU 설정 간에는 차이가 없습니다.
- Wireguard가 커널 모드에서 실행 중입니다.
- 다른 컴퓨터/하이퍼바이저 조합(예: VirtualBox)에서 동일한 설정으로 동일한 문제가 발생하여 어떤 방식으로든 구성에 문제가 있다고 생각됩니다. 가상 머신에서 실행되는 모든 것에는 이 문제가 있는 것 같습니다.
- Linux 배포판마다 차이가 없는 것 같습니다.
내 설정 및 벤치마크에 대한 추가 정보는 다음과 같습니다. 이 두 가상 머신은 wireguard-client-01 및 wireguard-server라고 합니다.
wireguard-client-01 네트워크 정보:
[root@wireguard-client-01 ~]# ip a
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:d4:fa:89 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.41/24 brd 192.168.2.255 scope global dynamic noprefixroute enp1s0
valid_lft 863813sec preferred_lft 863813sec
inet6 fd00::5054:ff:fed4:fa89/64 scope global dynamic noprefixroute
valid_lft 7021sec preferred_lft 3421sec
inet6 fe80::5054:ff:fed4:fa89/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.8.0.2/24 scope global wg0
valid_lft forever preferred_lft forever
wireguard-server 네트워크 정보:
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:73:c2:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.2.40/24 brd 192.168.2.255 scope global dynamic noprefixroute enp1s0
valid_lft 863677sec preferred_lft 863677sec
inet6 fd00::5054:ff:fe73:c26d/64 scope global dynamic noprefixroute
valid_lft 6880sec preferred_lft 3280sec
inet6 fe80::5054:ff:fe73:c26d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.8.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
Wireguard 서버 wg0 구성:
[Interface]
Address = 10.8.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = <my_private_key>
[Peer]
PublicKey = E0eS7oBffTDg8Qj4ZeIUhxA0GUC3HrSfacrjP54hFQI=
AllowedIPs = 10.8.0.2/32
Endpoint = 192.168.2.41:48671
Wireguard-client-01 wg0 구성:
[Interface]
PrivateKey = <my_private_key>
Address = 10.8.0.2/24
[Peer]
PublicKey = h+kDKK/2Y+WXRiO9lSQ0RT3HsRi0m6OckOkEJep/2jM=
AllowedIPs = 10.8.0.0/24
Endpoint = 192.168.2.40:51820
"일반" 네트워크 인터페이스에 대한 iperf3 벤치마크:
[root@wireguard-client-01 ~]# iperf3 --client 192.168.2.40
Connecting to host 192.168.2.40, port 5201
[ 5] local 192.168.2.41 port 57836 connected to 192.168.2.40 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 913 MBytes 7.66 Gbits/sec 2 3.11 MBytes
[ 5] 1.00-2.00 sec 956 MBytes 8.00 Gbits/sec 2 3.11 MBytes
[ 5] 2.00-3.00 sec 958 MBytes 8.05 Gbits/sec 5 3.11 MBytes
[ 5] 3.00-4.00 sec 1.05 GBytes 9.00 Gbits/sec 3 3.11 MBytes
[ 5] 4.00-5.00 sec 998 MBytes 8.37 Gbits/sec 5 3.11 MBytes
[ 5] 5.00-6.00 sec 1014 MBytes 8.50 Gbits/sec 4 3.11 MBytes
[ 5] 6.00-7.00 sec 1.02 GBytes 8.75 Gbits/sec 4 3.11 MBytes
[ 5] 7.00-8.00 sec 960 MBytes 8.06 Gbits/sec 5 3.11 MBytes
[ 5] 8.00-9.00 sec 1.17 GBytes 10.0 Gbits/sec 2 3.11 MBytes
[ 5] 9.00-10.00 sec 1022 MBytes 8.58 Gbits/sec 3 3.11 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 9.90 GBytes 8.50 Gbits/sec 35 sender
[ 5] 0.00-10.03 sec 9.89 GBytes 8.47 Gbits/sec receiver
iperf Done.
iperf3 벤치마크와 와이어가드 터널링 비교(비트 전송률 차이가 약 80% 감소함):
[root@wireguard-client-01 ~]# iperf3 --client 10.8.0.1
Connecting to host 10.8.0.1, port 5201
[ 5] local 10.8.0.2 port 39384 connected to 10.8.0.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 125 MBytes 1.05 Gbits/sec 106 1.59 MBytes
[ 5] 1.00-2.00 sec 120 MBytes 1.01 Gbits/sec 0 1.74 MBytes
[ 5] 2.00-3.00 sec 132 MBytes 1.11 Gbits/sec 0 1.83 MBytes
[ 5] 3.00-4.00 sec 176 MBytes 1.48 Gbits/sec 22 1.40 MBytes
[ 5] 4.00-5.00 sec 221 MBytes 1.85 Gbits/sec 0 1.50 MBytes
[ 5] 5.00-6.00 sec 191 MBytes 1.61 Gbits/sec 0 1.58 MBytes
[ 5] 6.00-7.00 sec 42.5 MBytes 357 Mbits/sec 0 1.58 MBytes
[ 5] 7.00-8.00 sec 191 MBytes 1.60 Gbits/sec 0 1.65 MBytes
[ 5] 8.00-9.00 sec 194 MBytes 1.63 Gbits/sec 169 1.21 MBytes
[ 5] 9.00-10.00 sec 214 MBytes 1.79 Gbits/sec 0 1.36 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.57 GBytes 1.35 Gbits/sec 297 sender
[ 5] 0.00-10.04 sec 1.57 GBytes 1.34 Gbits/sec receiver
iperf Done.
이 문제에 대한 조언을 주시면 감사하겠습니다. 도움을 주셔서 미리 감사드립니다!