ArtigosDestaque

Performance da VPN Wireguard no Raspberry Pi 4 e outros computadores low end

Nos tempos que correm existem várias opções baratas de ter um computador em casa a fazer de “servidor”, para servir todo o tipo de serviços. Umas dessas opções mais baratas e acessíveis é o Raspberry Pi, um SBC (Small Board Computer) que já vai na sua versão 4 e que está cada vez mais popular.

Uma das funções que o Raspberry Pi pode fazer em casa é de servidor de VPN (Virtual Private Network), com o objetivo de termos conectividade à rede de casa a partir de qualquer lugar.

A nível de software de VPN, um dos mais populares é o OpenVPN, mas este é um software algo antigo e pesado, que não é muito apropriado a um computador com poucos recursos, como o Raspberry Pi 4.

Nos últimos anos, tem sido desenvolvido um software de VPN, Open Source, chamado Wireguard, que é mais moderno, simples e com melhor performance que outras soluções comuns nesta área.

Um suite de benchmarks bastante conhecida, o Phoronix test suite, tem agora um perfil para testar a performance de um processador no Wireguard. Tive sempre a curiosidade de ver qual seria a performance teórica do Raspberry Pi numa VPN que não o OpenVPN.

Decidi testar o Raspberry Pi 4 com outras máquinas que têm processadores low end. Além do ARM A72 do RPi4, testei este benchmark num Intel Celeron N2807Intel Atom Z3735FIntel Celeron 3865U (2 cores numa máquina virtual Hyper-V) e num Intel Core i3-8100 (2 cores numa máquina virtual Hyper-V).

O benchmark ao Wireguard só testa o processador. Não está dependente de qualquer ligação de rede que a máquina tenha. O benchmark usa o loopback para passar 10 GB em diversas condições.

Explicação do benchmark:

The way it works is it creates three namespaces. ns0 has a loopback device. ns1 and ns2 each have wireguard devices. Those two wireguard devices send traffic through the loopback device of ns0. The end result of this is that tests wind up testing encryption and decryption at the same time — a pretty CPU and scheduler-heavy workflow.

Several tests are run:
– normal MTU: v4 over v4, tcp
– normal MTU: v4 over v6, tcp
– normal MTU: v6 over v4, tcp
– normal MTU: v6 over v6, tcp
– normal MTU: v4 over v4, udp
– normal MTU: v4 over v6, udp
– normal MTU: v6 over v4, udp
– normal MTU: v6 over v6, udp
– jumbo MTU: v4 over v4, tcp
– jumbo MTU: v4 over v6, tcp
– jumbo MTU: v6 over v4, tcp
– jumbo MTU: v6 over v6, tcp
– jumbo MTU: v4 over v4, udp
– jumbo MTU: v4 over v6, udp
– jumbo MTU: v6 over v4, udp
– jumbo MTU: v6 over v6, udp

Each of these tests transfers 10 gigabytes

O resultado do benchmark é o tempo que demora em segundos. Quantos menos tempo, mais rápido é o processador nesta tarefa.

Todas as máquinas estão com Ubuntu 20.04 Beta com os últimos updates feitos. O kernel de Linux é o 5.4, que não tem suporte nativo do Wireguard. O que o teste faz é efectuar o download do Wireguard, compila e faz o load do módulo no kernel com o DKMS.

Os resultados numa tabela:

E os resultados em gráfico:

Conclusão

Conclusão que retiro destes resultados:

  • A performance no Wireguard no Raspberry pi 4 não é muito boa, comparador com processadores x86 low end. Ele não é muito mais rápido que um Intel Atom Z3735F, um processador feito para telemóveis lançado em 2014 e é mais rápido que o Intel Celeron N2807, mas além de só ter sido lançado em 2014, tem também só metade dos cores. É verdade que o ARM A72, que está no Raspberry Pi 4, não é um processador muito recente e também é um processador pensado para o mercado móvel, mas foi lançado em 2016, 2 anos depois que aqueles 2 processadores Atom.
  • Em relação ao Intel Celeron 3865U, o A72 do Raspberry Pi 4 não fica longe deste processador que tem um TDP superior (15 W), mas este é um dos piores processadores x86 com este TDP e também não é um processador recente.
  • Comparado com um “Big core” x86, o i3-8100, mesmo sendo um processador bastante low end já quando foi lançado e só usando 2 cores numa VM, a nível de performance no Wireguard, fica muito acima do A72 do Raspberry Pi 4. Está num patamar completamente à parte. A única parte negativa é que tem um TDP de 65W.

