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

仮想化環境におけるパケットフォワーディング

Takuya ASADA
December 01, 2011

 仮想化環境におけるパケットフォワーディング

Takuya ASADA

December 01, 2011
Tweet

More Decks by Takuya ASADA

Other Decks in Technology

Transcript

  1. Ծ૝Խ؀ڥʹ͓͚Δ
    ύέοτϑΥϫʔσΟϯά
    ઙా ୓໵ ˏ ౦ژ޻Պେֶ
    Twitter: @syuu1228

    View Slide

  2. ͓͞Β͍

    View Slide

  3. Ծ૝Խٕज़ͱ͸
    1୆ͷίϯϐϡʔλ্ʹෳ਺ͷԾ૝తͳίϯϐϡʔλΛ
    ಈ࡞ͤ͞ɺͦΕͧΕͷ্ͰOSɾΞϓϦέʔγϣϯΛ࣮
    ߦ
    ϋʔυ΢ΣΞ
    04
    ϋʔυ΢ΣΞ
    ϋΠύʔόΠβ
    04 04
    ϓϩηε ϓϩηε
    ϓϩηε
    ैདྷ Ծ૝Խ

    View Slide

  4. ϋʔυ΢ΣΞԾ૝Խࢧԉػೳʹ
    ΑΔԾ૝Խ
    • CPUʹϋΠύʔόΠβΛ࣮ߦ͢ΔϞʔυͱήε
    τOSΛ࣮ߦ͢ΔϞʔυΛ௥ՃɿIntel VTɺAMD-V
    • ϋʔυ΢ΣΞϨϕϧͰԾ૝ԽʹରԠ͢ΔࣄʹΑ
    ΓԾ૝ԽΦʔόϔουΛ௿ݮ͠ɺϋΠύʔόΠ
    βͷ࣮૷Λ୯७ʹग़དྷΔ
    • ϋʔυ΢ΣΞࢧԉग़དྷΔൣғΛ޿͛ͭͭ͋Δ
    • ϝϞϦ؅ཧͷԾ૝ԽࢧԉɿEPT
    • σόΠεIOͷԾ૝ԽࢧԉɿIntel VT-d + SR-IOV
    Χʔωϧ
    Ϟʔυ
    Ϣʔβ
    Ϟʔυ
    Χʔωϧ
    Ϟʔυ
    Ϣʔβ
    Ϟʔυ
    ϋΠύʔόΠβ
    Ϟʔυ
    ήετϞʔυ
    ring 0
    ring 3

    View Slide

  5. LINUX KVMͷ࢓૊Έ

    View Slide

  6. LINUX KVM ֓ཁ
    • LinuxΧʔωϧʹ૊Έࠐ·ΕͨγϯϓϧͳϋΠύʔόΠβʢԾ૝Խࢧ
    ԉػೳͷ͋ΔCPUΛલఏʣ
    • CPUԾ૝ԽҎ֎ͷػೳ͸KVMରԠͷQEMU͕୲౰ʢԾ૝σόΠεɺϝ
    ϞϦ֬อɺBIOS…ʣ
    LinuxΧʔωϧ
    KVM
    QEMU
    Χʔωϧ Ϣʔβ
    ϋΠύʔόΠβϞʔυ ήετϞʔυ
    KVM
    αϙʔτ
    Ծ૝σόΠε
    ήετ04

    View Slide

  7. QEMU
    • ϓϩάϥϜͰCPUΛΤϛϡϨʔτɺήετ؀ڥͷϓϩάϥϜΛ࣮ߦ
    • ҟͳΔΞʔΩςΫνϟΛΤϛϡϨʔτग़དྷΔʢ͜Ε͕ຊདྷͷ໨తʣ
    • ඇৗʹ஗͍ɾΤϛϡϨʔγϣϯ͸Ծ૝Խʹ͸ແବ
    QEMU mov dx,3FBh
    mov al,128
    out dx,al
    $16
    Τϛϡ
    Ϩʔλ
    ࣮ߦ
    Ծ૝σ
    όΠε
    OS
    ෺ཧσ
    όΠε
    ෺ཧ
    $16
    IO

    View Slide

  8. QEMU-KVM
    • CPUΤϛϡϨʔλΛಈ͔͢୅ΘΓʹKVM΁ήετϞʔυ΁ͷ੾Γସ
    ͑Λཁٻ͢ΔΑ͏ʹվ଄
    • ήετ͔ΒIO͕ൃੜͨ͠৔߹ɺKVM͔ΒQEMU΁Ծ૝σόΠε΁ͷ
    IO͕ૹΕΔΑ͏ʹվ଄
    QEMU
    Ծ૝σ
    όΠε
    OS
    ෺ཧσ
    όΠε
    ෺ཧ
    $16
    KVM
    Ϟʔυ੾ସ

    View Slide

  9. ήετϞʔυ΁ͷ੾Γସ͑
    • QEMU͸CPUΤϛϡϨʔγϣϯΛߦ͏୅ΘΓʹήετ΁ͷϞʔυ੾Γସ͑Λґཔ͢ΔioctlΛΧʔ
    ωϧ΁ൃߦ
    • KVM͸CPUͷϞʔυΛήετϞʔυ΁Ҡߦ
    • ήετOS͕ϋʔυ΢ΣΞ΁ͷIOͳͲτϥοϓ͞ΕΔΑ͏ͳಈ࡞Λߦ͏͔ɺ෺ཧϋʔυ΢ΣΞ͔
    ΒͷׂࠐΈ͕͔͔Δ·ͰήετϞʔυ͕࣮ߦ͞ΕΔ
    LinuxΧʔωϧ
    KVM
    QEMU
    Χʔωϧ Ϣʔβ
    ήετ04
    KVM
    αϙʔτ
    Ծ૝σόΠε
    ᶃ ioctl(KVM_RUN)
    ᶄ VMLAUNCH
    ϋΠύʔόΠβϞʔυ ήετϞʔυ

    View Slide

  10. Ծ૝σόΠε΁ͷIO
    • ήετOS͕σόΠε΁IOɺήετϞʔυ͕தஅ͞Ε੍ޚ͕KVM΁໭Δ
    • QEMU΁σόΠεΤϛϡϨʔγϣϯΛґཔ
    • QEMUͰσόΠεΤϛϡϨʔγϣϯɺ݁ՌΛKVM΁௨஌
    LinuxΧʔωϧ
    KVM
    QEMU
    Χʔωϧ Ϣʔβ
    ήετ04
    KVM
    αϙʔτ
    Ծ૝σόΠε
    ᶃσόΠε΁ͷ*0
    ϋΠύʔόΠβϞʔυ ήετϞʔυ
    ᶄ2&.6΁ॲཧΛґཔ
    ᶅσόΠεΤϛϡϨʔγϣϯ

    View Slide

  11. KVMͷԾ૝NIC

    View Slide

  12. NICΤϛϡϨʔγϣϯ
    • QEMUΛ࢖࣮ͬͯࡏͷNICΛΤϛϡϨʔτ→ήετOSͰطଘͷυϥΠό͕࢖͑Δ
    • Ծ૝Ϩδελ΁ͷΞΫηεͷͨͼʹήετϞʔυͷ࣮ߦΛதஅ͠ɺΧʔωϧ͔Β
    QEMUʹ੾Γସ͑ͯΤϛϡϨʔγϣϯΛߦΘͳ͚Ε͹ͳΒͳ͍
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ϑΥϫʔυ
    ׂΓࠐΈ
    ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    Ϩδελ
    ΞΫηε
    ׂΓࠐΈ
    Ϩδελ
    ΞΫηε
    ίϐʔ
    ίϐʔ

    View Slide

  13. NICΤϛϡϨʔγϣϯͷಈ࡞
    • ύέοτ͕NICʹண৴ɺ෺ཧׂΓࠐΈ͕ൃੜ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ

    View Slide

  14. NICΤϛϡϨʔγϣϯͷಈ࡞
    • NICυϥΠό͕ύέοτΛड৴
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴

    View Slide

  15. NICΤϛϡϨʔγϣϯͷಈ࡞
    • ϒϦοδ͕ύέοτΛtapσόΠε΁ϑΥϫʔυ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ

    View Slide

  16. NICΤϛϡϨʔγϣϯͷಈ࡞
    • tap͔ΒQEMU΁ίϐʔ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ

    View Slide

  17. NICΤϛϡϨʔγϣϯͷಈ࡞
    • QEMU͔ΒήετͷύέοτόοϑΝ΁ίϐʔ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ

    View Slide

  18. NICΤϛϡϨʔγϣϯͷಈ࡞
    • QEMU͔ΒKVM΁Ծ૝ׂΓࠐΈΛཁٻ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶈԾ૝ׂΓࠐΈཁٻ

    View Slide

  19. NICΤϛϡϨʔγϣϯͷಈ࡞
    • KVM͸ήετʹԾ૝ׂΓࠐΈΛηοτͯ͠Ϟʔυ੾ସ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶈԾ૝ׂΓࠐΈཁٻ
    ᶉԾ૝ׂΓࠐΈ

    View Slide

  20. NICΤϛϡϨʔγϣϯͷಈ࡞
    • ήετͷNICυϥΠό͕ϨδελΞΫηεΛߦ͍ɺήετϞʔυ͕தஅ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶊԾ૝ϨδελΞΫηε
    ᶈԾ૝ׂΓࠐΈཁٻ

    View Slide

  21. NICΤϛϡϨʔγϣϯͷಈ࡞
    • KVM͸QEMUʹΤϛϡϨʔγϣϯΛཁٻ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶊԾ૝ϨδελΞΫηε
    ᶋΤϛϡϨʔγϣϯཁٻ

    View Slide

  22. NICΤϛϡϨʔγϣϯͷಈ࡞
    • QEMU͸e1000ΤϛϡϨʔγϣϯΛߦ͍ɺ݁ՌΛKVM΁௨஌
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶊԾ૝ϨδελΞΫηε
    ᶌΤϛϡϨʔγϣϯ݁Ռ௨஌

    View Slide

  23. NICΤϛϡϨʔγϣϯͷಈ࡞
    • KVMΤϛϡϨʔγϣϯ݁ՌΛηοτͯ͠ήετ΁෮ؼ
    Ҏ߱ɺϨδελΞΫηεͷͨͼʹᶊʙᶍͷ܁Γฦ͠
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶍήετ΁෮ؼ
    ᶌΤϛϡϨʔγϣϯ݁Ռ௨஌

    View Slide

  24. NICΤϛϡϨʔγϣϯͷಈ࡞
    • ήετͷNICυϥΠό͕ύέοτΛड৴
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶍήετ΁෮ؼ
    ᶌΤϛϡϨʔγϣϯ݁Ռ௨஌
    ᶎύέοτड৴

    View Slide

  25. NICΤϛϡϨʔγϣϯͷಈ࡞
    • TCP/IPελοΫ͕ύέοτΛϑΥϫʔυ
    Χʔωϧ
    Χʔωϧ
    ήετ
    ϋΠύʔόΠβ Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    e1000
    ΤϛϡϨʔγϣϯ
    kvm
    e1000
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ᶃ෺ཧׂΓࠐΈ
    ύέοτ
    όοϑΝ
    ᶄύέοτड৴
    ᶅUBQ΁ϒϦοδ
    ᶆίϐʔ
    ᶇίϐʔ
    ᶍήετ΁෮ؼ
    ᶌΤϛϡϨʔγϣϯ݁Ռ௨஌
    ᶎύέοτड৴
    ᶏύέοτϑΥϫʔυ

    View Slide

  26. VIRTIO-NET
    • IOԾ૝ԽϑϨʔϜϫʔΫʮvirtioʯΛ༻͍ͯύέοτͷೖग़ྗΛߦ͏
    →ήετOSʹvirtio༻υϥΠό͕ඞཁ
    • Ծ૝Ϩδελ͸ଘࡏͤͣɺvirtio ring্ͷ৘ใΛݟͳ͕ΒύέοτΛऔΓग़͢
    →ϋΠύʔόΠβ΁ͷ੾Γସ͑ճ਺͕গͳ͍
    Χʔωϧ
    Χʔωϧ
    ήετ
    Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    tapΫϥΠΞϯτ
    virtio server
    kvm
    virtio
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ϑΥϫʔυ
    ׂΓࠐΈ
    ෺ཧׂΓࠐΈ
    ίϐʔ
    WJSUJPSJOH
    ίϐʔ
    ׂΓࠐΈ
    ϋΠύʔόΠβ

    View Slide

  27. VHOST-NET
    • QEMUΛ௨ͣ͞ɺΧʔωϧ಺ͷvhost-netϞδϡʔϧ͕ϗετ㲗ήε
    τͷύέοτ΍ΓऔΓΛ੍ޚ
    • QEMU㲗KVMͷ੾Γସ͑ίετΛ࡟ݮ
    Χʔωϧ
    Χʔωϧ
    ήετ
    Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    vhost-net
    kvm
    virtio
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ϑΥϫʔυ
    ׂΓࠐΈ
    ෺ཧׂΓࠐΈ
    WJSUJPSJOH
    ׂΓࠐΈ
    ϋΠύʔόΠβ
    ίϐʔ
    ίϐʔ

    View Slide

  28. SR-IOV
    • ෺ཧNIC͕VMʹରͯ͠Ծ૝NICΛ௚઀ఏڙɹIO͸ϋΠύʔόΠβʔΛհࡏͤͣʹߦΘΕΔ
    • ׂࠐΈ͚ͩ͸Ծ૝Խग़དྷ͍ͯͳ͍ͷͰKVMΛ௨ͯ͡సૹ͞ΕΔ
    • ࠷΋ੑೳ͕ߴ͍͕ϋʔυରԠ͕ඞཁʗήετͷύέοτΛϑΟϧλʔɾվม͢Δࣄ͸೉͍͠
    NIC
    Χʔωϧ
    Χʔωϧ
    ήετ
    Ϣʔβ
    PF
    PFυϥΠό
    qemu
    kvm
    VF
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ϑΥϫʔυ
    ׂΓࠐΈ
    ෺ཧׂΓࠐΈ
    ׂΓࠐΈ
    ׂࠐΈ
    ϋϯυϥ
    VF
    %."ύεεϧʔ
    ϋΠύʔόΠβ

    View Slide

  29. ͲΕΛ࢖͏΂͖ʁ
    • ෯޿͍OSͰԾ૝NIC͕ಈ࡞͢Δඞཁ͕͋Δ
    →NICΤϛϡϨʔγϣϯɺe1000͕࠷΋ߴ଎
    • ࠷ۙͷLinuxΛಈ͔͢༧ఆɺSR-IOVରԠNIC͕ແ͍
    →vhost-net
    • SR-IOVରԠNIC͕͋Δ
    →SR-IOV

    View Slide

  30. KVMͷԾ૝ωοτϫʔΫ

    View Slide

  31. BRIDGE + TAP
    • STPΛؚΉ802.1dඪ४४ڌͷϒϦοδ࣮૷
    • netfilterʹΑΔϑΟϧλϦϯά
    • ϒϦοδࣗମΛΠϯλϑΣʔεͱͯ͠ίϯϑΟάϨʔγϣϯՄೳ
    ϒϦοδ
    xx:xx:xx:xx:xx:01
    ෺ཧ/*$
    xx:xx:xx:xx:xx:00
    tap0
    xx:xx:xx:xx:xx:02
    tap1
    xx:xx:xx:xx:xx:03
    QEMU
    QEMU

    View Slide

  32. BRIDGE+TAPͰNAT
    • ϒϦοδʹTAPͷΈΛܨ͗ɺϒϦοδΠϯλϑΣʔεʹ
    IPϚεΧϨʔυΛઃఆͯ͠NATΛߏ੒
    ϒϦοδ
    xx:xx:xx:xx:xx:01
    ෺ཧ/*$
    xx:xx:xx:xx:xx:00
    tap1
    xx:xx:xx:xx:xx:03
    QEMU
    tap0
    xx:xx:xx:xx:xx:02
    QEMU
    NAT

    View Slide

  33. MACVTAP
    • ෺ཧNICʹରͯ͠௥ՃͷMACΞυϨεΛ෇༩ɺಠཱͨ͠ΠϯλϑΣʔεͱͯ͠ಈ࡞
    • netfilterʹ͸ඇରԠɺbridgeΑΓ؆қతͳ࣮૷Ͱʮ଎͍ʯͱ͞Ε͍ͯΔ
    • ߏ଄্ɺNATߏ੒ʹ͸࢖͑ͳ͍
    ෺ཧ/*$
    xx:xx:xx:xx:xx:00
    macvtap0
    xx:xx:xx:xx:xx:01
    macvtap1
    xx:xx:xx:xx:xx:02
    QEMU
    QEMU

    View Slide

  34. MACVTAPͷϞʔυ
    • bridge
    tap㲗tapؒɺtap㲗NICؒ௨৴Λߦ͑ΔϞʔυ
    • private
    tap㲗tapؒɺtap㲗NICؒ௨৴ΛڐՄ͠ͳ͍Ϟʔυ
    • vepa
    શͯͷύέοτΛ֎෦εΠονͰεΠονϯά͢ΔϞʔυ
    • passthrough
    NICʹೖͬͯ͘ΔશͯͷύέοτΛಛఆͷtapʹྲྀ͢Ϟʔυ

    View Slide

  35. OPENVSWITCH
    • Ծ૝Ϛγϯʹର͠Ծ૝OpenFlowεΠονΛఏڙ
    • ෺ཧߏ੒ʹറΒΕͳ͍ॊೈͳԾ૝ωοτϫʔΫΛ
    L2ϨϕϧͰߏஙՄೳ

    View Slide

  36. ͲΕΛ࢖͏΂͖ʁ
    • NAT؀ڥΛߏ੒ɺύέοτϑΟϧλϦϯάͳͲΛߦ͏
    →bridge + tap
    • ߴ଎ͳϒϦοδ؀ڥ
    →macvtap
    • OpenFlowΛ༻͍ͯॊೈͳL2ωοτϫʔΫΛߏங
    →OpenvSwitch

    View Slide

  37. ࣮ݧతͳػೳɾ࣮૷தͷػೳ

    View Slide

  38. VHOST-NETͷθϩίϐʔରԠ
    • tap→vhost-netɺvhost-net→ήετؒͷύέοτίϐʔΛ཈੍
    • εϧʔϓοτͷ޲্ɺϨΠςϯγͷ࡟ݮ͕ظ଴͞ΕΔ
    Χʔωϧ
    Χʔωϧ
    ήετ
    Ϣʔβ
    NIC
    NICυϥΠό tapυϥΠό
    bridge
    qemu
    vhost-net
    kvm
    virtio
    υϥΠό
    TCP/IP
    ελοΫ
    NIC2
    ϑΥϫʔυ
    ׂΓࠐΈ
    ෺ཧׂΓࠐΈ
    WJSUJPSJOH
    ׂΓࠐΈ
    ϋΠύʔόΠβ ίϐʔͳ͠
    ίϐʔͳ͠

    View Slide

  39. VHOST-NETͷ
    ϚϧνΩϡʔରԠ
    • ݱঢ়ͷγϯάϧΩϡʔͳԾ૝
    NICͰ͸ɺϒϦοδҎ߱ͷύ
    ε͕ಉ࣌ʹ̍εϨουͰ͔͠
    ॲཧͰ͖ͳ͍ҝɺύϑΥʔϚ
    ϯεωοΫʹͳΔ
    • vCPU͕ෳ਺͋Δ؀ڥͰͷੑೳ
    ޲্͕ظ଴͞Ε͍ͯΔ
    TJOHMFRVFVF
    WIPTUOFU
    NIC
    /*$υϥΠό
    CSJEHF
    UBQ
    WJSUJPQVTI
    LWN
    WJSUJPυϥΠό
    5$1*1
    ϩοΫڝ߹
    ͕ൃੜʂ
    NVMUJRVFVF
    WIPTUOFU
    NIC
    /*$υϥΠό
    CSJEHF
    UBQ
    WJSUJPQVTI
    LWN
    WJSUJPυϥΠό
    5$1*1

    View Slide

  40. SR-IOVͷϚϧνΩϡʔରԠ
    • 82599ͷVF͸࠷େ̐Ωϡʔ·ͰͷRSSʹରԠ
    • ݱঢ়Ͱ͸υϥΠόʹ࣮૷͞Ε͍ͯͳ͍͕ɺυϥΠόର
    ԠͰར༻ՄೳʹͳΔͱࢥΘΕΔ

    View Slide

  41. EVB: EDGE VIRTUAL BRIDGING
    • VEBɿSR-IOVରԠNIC্ͷεΠονͰVMؒ௨৴Λॲཧ
    • VEPAɿ෺ཧεΠονͰVMؒ௨৴Λॲཧ
    VM VM VM
    tap tap tap
    switch
    virtio
    driver
    NIC
    switch
    VM VM VM
    VF VF VF
    Linux Kernel
    Linux
    Kernel
    SR-IOV NIC
    ιϑτϒϦοδ
    switch
    switch
    7
    VM VM VM
    VF VF VF
    Linux
    Kernel
    SR-IOV NIC
    switch
    7&1"

    View Slide

  42. ·ͱΊ
    • KVMʹ͓͚ΔԾ૝NICͷϚϧνίΞ؀ڥ΁ͷ࠷దԽ͸ະ
    ͩෆे෼
    • Ծ૝Խͷϋʔυ΢ΣΞʹΑΔࢧԉ͸NICʹཹ·Βͣε
    Πον΁΋޿͕Γͭͭ༗Δ

    View Slide