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

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

Avatar for Takuya ASADA Takuya ASADA
December 01, 2011

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

Avatar for Takuya ASADA

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"