Logs de cada teste

Raspberry Pi 4:

System Information


  PROCESSOR:          ARMv8 Cortex-A72 @ 1.50GHz
    Core Count:       4
    Scaling Driver:   BCM2835 Freq ondemand

  GRAPHICS:

  MOTHERBOARD:        BCM2835 Raspberry Pi 4 Model B Rev 1.1

  MEMORY:             4096MB

  DISK:               128GB SH128
    File-System:      ext4
    Mount Options:    discard errors=remount-ro noatime nodiratime rw

  OPERATING SYSTEM:   Ubuntu 20.04
    Kernel:           5.4.0-1008-raspi (aarch64)
    Compiler:         GCC 9.3.0
    Security:         itlb_multihit: Not affected
                      + l1tf: Not affected
                      + mds: Not affected
                      + meltdown: Not affected
                      + spec_store_bypass: Vulnerable
                      + spectre_v1: Mitigation of __user pointer sanitization
                      + spectre_v2: Vulnerable
                      + tsx_async_abort: Not affected

Current Description: ARMv8 Cortex-A72 testing on Ubuntu 20.04 via the Phoronix Test Suite.

WireGuard + Linux Networking Stack Stress Test:
    system/wireguard-1.0.0
    Test 1 of 2
    Estimated Trial Run Count:    3
    Estimated Time To Completion: 2 Minutes [17:35 UTC]
        Started Run 1 @ 17:34:02
        Started Run 2 @ 18:02:17
        Started Run 3 @ 18:31:01

    Test Results:
        1691.207
        1720.442
        1699.655

    Average: 1703.768 Seconds
    Deviation: 0.88%

Intel Celeron N2807:

System Information


  PROCESSOR:          Intel Celeron N2807 @ 2.17GHz
    Core Count:       2
    Extensions:       SSE 4.2 + RDRAND
    Cache Size:       1024 KB
    Microcode:        0x838
    Scaling Driver:   intel_pstate powersave

  GRAPHICS:           ECS Intel Atom Z36xxx/Z37xxx & Display
    Frequency:        750MHz

  MOTHERBOARD:        ECS BAT-MINI v1.0
    BIOS Version:     5.6.5
    Chipset:          Intel Atom Z36xxx/Z37xxx
    Network:          Realtek RTL8111/8168/8411

  MEMORY:             1 x 2048 MB DDR3-1066MT/s

  DISK:               63GB SEM64G
    File-System:      ext4
    Mount Options:    discard errors=remount-ro noatime nodiratime rw

  OPERATING SYSTEM:   Ubuntu 20.04
    Kernel:           5.4.0-25-generic (x86_64)                                                                                                                                                                                            
    Compiler:         GCC 9.3.0                                                                                                                                                                                                            
    Security:         itlb_multihit: Not affected                                                                                                                                                                                          
                      + l1tf: Not affected                                                                                                                                                                                                  
                      + mds: Mitigation of Clear buffers; SMT disabled                                                                                                                                                                      
                      + meltdown: Mitigation of PTI                                                                                                                                                                                        
                      + spec_store_bypass: Not affected                                                                                                                                                                                    
                      + spectre_v1: Mitigation of usercopy/swapgs barriers and __user pointer sanitization                                                                                                                                  
                      + spectre_v2: Mitigation of Full generic retpoline IBPB: conditional IBRS_FW STIBP: disabled RS                                                                                                                        B filling
                      + tsx_async_abort: Not affected

Current Description: Intel Celeron N2807 testing with a ECS BAT-MINI v1.0 (5.6.5 BIOS) and ECS Intel Atom Z36xxx/Z37xxx & Display on Ubuntu 20.04 via the Phoronix Test Suite.

