Фон
У нас был инцидент, когда отказоустойчивый кластер Windows был прерван. Посмертное вскрытие показало, что узел был «удален», как описано в этой статье .
Мы только недавно полностью переместили этот кластер в нашу среду VMware, и кажется, что описанное выше событие могло быть причиной сбоя.
В соответствующей статье VMware KB об этом говорится об увеличении Small Rx Buffers
и Rx Ring #1
настройке, но предостерегает, что слишком большое их увеличение может значительно увеличить нагрузку на память хоста.
После проверки Network Interface\Packets Received Discarded
счетчиков производительности для наших ~ 150 виртуальных машин с Windows у 22 виртуальных сетевых плат (16 виртуальных сетевых карт) было отброшено несколько пакетов.
Достаточно небольшого количества, чтобы я не беспокоился о том, чтобы облагать хостами дополнительную нагрузку на память, но я хочу понять, как память используется для этих настроек и откуда берется память.
Вопросов
- Какова связь между количеством буферов и размером кольца?
- Как рассчитать объем памяти, используемый для заданных значений этих настроек?
- Поскольку эти настройки находятся на самой сетевой карте в гостевой ОС, я предполагаю, что они являются настройками драйвера. Это заставляет меня думать, что используемая оперативная память может быть выгружаемой или не выгружаемой.
- Это верно?
- Если так, я должен волноваться об этом?
- Есть проблемы, которые я не принимаю во внимание здесь?
Мы пытаемся определить, есть ли недостаток для установки их максимальных значений на затронутых виртуальных машинах, кроме использования памяти хоста VMware. Например, если мы увеличиваем риск истощения памяти пула в гостевой системе, мы более склонны начинать с малого.
Некоторые (возможно, все) из этих вопросов могут не относиться к VMware или виртуализации.
источник
Ответы:
Они связаны, но независимы. «Кольцо» rx относится к набору буферов в памяти, которые используются в качестве очереди для передачи входящих сетевых пакетов от хоста (гипервизора) к гостю (Windows VM). Память зарезервирована в гостевой системе сетевым драйвером и сопоставлена с памятью хоста.
Когда новые сетевые пакеты поступают на хост, они помещаются в следующий доступный буфер в кольце. Затем хост запускает IRQ в гостевой системе, на который драйвер гостя отвечает, снимая пакет с кольца и отправляя его в сетевой стек гостевой ОС, который, предположительно, отправляет его гостевому приложению, ожидающему его получения. Предполагая, что пакеты поступают достаточно медленно, и гостевой драйвер обрабатывает их достаточно быстро, в кольце всегда должен быть свободный слот. Однако, если пакеты поступают слишком быстро или гость обрабатывает их слишком медленно, кольцо может заполниться и пакеты могут быть отброшены (как вы видели в своей ситуации).
Увеличение размера кольца может помочь смягчить эту проблему. Если вы увеличите его, за раз будет доступно больше слотов в ринге. Это переходит ко второму параметру, «Small Rx Buffers», который представляет собой общее количество доступных буферов, которые можно использовать для заполнения слотов в кольце. Должно быть как минимум столько же буферов, сколько слотов в кольце. Как правило, вы хотите больше. Когда гость снимает с кольца буфер для передачи в гостевой сетевой стек, он не всегда может быть немедленно возвращен обратно драйверу. Если это произойдет, наличие запасных буферов для заполнения кольца означает, что вы можете идти дольше, не отбрасывая пакеты.
Кольцо Rx # 1 / Малые буферы Rx используются для не гигантских кадров. Если у вас есть конфигурация NIC по умолчанию, это будет единственное кольцо, которое будет использоваться.
Предполагая, что вы говорите о не гигантских кадрах, каждый буфер должен быть достаточно большим для хранения всего сетевого пакета, примерно 1,5 КБ. Таким образом, если у вас есть 8192 буфера, это будет использовать 12 МБ. Кольцо большего размера также будет использовать больше памяти, но дескрипторы малы (байты), поэтому вам действительно нужно беспокоиться о буферах.
Да, это невыгружаемый пул. Если кольцевые буферы были разбиты на страницы, это, вероятно, привело бы к отбрасыванию пакетов, когда буферы были перенесены обратно.
Я не уверен, что это имеет отношение к вашей ситуации, но, возможно, стоит отметить, что большее кольцо увеличит объем кэш-памяти пути к сети RX. В микробенчмарках вы увидите, что большее кольцо обычно снижает производительность. Тем не менее, в реальных приложениях, если пакет отбрасывается, это, как правило, более сложная задача, чем небольшой прирост производительности в пакетах скорости.
Источник: я работал в VMware.
источник
У меня нет ответа на пункт 1-2-3, но вы можете узнать у своего виртуального инженера о конфигурации хоста Vmware. Если он VCP, он поймет материал :)
Вы действительно должны проверить свой хост, потому что проблемы с Windows могут быть на хосте, а не в гостевой.
Существует множество аппаратных функций, которые могут объяснить ваши проблемы, directpath io, rss, vcpu, схема управления питанием ...
Я могу дать вам ссылку, которая поможет вашей виртуальной команде или вам :)
Эта ссылка о настройке хоста http://buildvirtual.net/tuning-esxi-host-networking-configuration/
И этот жирный pdf:
http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.0.pdf
А этот про rss:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2008925
источник
Я не в состоянии полностью искать и указывать вам нужные страницы: поэтому я прошу вас поискать детали самостоятельно ... (извините)
В Fail over Cluster есть 4 настройки, которые можно настроить; и они не будут влиять на буферы или выгружаемые или не выгружаемые ... Это изменяет способ, которым Fail over Cluster принимает решение считать узел "удаленным". Эти настройки:
SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold
Они могут не решить вашу проблему, но их настройка может вывести вас из неприятностей на данный момент ...
Вернувшись в понедельник, я проверю этот пост, если у вас есть дополнительные вопросы
HTH, Эдвин.
источник