pfSense na Virtio: TCP zastyga, dopóki offload nie zostanie wyłączony
Zwirytualizowany pfSense odpowiada na ping, a potem zastyga przy dużym TCP. Wyłącz ścieżkę offloadu sumy kontrolnej virtio i zmierz koszt, zamiast wymieniać kartę sieciową.
Klient zgłasza, że tunel się łączy, ping odpowiada, strona logowania się ładuje, a następnie transfer zastyga w tym samym miejscu przy każdej próbie. Ten wzorzec mówi już wiele: osiągalność działa, a trwała przepustowość nie. Zanim otworzysz zaporę, ustal, czy VPN w ogóle uczestniczy w awarii. Przepuść duży TCP przez tę samą bramę bez tunelu na ścieżce; jeśli też zastygnie, OpenVPN nigdy nie był zaangażowany.
Gość pfSense z kartą sieciową virtio ma bardzo dobry powód, by zawieść dokładnie w takiej formie.
Małe pakiety przechodzą, duży TCP zawisa
Uściski dłoni, odpowiedzi DNS i echa ICMP są małe i zwykle przechodzą. Trwałe transfery zmuszają gościa do segmentacji i właśnie tam ujawnia się uszkodzona ścieżka offloadu. Awaria nie musi być symetryczna: ruch wychodzący może być czysty, gdy przychodzący ginie, lub odwrotnie, więc użytkownik może się zalogować, a potem zastygnąć na pierwszej dużej odpowiedzi. Ponieważ ten sam klient działa przez inną bramę, wina spada na najnowszy komponent.
Przetestuj więc bramę bez tunelu. Wystarczy pobieranie z LAN do WAN wystarczająco duże, by trwać kilka sekund, i trzeba je wykonać przed jakąkolwiek zmianą ustawień, żeby późniejsze porównanie coś znaczyło.
Co offload naprawdę obiecuje
virtio jest parawirtualne: host i gość dzielą pracę, host ogłasza możliwości sumy kontrolnej i segmentacji i oczekuje, że gość dokończy to, co zaczął. Jeśli stos gościa tego nie robi, ramki wychodzą z niepełnymi sumami kontrolnymi albo host je odrzuca. Emulowana E1000 oferuje prostszy i wolniejszy model, w którym problem znika bez jednej zmiany w pfSense. Negocjacja możliwości odbywa się dla każdego urządzenia osobno, co wyjaśnia, dlaczego jeden gość działa miesiącami, a jego odtworzony bliźniak zawodzi pierwszego dnia.
Wynegocjowany zestaw zależy od wersji hipernadzorcy i wybranego modelu karty sieciowej, nie tylko od zaimportowanej konfiguracji.
Jedno pole wyboru utrzymuje virtio
W interfejsie pfSense ścieżka System, potem Zaawansowane, potem Sieć zawiera pole wyboru o nazwie Wyłącz sprzętowy offload sumy kontrolnej. Zaznaczenie go sprawia, że gość liczy sumy kontrolne w oprogramowaniu, co odpowiada temu, czego stos FreeBSD za pfSense oczekuje od urządzenia parawirtualnego. Dwie powiązane opcje na tej samej stronie obejmują sprzętowy offload segmentacji TCP i sprzętowy offload dużego odbioru. Sięgnij po nie, gdy uściski dłoni się udają, a duże transfery nie.
Zostaw kartę sieciową jako virtio, wykonując zmianę. Przejście na E1000 pali procesor przy każdym pakiecie przez cały czas życia VM i ukrywa problem konfiguracji przed każdym, kto odziedziczy hosta, co jest gorszą wymianą niż nieco wolniejsza, ale przewidywalna ścieżka danych.
Zmierz koszt, który właśnie zaakceptowałeś
Programowe liczenie sum kontrolnych przenosi pracę do gościa, więc zmierz potem przepustowość, zamiast zakładać, że nic nie kosztuje. Na małej VM kara jest realna, ale widoczna i stabilna, w przeciwieństwie do cichej straty. Porównaj liczniki błędów interfejsu i log jądra gościa przed i po. Hipernadzorca filtrujący most to osobna awaria z innymi dowodami i żadna flaga offloadu jej nie wyleczy.
Zmieniaj jedną rzecz na test i zapisuj ścieżkę menu, zaznaczone pole i zmierzoną liczbę. Kto spotka następnego odtworzonego gościa, będzie chciał wszystkich trzech.
Inne zapory oparte na BSD oferują równoważną kontrolę we własnych ustawieniach interfejsu, więc rozumowanie działa nawet wtedy, gdy ścieżka menu nie.