VMXNET3 получает размер буфера и использование памяти

12

Фон

У нас был инцидент, когда отказоустойчивый кластер Windows был прерван. Посмертное вскрытие показало, что узел был «удален», как описано в этой статье .

Мы только недавно полностью переместили этот кластер в нашу среду VMware, и кажется, что описанное выше событие могло быть причиной сбоя.

В соответствующей статье VMware KB об этом говорится об увеличении Small Rx Buffersи Rx Ring #1настройке, но предостерегает, что слишком большое их увеличение может значительно увеличить нагрузку на память хоста.

После проверки Network Interface\Packets Received Discardedсчетчиков производительности для наших ~ 150 виртуальных машин с Windows у 22 виртуальных сетевых плат (16 виртуальных сетевых карт) было отброшено несколько пакетов.

Достаточно небольшого количества, чтобы я не беспокоился о том, чтобы облагать хостами дополнительную нагрузку на память, но я хочу понять, как память используется для этих настроек и откуда берется память.

Вопросов

  1. Какова связь между количеством буферов и размером кольца?
  2. Как рассчитать объем памяти, используемый для заданных значений этих настроек?
  3. Поскольку эти настройки находятся на самой сетевой карте в гостевой ОС, я предполагаю, что они являются настройками драйвера. Это заставляет меня думать, что используемая оперативная память может быть выгружаемой или не выгружаемой.
    1. Это верно?
    2. Если так, я должен волноваться об этом?
  4. Есть проблемы, которые я не принимаю во внимание здесь?

Мы пытаемся определить, есть ли недостаток для установки их максимальных значений на затронутых виртуальных машинах, кроме использования памяти хоста VMware. Например, если мы увеличиваем риск истощения памяти пула в гостевой системе, мы более склонны начинать с малого.

Некоторые (возможно, все) из этих вопросов могут не относиться к VMware или виртуализации.

briantist
источник
Я видел очень странные вещи, когда механизм разгрузки TCP физического сетевого адаптера работал неправильно и виртуальные машины демонстрировали странное поведение, возможно, это может быть следствием, которому вы можете следовать.
SpacemanSpiff
@SpacemanSpiff это стоит проверить, но только 16 виртуальных машин из 150+ демонстрируют такое поведение. Эти 16 распределены по кластеру из 12 узлов, и все они время от времени получают большие объемы трафика, что, кажется, вызывает симптомы, описанные в статье базы знаний. Некоторые из них являются кластерами Windows, поэтому они не перемещаются с DRS, в противном случае я мог бы выяснить, все ли затронутые гости показывали пропущенные пакеты, находясь на определенном хосте, перед тем как отключить vMotioned. Я проверю еще раз и посмотрю, смогу ли я найти какие-либо корреляции. Благодарю.
Бриантист
Микроперенос, возможно, что это за аппаратное обеспечение?
SpacemanSpiff
@SpacemanSpiff Серверы IBM, несколько разных моделей и ревизий, также не уверены, какие сетевые карты, я могу проверить детали завтра.
Бриантист

Ответы:

5

Какова связь между количеством буферов и размером кольца?

Они связаны, но независимы. «Кольцо» rx относится к набору буферов в памяти, которые используются в качестве очереди для передачи входящих сетевых пакетов от хоста (гипервизора) к гостю (Windows VM). Память зарезервирована в гостевой системе сетевым драйвером и сопоставлена ​​с памятью хоста.

Когда новые сетевые пакеты поступают на хост, они помещаются в следующий доступный буфер в кольце. Затем хост запускает IRQ в гостевой системе, на который драйвер гостя отвечает, снимая пакет с кольца и отправляя его в сетевой стек гостевой ОС, который, предположительно, отправляет его гостевому приложению, ожидающему его получения. Предполагая, что пакеты поступают достаточно медленно, и гостевой драйвер обрабатывает их достаточно быстро, в кольце всегда должен быть свободный слот. Однако, если пакеты поступают слишком быстро или гость обрабатывает их слишком медленно, кольцо может заполниться и пакеты могут быть отброшены (как вы видели в своей ситуации).

Увеличение размера кольца может помочь смягчить эту проблему. Если вы увеличите его, за раз будет доступно больше слотов в ринге. Это переходит ко второму параметру, «Small Rx Buffers», который представляет собой общее количество доступных буферов, которые можно использовать для заполнения слотов в кольце. Должно быть как минимум столько же буферов, сколько слотов в кольце. Как правило, вы хотите больше. Когда гость снимает с кольца буфер для передачи в гостевой сетевой стек, он не всегда может быть немедленно возвращен обратно драйверу. Если это произойдет, наличие запасных буферов для заполнения кольца означает, что вы можете идти дольше, не отбрасывая пакеты.