WireGuard + Linux Networking Stack Stress Test:
    system/wireguard-1.0.0
    Test 1 of 2
    Estimated Trial Run Count:    3
    Estimated Time To Completion: 2 Minutes [17:39 UTC]
        Started Run 1 @ 17:38:15
        Started Run 2 @ 18:19:23
        Started Run 3 @ 18:59:48

    Test Results:
        2464.558
        2421.051
        2456.173

    Average: 2447.261 Seconds
    Deviation: 0.94%

Intel Atom Z3735F:

System Information


  PROCESSOR:          Intel Atom Z3735F @ 1.83GHz
    Core Count:       4
    Extensions:       SSE 4.2 + RDRAND
    Cache Size:       1024 KB
    Microcode:        0x838
    Scaling Driver:   intel_pstate powersave

  GRAPHICS:           Zotac Intel Atom Z36xxx/Z37xxx & Display
    Frequency:        646MHz
    Monitor:          SyncMaster
    Screen:           1920x1080

  MOTHERBOARD:        ZOTAC ZBOX-PI320
    BIOS Version:     5.6.5
    Chipset:          Intel Atom Z36xxx/Z37xxx

  MEMORY:             1 x 2048 MB DDR3-1333MT/s

  DISK:               63GB MCG8GC
    File-System:      ext4
    Mount Options:    errors=remount-ro relatime rw

  OPERATING SYSTEM:   Ubuntu 20.04
    Kernel:           5.4.0-25-generic (x86_64)
    Compiler:         GCC 9.3.0
    Security:         itlb_multihit: Not affected
                      + l1tf: Not affected
                      + mds: Mitigation of Clear buffers; SMT disabled
                      + meltdown: Mitigation of PTI
                      + spec_store_bypass: Not affected
                      + spectre_v1: Mitigation of usercopy/swapgs barriers and __user pointer sanitization
                      + spectre_v2: Mitigation of Full generic retpoline IBPB: conditional IBRS_FW STIBP: disabled RSB filling
                      + tsx_async_abort: Not affected

Current Description: Intel Atom Z3735F testing with a ZOTAC ZBOX-PI320 (5.6.5 BIOS) and Zotac Intel Atom Z36xxx/Z37xxx & Display on Ubuntu 20.04 via the Phoronix Test Suite.

WireGuard + Linux Networking Stack Stress Test:
    system/wireguard-1.0.0
    Test 1 of 2
    Estimated Trial Run Count:    3
    Estimated Test Run-Time:      26 Minutes
    Estimated Time To Completion: 28 Minutes [20:19 UTC]
        Started Run 1 @ 19:52:46
        Started Run 2 @ 20:24:28
        The test quit with a non-zero exit status.
        Started Run 3 @ 20:24:33
        Started Run 4 @ 20:55:47 *

    Test Results:
        1898.531
        1870.069
        1875.559

    Average: 1881.386 Seconds
    Deviation: 0.80%

Intel Celeron 3865U:

System Information


  PROCESSOR:          Intel Celeron 3865U
    Core Count:       2
    Extensions:       SSE 4.2 + RDRAND + FSGSBASE
    Cache Size:       2048 KB
    Microcode:        0xffffffff

  GRAPHICS:           hyperv_fb
    Screen:           1152x864

  MOTHERBOARD:        Microsoft Virtual Machine
    BIOS Version:     Hyper-V UEFI v4.0

  MEMORY:             3968 MB + 128 MB

  DISK:               86GB Virtual Disk
    File-System:      ext4
    Mount Options:    relatime rw
    Disk Scheduler:   NONE

  OPERATING SYSTEM:   Ubuntu 20.04
    Kernel:           5.4.0-25-generic (x86_64)
    Compiler:         GCC 9.3.0
    System Layer:     microsoft
    Security:         itlb_multihit: KVM: Vulnerable
                      + l1tf: Mitigation of PTE Inversion
                      + mds: Mitigation of Clear buffers; SMT Host state unknown
                      + meltdown: Mitigation of PTI
                      + spec_store_bypass: Mitigation of SSB disabled via prctl and seccomp
                      + spectre_v1: Mitigation of usercopy/swapgs barriers and __user pointer sanitization
                      + spectre_v2: Mitigation of Full generic retpoline IBPB: conditional IBRS_FW STIBP: disabled RSB filling
                      + tsx_async_abort: Not affected

