가상 머신 간에 Wireguard를 실행할 때 성능 문제

가상 머신 간에 Wireguard를 실행할 때 성능 문제

동일한 하이퍼바이저(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.

이 문제에 대한 조언을 주시면 감사하겠습니다. 도움을 주셔서 미리 감사드립니다!

관련 정보