Кольцо Rx # 1 / Малые буферы Rx используются для не гигантских кадров. Если у вас есть конфигурация NIC по умолчанию, это будет единственное кольцо, которое будет использоваться.

Как рассчитать объем памяти, используемый для заданных значений этих настроек?

Предполагая, что вы говорите о не гигантских кадрах, каждый буфер должен быть достаточно большим для хранения всего сетевого пакета, примерно 1,5 КБ. Таким образом, если у вас есть 8192 буфера, это будет использовать 12 МБ. Кольцо большего размера также будет использовать больше памяти, но дескрипторы малы (байты), поэтому вам действительно нужно беспокоиться о буферах.

Поскольку эти настройки находятся на самой сетевой карте в гостевой ОС, я предполагаю, что они являются настройками драйвера. Это заставляет меня думать, что используемая оперативная память может быть выгружаемой или не выгружаемой.

Да, это невыгружаемый пул. Если кольцевые буферы были разбиты на страницы, это, вероятно, привело бы к отбрасыванию пакетов, когда буферы были перенесены обратно.

Есть проблемы, которые я не принимаю во внимание здесь?

Я не уверен, что это имеет отношение к вашей ситуации, но, возможно, стоит отметить, что большее кольцо увеличит объем кэш-памяти пути к сети RX. В микробенчмарках вы увидите, что большее кольцо обычно снижает производительность. Тем не менее, в реальных приложениях, если пакет отбрасывается, это, как правило, более сложная задача, чем небольшой прирост производительности в пакетах скорости.

Источник: я работал в VMware.

Роджер Якобсон
источник
1
Спасибо, Роджер, отличный первый ответ. Я не был в этой компании некоторое время, так что эта проблема была далеко от моего радара, но для полноты, есть ли проблема использования памяти, чтобы установить их на максимумы? В статье KB звучит так, будто вы могли бы использовать таким образом много памяти, но кажется, что объем будет довольно маленьким. Я спрашиваю об этом, потому что также неясно, как измерить эти значения, кроме проб и ошибок, поэтому проще всего установить их на максимум, если нет или мало недостатков.
briantist
1
Re: использование памяти, две вещи, которые я хотел бы отметить: 1) Если вы не используете гигантские кадры, я согласен, объем памяти при максимальной настройке все еще довольно мал. Если вы используете Jumbo-кадры, размер буфера составляет около 9 КБ, поэтому вы используете больше памяти. 2) Объем памяти, доступной в невыгружаемом пуле, меньше, чем общий объем памяти на хосте. Я не эксперт здесь, но эта ссылка имеет довольно полное изложение того, как рассчитать доступную память: blogs.technet.microsoft.com/markrussinovich/2009/03/10/…
Роджер Якобсон
Отлично, спасибо. Я надеюсь, что этот ответ поможет кому-то в будущем (возможно, это будет даже я, если я
столкнусь с
0

У меня нет ответа на пункт 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

YuKYuK
источник
Спасибо за ответ, но я VCP. Это не совсем о конфигурации хоста вообще. В статье Microsoft, на которую я ссылался, объясняется, что рассматриваемый счетчик производительности не должен превышать 0, и он находится на нескольких виртуальных машинах. Я пытаюсь получить представление о настройках vNIC, помимо того, что описано в статье VMware KB.
Бриантист
-1

Я не в состоянии полностью искать и указывать вам нужные страницы: поэтому я прошу вас поискать детали самостоятельно ... (извините)

В Fail over Cluster есть 4 настройки, которые можно настроить; и они не будут влиять на буферы или выгружаемые или не выгружаемые ... Это изменяет способ, которым Fail over Cluster принимает решение считать узел "удаленным". Эти настройки:

SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold

Они могут не решить вашу проблему, но их настройка может вывести вас из неприятностей на данный момент ...

Вернувшись в понедельник, я проверю этот пост, если у вас есть дополнительные вопросы

HTH, Эдвин.

Эдвин ван Миерло
источник
PS: можете ли вы сообщить нам версию Windows, которую вы используете?
Эдвин ван Миерло
Это была Windows 2008. Я получил ответ от VMware (по прошествии всех этих месяцев), но я даже не в компании, где я был, когда это произошло. Ответ не прост, и я хотел прочитать их ответ и опубликовать что-нибудь, но у меня не было времени. Я ценю ваши советы о кластере, но пока не могу их опробовать.
бриантист
Я только замечаю, что оригинальному сообщению пару месяцев назад, что было не очень ясно в приложении для Android ... В следующий раз я посмотрю поближе ... тем временем мой ответ все еще действителен для других пользователей, которые могут искать за аналогичный опыт.
Эдвин ван Миерло