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. ϋʔυ΢ΣΞԾ૝Խࢧԉػೳʹ ΑΔԾ૝Խ • CPUʹϋΠύʔόΠβΛ࣮ߦ͢ΔϞʔυͱήε τOSΛ࣮ߦ͢ΔϞʔυΛ௥ՃɿIntel VTɺAMD-V • ϋʔυ΢ΣΞϨϕϧͰԾ૝ԽʹରԠ͢ΔࣄʹΑ ΓԾ૝ԽΦʔόϔουΛ௿ݮ͠ɺϋΠύʔόΠ βͷ࣮૷Λ୯७ʹग़དྷΔ

    • ϋʔυ΢ΣΞࢧԉग़དྷΔൣғΛ޿͛ͭͭ͋Δ • ϝϞϦ؅ཧͷԾ૝ԽࢧԉɿEPT • σόΠεIOͷԾ૝ԽࢧԉɿIntel VT-d + SR-IOV Χʔωϧ Ϟʔυ Ϣʔβ Ϟʔυ Χʔωϧ Ϟʔυ Ϣʔβ Ϟʔυ ϋΠύʔόΠβ Ϟʔυ ήετϞʔυ ring 0 ring 3
  2. Ծ૝σόΠε΁ͷIO • ήετOS͕σόΠε΁IOɺήετϞʔυ͕தஅ͞Ε੍ޚ͕KVM΁໭Δ • QEMU΁σόΠεΤϛϡϨʔγϣϯΛґཔ • QEMUͰσόΠεΤϛϡϨʔγϣϯɺ݁ՌΛKVM΁௨஌ LinuxΧʔωϧ KVM QEMU

    Χʔωϧ Ϣʔβ ήετ04 KVM αϙʔτ Ծ૝σόΠε ᶃσόΠε΁ͷ*0 ϋΠύʔόΠβϞʔυ ήετϞʔυ ᶄ2&.6΁ॲཧΛґཔ ᶅσόΠεΤϛϡϨʔγϣϯ
  3. NICΤϛϡϨʔγϣϯ • QEMUΛ࢖࣮ͬͯࡏͷNICΛΤϛϡϨʔτ→ήετOSͰطଘͷυϥΠό͕࢖͑Δ • Ծ૝Ϩδελ΁ͷΞΫηεͷͨͼʹήετϞʔυͷ࣮ߦΛதஅ͠ɺΧʔωϧ͔Β QEMUʹ੾Γସ͑ͯΤϛϡϨʔγϣϯΛߦΘͳ͚Ε͹ͳΒͳ͍ Χʔωϧ Χʔωϧ ήετ ϋΠύʔόΠβ

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

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

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

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

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

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

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

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

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

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

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

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

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

    tapυϥΠό bridge qemu tapΫϥΠΞϯτ e1000 ΤϛϡϨʔγϣϯ kvm e1000 υϥΠό TCP/IP ελοΫ NIC2 ᶃ෺ཧׂΓࠐΈ ύέοτ όοϑΝ ᶄύέοτड৴ ᶅUBQ΁ϒϦοδ ᶆίϐʔ ᶇίϐʔ ᶍήετ΁෮ؼ ᶌΤϛϡϨʔγϣϯ݁Ռ௨஌ ᶎύέοτड৴ ᶏύέοτϑΥϫʔυ
  17. VIRTIO-NET • IOԾ૝ԽϑϨʔϜϫʔΫʮvirtioʯΛ༻͍ͯύέοτͷೖग़ྗΛߦ͏ →ήετOSʹvirtio༻υϥΠό͕ඞཁ • Ծ૝Ϩδελ͸ଘࡏͤͣɺvirtio ring্ͷ৘ใΛݟͳ͕ΒύέοτΛऔΓग़͢ →ϋΠύʔόΠβ΁ͷ੾Γସ͑ճ਺͕গͳ͍ Χʔωϧ Χʔωϧ

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

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

    NICυϥΠό tapυϥΠό bridge qemu vhost-net kvm virtio υϥΠό TCP/IP ελοΫ NIC2 ϑΥϫʔυ ׂΓࠐΈ ෺ཧׂΓࠐΈ WJSUJPSJOH ׂΓࠐΈ ϋΠύʔόΠβ ίϐʔͳ͠ ίϐʔͳ͠
  20. 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
  21. 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"