pfSense на Virtio: TCP засича, докато не се изключи разтоварването
Виртуализирана pfSense отговаря на ping и после засича при обемен TCP. Изключете пътя за разтоварване на контролната сума на virtio и измерете цената, вместо да сменяте мрежовата карта.
Клиент съобщава, че тунелът се свързва, ping отговаря, страницата за вход се зарежда и след това трансферът замръзва в една и съща точка при всеки опит. Този модел вече казва много: достижимостта работи, а постоянната пропускателна способност — не. Преди да отворите защитната стена, установете дали VPN изобщо участва в отказа. Пуснете голям TCP през същия шлюз без тунел по пътя; ако и той замръзне, OpenVPN никога не е участвал.
Гост pfSense с мрежова карта virtio има много основателна причина да се проваля точно по този начин.
Малките пакети минават, обемният TCP засича
Ръкостисканията, отговорите на DNS и ехото на ICMP са малки и обикновено минават. Продължителните трансфери принуждават госта да сегментира и именно там се проявява повреденият път за разтоварване. Отказът не е задължително да е симетричен: изходящият трафик може да е чист, докато входящият се губи, или обратното, така че потребителят може да влезе и после да заседне на първия голям отговор. Тъй като същият клиент работи през друг шлюз, вината пада върху най-новия компонент.
Затова тествайте шлюза без тунела. Изтегляне от локалната към глобалната мрежа, достатъчно голямо, за да работи няколко секунди, е достатъчно, и трябва да се направи преди всяка промяна на настройките, за да значи нещо сравнението след това.
Какво всъщност обещава разтоварването
virtio е паравертуален: хостът и гостът споделят работата, хостът обявява възможности за контролна сума и сегментация и очаква гостът да довърши започнатото. Ако стекът на госта не прави това, кадрите излизат с непълни контролни суми или се изхвърлят от хоста. Емулираната E1000 предлага по-прост и по-бавен модел, в който проблемът изчезва без нито една промяна в pfSense. Договарянето на възможности става за всяко устройство, което обяснява защо един гост работи месеци, а неговият пресъздаден близнак се проваля още първия ден.
Договореният набор зависи от версията на хипервизора и избрания модел мрежова карта, а не само от конфигурацията, която сте импортирали.
Едно квадратче запазва virtio
В интерфейса на pfSense разделът Система, после Разширени, после Мрежа съдържа квадратче с име Изключване на хардуерното разтоварване на контролната сума. Отмятането му кара госта да изчислява контролните суми софтуерно, което съответства на това, което стекът FreeBSD зад pfSense очаква от паравертуално устройство. Две свързани опции на същата страница покриват хардуерно разтоварване на TCP сегментацията и хардуерно разтоварване на големия прием. Прибягвайте до тях, когато ръкостисканията успяват, а обемните трансфери — не.
Оставете мрежовата карта като virtio, докато правите промяната. Преминаването към E1000 изгаря процесор на всеки пакет за целия живот на виртуалната машина и скрива конфигурационния проблем от всеки, който наследи хоста, а това е по-лоша сделка от малко по-бавен, но предвидим път на данните.
Измерете цената, която току-що приехте
Софтуерното изчисляване на контролни суми премества работа в госта, затова измерете пропускателната способност след това, вместо да предполагате, че не струва нищо. На малка виртуална машина наказанието е реално, но е видимо и стабилно, за разлика от тиха загуба. Сравнете броячите на грешки на интерфейса и журнала на ядрото на госта преди и след. Хипервизорът, който филтрира моста, е отделен отказ с различни доказателства и никакво знаме за разтоварване няма да го излекува.
Променяйте по едно нещо на тест и записвайте пътя в менюто, квадратчето, което сте отметнали, и числото, което сте измерили. Който срещне следващия пресъздаден гост, ще иска и трите.
Други защитни стени на базата на BSD предлагат еквивалентен контрол в собствените си настройки на интерфейса, така че разсъждението се пренася дори когато пътят в менюто — не.