Upgrade to Pro — share decks privately, control downloads, hide ads and more …

俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1

Toshifumi NISHINAGA
June 06, 2020
2.7k

俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1

Toshifumi NISHINAGA

June 06, 2020
Tweet

More Decks by Toshifumi NISHINAGA

Transcript

  1. リモートワーク時代到来 • PPPoE接続IPv4回線がとても遅くなった • ⼣⽅など下り1Mbpsを切ることもある • DS-Lite(IPv4 over IPv6)もそんな速くない •

    どの時間も上り下り70Mbpsで頭打ち • IPv6は数百Mbpsでる • EdgeRouter Liteの性能限界っぽい • 測定中 ksoftirqがCPUを100%使⽤ 2020/6/6 5
  2. ルーター新調 • LIVA Z-4と拡張パーツを購⼊ • CPU: Celeron N3350 @ 1.1GHz,

    2 core • Mem: SO-DIMM DDR3L 8GB* • SSD: M.2 2242 SATA 128GB* • NIC: Gigabit Ethernet(RTL8111H) x 2 • お値段 約3万円 *は換装パーツ 2020/6/6 7
  3. 計測条件 • LIVA-Z • debian buster x86_64 • iperf version

    2.0.12 • iptablesの設定は全削除 • PC(MacBookPro 2018) • Mac OSX Catalina 10.15.5 • iperf version 2.0.13 • Tuneware Almighty dock C2 gigabit ethernet • PC(ThinkPad x230) • VyOS 1.3 • iperf version 2.0.12 2020/6/6 14
  4. NICのスループット計測 • ⽬的 • 各NIC単体のスループットを測る • 確認⼿順 1. LIVA Z上にiperf

    serverを建てる 2. 各NICの下にGigabit NICを持ったPCを接続する 3. iperfで60秒間のスループットを測る 2020/6/6 15
  5. LIVA Z NICのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 16 iperf

    server 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
  6. LIVA Z NICのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 17 iperf

    server 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
  7. NICスループット計測結果 2020/6/6 18 0 100 200 300 400 500 600

    700 800 900 1000 enp1s0 enp3s0 IPv4(Mbps) IPv6(Mbps)
  8. ブリッジ時のスループット計測 • ⽬的 • (ソフトウェア)ブリッジ性能を計測する • 確認⼿順 1. LIVA ZのLinuxで各NICをbridgeする

    2. 各NICの下にGigabit NICを持ったPCを接続する 3. ⽚⽅のPでiperf server,もう⽚⽅でiperf clientを起動する 4. 60秒間のスループットを計測する 2020/6/6 19
  9. LIVA Z ブリッジ時のスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 20 192.168.1.1

    2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 ※ IPv4は/24, IPv6は/64 br0 192.168.1.3 2001:db8:dead:beaf::3
  10. LIVA Z ブリッジ時のスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 21 192.168.1.1

    2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 ※ IPv4は/24, IPv6は/64 br0 192.168.1.3 2001:db8:dead:beaf::3
  11. パケットフォワードのスループット計測 • ⽬的 • パケットフォワードの性能を計測する • 確認⼿順 1. LIVA ZのLinuxで各NICのIPv4/IPv6

    forwardingを有効にする 2. LIVA ZのLinuxでip routingの設定を⾏う 1. sudo /sbin/sysctl -w net.ipv4.ip_forward=1 2. sudo /sbin/sysctl -w net.ipv6.conf.all.forwarding=1 3. 各NICの下にGigabit NICを持ったPCを接続する 4. 各PCに静的ルーティング設定する 1. Mac: sudo route add -net 192.168.2.0/24 192.168.1.1 2. Mac: sudo route add -inet6 2001:db8:dead:cafe::/64 2001:db8:dead:beaf::1 3. VyOS: set protocols static route 192.168.1.0/24 next-hop 192.168.2.1 4. VyOS: set protocols static route6 2001:db8:dead:beaf::/64 next-hop 2001:db8:dead:cafe::1 5. ⽚⽅のPCでiperf server,もう⽚⽅でiperf clientを起動する 6. 60秒間のスループットを計測する 2020/6/6 23
  12. LIVA Z パケットフォワードのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 24 192.168.1.1

    2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
  13. LIVA Z パケットフォワードのスループット計測 enp1s0 enp3s0 PC PC 2020/6/6 25 192.168.1.1

    2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.1 2001:db8:dead:cafe::1 192.168.2.2 2001:db8:dead:cafe::2 ※ IPv4は/24, IPv6は/64
  14. ipip6 tunnel利⽤時のスループット調査 • ⽬的 • ipip6 tunnel利⽤時のスループットを計測する • (DS-Lite利⽤時の最⼤スループットの確認⽤) •

    確認⼿順 1. 対向VyOSでipip6トンネルを設定する 2. LIVA Zのlinuxでipip6トンネルを設定する 3. 対向VyOSでiperf server,PCでiperf clientを起動する 4. 60秒間のスループットを計測する 2020/6/6 27
  15. LIVA Z ipip6 tunnel利⽤時のスループット調査 enp1s0 enp3s0 PC VyOS (ipip6 remote)

    2020/6/6 28 2001:db8:dead:beaf::2 192.168.1.2 ※ IPv4は/24, IPv6は/64 ipip6 local 192.168.2.1 2001:db8:dead:beaf::1 192.168.1.1
  16. LIVA Z ipip6 tunnel利⽤時のスループット調査 enp1s0 enp3s0 PC VyOS (ipip6 remote)

    2020/6/6 29 2001:db8:dead:beaf::2 192.168.1.2 ※ IPv4は/24, IPv6は/64 ipip6 local 192.168.2.1 2001:db8:dead:beaf::1 192.168.1.1
  17. ipip6 tunnel利⽤時のスループット調査 2020/6/6 30 0 100 200 300 400 500

    600 700 800 900 1000 IPv4 IPv6 Mbps ipip6 forward br0 enp1s0
  18. VMまでのスループット調査 • ⽬的 • VMまでのスループットを測る • 物理NICとの差を調べる • 確認⼿順 1.

    LIVA Zのenp1s0をbr0に所属させる 2. LIVA Z上にkvmでVyOSのVMを建てる 1. NICはbr0に接続 3. 各NICの下にGigabit NICを持ったPCを接続する 4. iperfで60秒間のスループットを測る 2020/6/6 34
  19. LIVA Z VMまでのスループット調査 enp1s0 PC 2020/6/6 37 VyOS iperf server

    192.168.1.1 192.168.1.2 vnet0 eth0 br0 ※ IPv4は/24, IPv6は/64
  20. LIVA Z VMまでのスループット調査 enp1s0 PC 2020/6/6 38 VyOS iperf server

    192.168.1.1 192.168.1.2 ※ IPv4は/24, IPv6は/64 vnet0 eth0 br0
  21. VMでのbridgeスループット調査 • ⽬的 • VM上でのbridgeスループットを調べる • 確認⼿順 1. LIVA Z上にkvmでVyOSのVMを建てる

    1. NICはbridgeに接続 2. trustGuestRxFiltersをyesにする 2. VyOSでbridgeをつくる 3. 各NICの下にGigabit NICを持ったPCを接続する 4. iperfで60秒間のスループットを測る 2020/6/6 40
  22. LIVA Z VyOS VMでのbridgeスループット調査 enp1s0 enp3s0 vnet0 vnet1 PC PC

    eth0 eth1 2020/6/6 41 br2 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.1.3 br0 br1 2001:db8:dead:beaf::3
  23. LIVA Z VyOS VMでのbridgeスループット調査 enp1s0 enp3s0 vnet0 vnet1 PC PC

    eth0 eth1 2020/6/6 42 br2 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.1.3 br0 br1 2001:db8:dead:beaf::3
  24. VMでのbridgeスループット調査 2020/6/6 43 0 100 200 300 400 500 600

    700 800 900 1000 IPv4(Mbps) IPv6(Mbps) Mbps host bridge vm bridge
  25. VMでのパケットフォワード調査 • ⽬的 • VM上でのパケットフォワードのスループットを調べる • 確認⼿順 1. LIVA Z上にkvmでVyOSのVMを建てる

    1. NICはbridge接続 2. VyOSでeth0とeth1にパケットフォワード設定する 3. 各PCに静的ルーティング設定する 1. Mac: sudo route add -net 192.168.2.0/24 192.168.1.1 2. Mac: sudo route add -inet6 2001:db8:dead:cafe::/64 2001:db8:dead:beaf::1 3. VyOS: set protocols static route 192.168.1.0/24 next-hop 192.168.2.1 4. VyOS: set protocols static route6 2001:db8:dead:beaf::/64 next-hop 2001:db8:dead:cafe::1 4. 各NICの下にGigabit NICを持ったPCを接続する 5. iperfで60秒間のスループットを測る 2020/6/6 44
  26. LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC PC

    eth0 eth1 2020/6/6 45 192.168.1.1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.2 br0 br1 2001:db8:dead:cafe::2 2001:db8:dead:beaf::1 192.168.2.1 2001:db8:dead:cafe::1
  27. LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC PC

    eth0 eth1 2020/6/6 46 192.168.1.1 192.168.1.2 2001:db8:dead:beaf::2 192.168.2.2 br0 br1 2001:db8:dead:cafe::2 2001:db8:dead:beaf::1 192.168.2.1 2001:db8:dead:cafe::1
  28. ipip6 tunnel利⽤時のスループット調査 • ⽬的 • VMでのipip6 tunnel利⽤時のブリッジ性能を計測する • (DS-Lite利⽤時の最⼤スループットの確認⽤) •

    確認⼿順 1. 対向VyOSでipip6トンネルを設定する 2. VMのVyOSでipip6トンネルを設定する 3. 対向VyOSでiperf server,PCでiperf clientを起動する 4. 60秒間のスループットを計測する 2020/6/6 48
  29. LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC VyOS

    eth0 eth1 2020/6/6 49 192.168.1.1 192.168.1.2 192.168.2.1 br0 br1 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
  30. LIVA Z VyOS VMでのパケットフォワード調査 enp1s0 enp3s0 vnet0 vnet1 PC VyOS

    eth0 eth1 2020/6/6 50 192.168.1.1 192.168.1.2 192.168.2.1 br0 br1 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
  31. ipip6 tunnel利⽤時のスループット調査 2020/6/6 51 0 100 200 300 400 500

    600 700 800 900 1000 host ipip6 vm ipip6 Mbps IPv4 ipip6
  32. 仮想マシンスループット調査結果まとめ 2020/6/6 52 0 100 200 300 400 500 600

    700 800 900 1000 IPv4(Mbps) IPv6(Mbps) Mbps vm nic vm bridge vm forward vm ipip6
  33. 謎現象 • macvtapで接続すると様々な謎現象が起こる • IPv6の疎通だけが取れない • ⽚側からはVMに疎通が取れるが、もう⽚側からは取れない • ⽚側だけarpがhostマシン側で落とされてる様⼦ •

    IPv6通信が途中で途切れる • bridgeでもIPv6はうまく動かないことがある • VMでbridgeを作ると、途中まで確⽴していたneighborがFAILDになる 2020/6/6 55
  34. LIVA Z IPv6の疎通が取れなくなる enp1s0 PC 2020/6/6 56 VyOS iperf server

    192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 ※ IPv4は/24, IPv6は/64 vnet0 eth0
  35. LIVA Z VyOS PC1からはVMに疎通が取れるが、 PC2からはVMに疎通が取れない enp1s0 enp3s0 vnet0 vnet1 PC1

    PC2 eth0 .100 eth1 .200 2020/6/6 57 vlan 100 vlan 200 br0 192.168.1.1 2001:db8:dead:beaf::1 192.168.1.2 2001:db8:dead:beaf::2 192.168.1.3 2001:db8:dead:beaf::3
  36. LIVA Z VyOS IPv6通信が途中で疎通が取れなくなる enp1s0 enp3s0 vnet0 vnet1 PC VyOS

    eth0 eth1 2020/6/6 58 192.168.1.1 192.168.1.2 2001:db8:dead:beaf::1 2001:db8:dead:beaf::2 192.168.2.1
  37. VMまでの双⽅向スループット調査 • ⽬的 • VMまでのスループットを測る • 物理NICとの差を調べる • 確認⼿順 1.

    LIVA Zのenp1s0をbr0に所属させる 2. LIVA Z上にkvmでVyOSのVMを建てる 1. NICはbr0に接続 3. NICの下にGigabit NICを持ったPCを接続する 4. iperfで60秒間のスループットを双⽅向に測る 2020/6/6 60
  38. LIVA Z VMまでの双⽅向スループット調査 enp1s0 PC 2020/6/6 61 VyOS iperf server

    192.168.1.1 192.168.1.2 vnet0 eth0 br0 ※ IPv4は/24, IPv6は/64 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
  39. LIVA Z VMまでの双⽅向スループット調査 enp1s0 PC 2020/6/6 62 VyOS iperf server

    192.168.1.1 192.168.1.2 ※ IPv4は/24, IPv6は/64 vnet0 eth0 br0 2001:db8:dead:beaf::2 2001:db8:dead:beaf::1
  40. VMまでのスループット調査結果 2020/6/6 63 0 100 200 300 400 500 600

    700 800 900 1000 IPv4 IPv6 Mbps 双⽅向スループット thinkpad -> VM VyOS VM VyOS -> thinkpad