pfSense sa Virtio: Bumabara ang TCP hanggang patayin ang offload
Ang virtualized na pfSense ay sumasagot sa ping at pagkatapos ay bumabara sa malaking TCP. Patayin ang virtio checksum offload path at sukatin ang gastos sa halip na palitan ang network card.
Isang kliyente ang nag-uulat na kumokonekta ang tunnel, sumasagot ang ping, naglo-load ang login page, at pagkatapos ay nagyeyelo ang paglilipat sa parehong punto sa bawat pagtatangka. Marami nang sinasabi ang pattern na iyon: gumagana ang maabot at hindi gumagana ang tuloy-tuloy na throughput. Bago buksan ang firewall, alamin kung may kinalaman man ang VPN sa kabiguan. Magpadala ng malaking TCP sa parehong gateway na walang tunnel sa landas; kung nagyelo rin ito, hindi kailanman nasangkot ang OpenVPN.
Ang pfSense guest na gumagamit ng virtio network card ay may napakagandang dahilan para mabigo sa eksaktong anyo na iyon.
Dumadaan ang maliliit na packet, bumabara ang malaking TCP
Ang mga handshake, sagot ng DNS at ICMP echo ay maliliit at karaniwang dumadaan. Pinipilit ng tuloy-tuloy na paglilipat ang guest na mag-segment, at doon lumilitaw ang sirang offload path. Hindi kailangang maging simetriko ang depekto: maaaring malinis ang palabas habang bumabagsak ang papasok, o kabaliktaran, kaya makakapasok ang isang user at pagkatapos ay bumabara sa unang malaking sagot. Dahil gumagana ang parehong kliyente sa ibang gateway, ang pinakabagong bahagi ang sinisisi.
Kaya subukan ang gateway nang walang tunnel. Sapat na ang pag-download mula LAN papuntang WAN na sapat ang laki para tumakbo nang ilang segundo, at dapat itong gawin bago ang anumang pagbabago sa setting upang may kahulugan ang paghahambing pagkatapos.
Ano ba talaga ang ipinapangako ng offload
Ang virtio ay paravirtual: hinahati ng host at guest ang trabaho, inaanunsyo ng host ang kakayahan sa checksum at segmentation at inaasahan nitong tatapusin ng guest ang sinimulan nito. Kung hindi iyon ginagawa ng stack ng guest, lumalabas ang mga frame na may kulang na checksum o itinatapon ng host. Ang emulated na E1000 ay nag-aalok ng mas simple at mas mabagal na modelo kung saan nawawala ang problema nang walang kahit isang pagbabago sa pfSense. Nagaganap ang negosasyon ng kakayahan sa bawat device, na nagpapaliwanag kung bakit tumatakbo ang isang guest nang ilang buwan habang nabigo ang itinayong muli nitong kambal sa unang araw.
Ang napagkasunduang set ay nakasalalay sa bersyon ng hypervisor at sa napiling modelo ng network card, hindi lamang sa configuration na inangkat mo.
Isang checkbox lang ang nagpapanatili ng virtio
Sa pfSense interface, ang System pagkatapos Advanced pagkatapos Networking ay may checkbox na pinangalanang Disable hardware checksum offload. Kapag minarkahan ito, kinakalkula ng guest ang checksum sa software, na tumutugma sa inaasahan ng FreeBSD stack sa likod ng pfSense mula sa isang paravirtual device. Dalawang kaugnay na opsyon sa parehong pahina ang sumasaklaw sa hardware TCP segmentation offload at hardware large receive offload. Gamitin ang mga ito kapag nagtagumpay ang handshake ngunit hindi ang malaking paglilipat.
Iwanan ang network card bilang virtio habang ginagawa ang pagbabago. Ang paglipat sa E1000 ay nagsusunog ng CPU sa bawat packet sa buong buhay ng VM at itinatago ang problema sa configuration sa sinumang magmamana ng host, na mas masamang palitan kaysa sa bahagyang mas mabagal ngunit mahuhulaang data path.
Sukatin ang gastos na katatanggap mo lang
Ang software checksum ay naglilipat ng trabaho papunta sa guest, kaya sukatin ang throughput pagkatapos sa halip na ipagpalagay na walang gastos ito. Sa maliit na VM, totoo ang parusa, ngunit nakikita at matatag ito, hindi tulad ng tahimik na pagkawala. Ihambing ang error counters ng interface at ang kernel log ng guest bago at pagkatapos. Ang hypervisor na nag-filter ng bridge ay hiwalay na depekto na may ibang ebidensya, at walang offload flag ang makakagamot dito.
Magbago ng isang bagay bawat test at isulat ang menu path, ang checkbox na minarkahan mo at ang numerong sinukat mo. Ang haharap sa susunod na itinayong muli na guest ay kakailanganin ang tatlo.
Ang iba pang firewall na nakabase sa BSD ay nag-aalok ng katumbas na kontrol sa sarili nilang interface settings, kaya naglalakbay ang pangangatwiran kahit hindi naglalakbay ang menu path.