Current Description: microsoft testing on Ubuntu 20.04 via the Phoronix Test Suite.

WireGuard + Linux Networking Stack Stress Test:
    system/wireguard-1.0.0
    Test 1 of 2
    Estimated Trial Run Count:    3
    Estimated Test Run-Time:      26 Minutes
    Estimated Time To Completion: 28 Minutes [21:57 UTC]
        Started Run 1 @ 21:30:26
        Started Run 2 @ 21:52:15
        Started Run 3 @ 22:14:14

    Test Results:
        1304.537
        1315.361
        1352.104

    Average: 1324.001 Seconds
    Deviation: 1.88%

OpenSSL 1.1.1:
    pts/openssl-1.11.0
    Test 2 of 2
    Estimated Trial Run Count:    3
    Estimated Time To Completion: 2 Minutes [22:38 UTC]
        Started Run 1 @ 22:36:57
        Started Run 2 @ 22:37:21
        Started Run 3 @ 22:37:45

    RSA 4096-bit Performance:
        121.5
        128
        121.9

    Average: 123.8 Signs Per Second
    Deviation: 2.94%

Intel Core i3-8100:

System Information


  PROCESSOR:          Intel Core i3-8100
    Core Count:       2
    Extensions:       SSE 4.2 + AVX2 + AVX + RDRAND + FSGSBASE
    Cache Size:       6144 KB
    Microcode:        0xffffffff

  GRAPHICS:           hyperv_fb
    Screen:           1152x864

  MOTHERBOARD:        Microsoft Virtual Machine
    BIOS Version:     Hyper-V UEFI v4.0

  MEMORY:             3968 MB + 128 MB

  DISK:               86GB Virtual Disk
    File-System:      ext4
    Mount Options:    relatime rw
    Disk Scheduler:   NONE

  OPERATING SYSTEM:   Ubuntu 20.04
    Kernel:           5.4.0-25-generic (x86_64)
    Compiler:         GCC 9.3.0
    System Layer:     microsoft
    Security:         itlb_multihit: KVM: Vulnerable
                      + l1tf: Mitigation of PTE Inversion
                      + mds: Mitigation of Clear buffers; SMT Host state unknown
                      + meltdown: Mitigation of PTI
                      + spec_store_bypass: Mitigation of SSB disabled via prctl and seccomp
                      + spectre_v1: Mitigation of usercopy/swapgs barriers and __user pointer sanitization
                      + spectre_v2: Mitigation of Full generic retpoline IBPB: conditional IBRS_FW STIBP: disabled RSB filling
                      + tsx_async_abort: Not affected

Current Description: microsoft testing on Ubuntu 20.04 via the Phoronix Test Suite.

WireGuard + Linux Networking Stack Stress Test:
    system/wireguard-1.0.0
    Test 1 of 2
    Estimated Trial Run Count:    3
    Estimated Test Run-Time:      26 Minutes
    Estimated Time To Completion: 28 Minutes [20:44 UTC]
        Started Run 1 @ 20:17:09
        Started Run 2 @ 20:25:04
        Started Run 3 @ 20:32:05
        Started Run 4 @ 20:39:22 *
        Started Run 5 @ 20:46:26 *
        Started Run 6 @ 20:53:54 *
        Started Run 7 @ 21:01:08 *
        Started Run 8 @ 21:08:29 *
        Started Run 9 @ 21:15:33 *

    Test Results:
        470.838
        417.046
        433.315
        420.256
        443.355
        430.249
        436.996
        419.695
        433.111

    Average: 433.873 Seconds
    Deviation: 3.78%
    Samples: 9

Raspberry Pi 4 Model B 2GB RAM

Raspberry Pi 4 Model B 4GB RAM

Armor Aluminum Alloy Case

MicroSDHC SanDisk Max Endurance 32 GB

Artigos Relacionados

Botão Voltar ao Topo