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

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

Toshifumi NISHINAGA
June 06, 2020
2.2k

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

Toshifumi NISHINAGA

June 06, 2020
Tweet

More Decks by Toshifumi NISHINAGA

Transcript

  1. 俺の仮想マシンルーターが
    こんなに遅いはずはない
    2020/06/06 KernelVM Online part 1
    Toshifumi NISHINAGA
    (@tnishinaga)
    2020/6/6 1

    View full-size slide

  2. 今⽇のコード
    https://github.com/tnishinaga/kernelvm-online1-router-config
    2020/6/6 2

    View full-size slide

  3. Special Thanks
    2020/6/6 3

    View full-size slide

  4. リモートワーク時代到来
    • PPPoE接続IPv4回線がとても遅くなった
    • ⼣⽅など下り1Mbpsを切ることもある
    • DS-Lite(IPv4 over IPv6)もそんな速くない
    • どの時間も上り下り70Mbpsで頭打ち
    • IPv6は数百Mbpsでる
    • EdgeRouter Liteの性能限界っぽい
    • 測定中 ksoftirqがCPUを100%使⽤
    2020/6/6 5

    View full-size slide

  5. インターネットを速くするために
    • DS-Liteが満⾜に動く性能のルーターを作ろう
    2020/6/6 6

    View full-size slide

  6. ルーター新調
    • 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

    View full-size slide

  7. セットアップ
    • LIVA Zにdebianをインストール
    • KVM上にルーターを構築
    • UTMも収納したかった
    • Gigabit程度なら速度低下もないはず
    2020/6/6 8

    View full-size slide

  8. セットアップ
    • LIVA Zにdebianをインストール
    • KVM上にルーターを構築
    • UTMも収納したかった
    • Gigabit程度なら速度低下もないはず
    •↑本当に?
    2020/6/6 9

    View full-size slide

  9. 今⽇の発表内容
    • VMでルーターを作っても速度低下がないのかを知るため、ホ
    ストマシンとVMでルーティング時のスループット差を検証し
    たので共有する
    • 道中、VMだけで起こる謎現象に遭遇したので解決策を募集
    • 資料にのみ記載。解決⽅法ご存じの⽅はTwitter等で教えて下さい。
    2020/6/6 10

    View full-size slide

  10. 物理マシンのスループット
    調査
    2020/6/6 11

    View full-size slide

  11. 物理マシンのスループット調査
    • 以下を⽐較して調査するため
    • 物理マシン上に直接⼊れたLinux
    • VM上に⼊れたVyOS(Linux base)
    2020/6/6 12

    View full-size slide

  12. 物理マシンのスループットを調査する
    • NICのスループット調査
    • ブリッジ時のスループット調査
    • パケットフォワード時のスループット調査
    • ipip6トンネル時のスループット調査
    2020/6/6 13

    View full-size slide

  13. 計測条件
    • 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

    View full-size slide

  14. NICのスループット計測
    • ⽬的
    • 各NIC単体のスループットを測る
    • 確認⼿順
    1. LIVA Z上にiperf serverを建てる
    2. 各NICの下にGigabit NICを持ったPCを接続する
    3. iperfで60秒間のスループットを測る
    2020/6/6 15

    View full-size slide

  15. 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

    View full-size slide

  16. 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

    View full-size slide

  17. NICスループット計測結果
    2020/6/6 18
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    enp1s0 enp3s0
    IPv4(Mbps) IPv6(Mbps)

    View full-size slide

  18. ブリッジ時のスループット計測
    • ⽬的
    • (ソフトウェア)ブリッジ性能を計測する
    • 確認⼿順
    1. LIVA ZのLinuxで各NICをbridgeする
    2. 各NICの下にGigabit NICを持ったPCを接続する
    3. ⽚⽅のPでiperf server,もう⽚⽅でiperf clientを起動する
    4. 60秒間のスループットを計測する
    2020/6/6 19

    View full-size slide

  19. 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

    View full-size slide

  20. 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

    View full-size slide

  21. ブリッジ時のスループット計測結果
    2020/6/6 22
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    IPv4 IPv6
    Mbps
    br0 enp1s0

    View full-size slide

  22. パケットフォワードのスループット計測
    • ⽬的
    • パケットフォワードの性能を計測する
    • 確認⼿順
    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

    View full-size slide

  23. 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

    View full-size slide

  24. 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

    View full-size slide

  25. パケットフォワードのスループット
    2020/6/6 26
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    IPv4 IPv6
    Mbps
    forward br0 enp1s0

    View full-size slide

  26. 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

    View full-size slide

  27. 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

    View full-size slide

  28. 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

    View full-size slide

  29. ipip6 tunnel利⽤時のスループット調査
    2020/6/6 30
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    IPv4 IPv6
    Mbps
    ipip6 forward br0 enp1s0

    View full-size slide

  30. 物理マシンスループット調査まとめ
    • 各ポート概ね1Gbpsの速度が
    でている
    • bridge, forward等してもさほ
    どスループット差はない
    • ipip6トンネルも900Mbps以上
    出ている
    2020/6/6 31
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    IPv4 IPv6
    Mbps
    ipip6 forward br0 enp1s0

    View full-size slide

  31. 仮想マシンのスループット
    調査
    2020/6/6 32

    View full-size slide

  32. VM性能調査
    • VMの性能限界を調査する
    • VMまでのスループット調査
    • ブリッジ時のスループット調査
    • パケットフォワード時のスループット調査
    • ipip6 tunnel利⽤時のスループット調査
    2020/6/6 33

    View full-size slide

  33. 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

    View full-size slide

  34. なぜブリッジを使うか
    • スループットはmacvtapのほうが良くなる
    • 代わりに様々な問題を引いた
    • 引いた問題については後述
    2020/6/6 35

    View full-size slide

  35. 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

    View full-size slide

  36. 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

    View full-size slide

  37. VMまでのスループット調査結果
    2020/6/6 39
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    IPv4(Mbps)
    Mbps
    host nic vm nic

    View full-size slide

  38. 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

    View full-size slide

  39. 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

    View full-size slide

  40. 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

    View full-size slide

  41. 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

    View full-size slide

  42. 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

    View full-size slide

  43. 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

    View full-size slide

  44. 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

    View full-size slide

  45. VMでのパケットフォワード調査結果
    2020/6/6 47
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    host forward vm forward
    Mbps
    IPv4

    View full-size slide

  46. 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

    View full-size slide

  47. 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

    View full-size slide

  48. 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

    View full-size slide

  49. ipip6 tunnel利⽤時のスループット調査
    2020/6/6 51
    0
    100
    200
    300
    400
    500
    600
    700
    800
    900
    1000
    host ipip6 vm ipip6
    Mbps
    IPv4 ipip6

    View full-size slide

  50. 仮想マシンスループット調査結果まとめ
    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

    View full-size slide

  51. 今回の結論
    • ルーターを仮想マシンで作るのは難しい
    • 物理マシンに直接インストールして作ろう
    2020/6/6 53

    View full-size slide

  52. 謎現象。解決⽅法募集中。
    2020/6/6 54

    View full-size slide

  53. 謎現象
    • macvtapで接続すると様々な謎現象が起こる
    • IPv6の疎通だけが取れない
    • ⽚側からはVMに疎通が取れるが、もう⽚側からは取れない
    • ⽚側だけarpがhostマシン側で落とされてる様⼦
    • IPv6通信が途中で途切れる
    • bridgeでもIPv6はうまく動かないことがある
    • VMでbridgeを作ると、途中まで確⽴していたneighborがFAILDになる
    2020/6/6 55

    View full-size slide

  54. 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

    View full-size slide

  55. 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

    View full-size slide

  56. 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

    View full-size slide

  57. 発表後検証
    2020/6/6 59

    View full-size slide

  58. 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

    View full-size slide

  59. 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

    View full-size slide

  60. 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

    View full-size slide

  61. 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

    View full-size slide