VMXNET3 отримує розмір буфера та використання пам'яті


12

Фон

У нас трапився інцидент, коли кластер Windows відмовлення зазнав перерви. Після смерть показали, що вузол "видалено", як описано в цій статті .

Ми лише нещодавно повністю перенесли цей кластер у наше середовище VMware, і, здається, що описана вище подія, можливо, була причиною відключення.

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

Після перевірки Network Interface\Packets Received Discardedлічильників продуктивності для наших ~ 150 віртуальних машин Windows, у 22 vNIC серед 16 гостей було викинуто кілька пакетів.

Достатньо невелика сума, що я не переживаю за оподаткування хостів додатковим використанням пам'яті, але хочу зрозуміти, як використовується пам'ять для цих налаштувань і звідки береться пам'ять.

Запитання

  1. Яка залежність між кількістю буферів та розміром кільця?
  2. Як можна обчислити об'єм пам'яті, використаний для заданих значень цих параметрів?
  3. Оскільки ці налаштування знаходяться в самому NIC в гостьовій ОС, я припускаю, що це налаштування драйвера. Це змушує мене думати, що використана оперативна пам’ять може бути підказками або не підказками.
    1. Це правильно?
    2. Якщо так, то я повинен турбуватися про це?
  4. Чи є проблеми, які я тут не беру до уваги?

Ми намагаємося визначити, чи є недолік у встановленні їх максимуму для постраждалих віртуальних машин, окрім використання VMware хост-пам'яті. Якщо, наприклад, ми збільшуємо ризик виснаження пам’яті у басейні у гостя, ми схильні починати з малого.

Деякі з цих питань (можливо, всі) можуть не стосуватися VMware або віртуалізації.


Я бачив по-справжньому невловимі речі, коли двигун завантаження TCP фізичного NIC погано поводився, а VM демонстрували дивну поведінку.
SpacemanSpiff

@SpacemanSpiff це варто перевірити, але лише 16 ВМ із 150+ демонструють свою поведінку. Ці 16 є розповсюдженими по кластеру 12 вузлів, і всі вони отримують періодично високі спалахи трафіку, що, здається, є тим, що викликає симптоми, описані в статті KB. Деякі з них - це кластери Windows, тому вони не рухаються за допомогою DRS, інакше я можу вивчити, чи всі постраждалі гості показали скинуті пакети, перебуваючи на певному хості, перш ніж вимкнути вимкнено. Я ще раз перевірю і побачу, чи зможу знайти якісь кореляції. Дякую.
британіст

Можливо, мікробудування, яке це обладнання?
SpacemanSpiff

@SpacemanSpiff IBM-сервери, кілька різних моделей та версій, також не впевнені, які NIC, я можу перевірити конкретику завтра.
британіст

Відповіді:


5

Яка залежність між кількістю буферів та розміром кільця?

Вони пов'язані, але незалежні. Rx "кільце" відноситься до набору буферів в пам'яті, які використовуються в якості черги для передачі вхідних мережевих пакетів від хоста (гіпервізора) до гостя (Windows VM). Пам'ять зарезервується у гостя мережевим драйвером, і вона відображається у пам'яті хоста.

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

Збільшення розміру кільця може допомогти пом'якшити цю проблему. Якщо ви збільшите її, на рингу одночасно з’явиться більше слотів. Це відображається у другому налаштуванні, "Малі буфери Rx", що є загальною кількістю наявних буферів, які можна використовувати для заповнення прорізів у кільці. У кільці має бути принаймні стільки буферів, скільки слотів. Зазвичай ви хочете більше. Коли гість знімає буфер з кільця для передачі стеку гостьової мережі, він не завжди може бути негайно повернутий назад драйверу. Якщо це трапиться, наявність запасних буферів для заповнення кільця означає, що ви можете піти довше, не скидаючи пакетів.

Кільця Rx №1 / Малі буфери Rx використовуються для кадрів, які не є перемичками. Якщо у вас конфігурація NIC за замовчуванням, це єдине кільце, яке буде використовуватися.

Як можна обчислити об'єм пам'яті, використаний для заданих значень цих параметрів?

Якщо припустити, що ви говорите про кадри, що не є джамбо, кожен буфер повинен бути достатньо великим, щоб зберігати весь мережевий пакет, приблизно 1,5 кбіт. Тож якщо у вас є 8192 буферів, це використовує 12 МБ. Більше кільце також використовуватиме більше пам’яті, але дескриптори невеликі (байти), тому це справді буфери, про які ви повинні турбуватися.

Оскільки ці налаштування знаходяться в самому NIC в гостьовій ОС, я припускаю, що це налаштування драйвера. Це змушує мене думати, що використана оперативна пам’ять може бути підказками або не підказками.

Так, це басейн без розмови Якщо буферизовані буфери були підказками, це, ймовірно, призведе до випадання пакетів, коли буфери повторно завантажуються.

Чи є проблеми, які я тут не беру до уваги?

Я не впевнений, що це стосується вашої ситуації, але, можливо, варто відзначити, що більша кількість кільця збільшить слід кешу мережевого шляху rx. У мікротехнічних показниках ви побачите, що велике кільце зазвичай шкодить продуктивності. Це означає, що в додатках у реальному житті, якщо пакет випадає, зазвичай це більша справа, ніж невеликий приріст швидкості у швидких спалах.

Джерело: Я працював у VMware.


1
Дякую Роджеру, відмінна перша відповідь. Я не був у цій компанії деякий час, тому ця проблема була поза моїм радіолокатором, але для повноти, чи є проблема використання пам'яті, щоб встановити їх на максимум? У статті KB звучить так, ніби ви могли використовувати багато пам'яті таким чином, але здається, що сума була б дуже маленькою. Я запитую це, тому що також незрозуміло, як розмістити ці значення, окрім проб і помилок, тому, можливо, найпростіше встановити їх максимум, якщо немає / мало недоліків.
британіст

1
Re: використання пам'яті, дві речі, які я зауважу: 1) Якщо ви не використовуєте джомбові кадри, я згоден, об'єм пам'яті на максимальних налаштуваннях все ще досить малий. Якщо ви використовуєте джамбо-кадри, розмір буфера становить близько 9 кбіт, тому ви використовуєте більше пам'яті. 2) Обсяг пам’яті, наявної в пулі, що не підключається до сторінки, менший, ніж загальний об'єм пам'яті на хості. Я тут не фахівець, але в цьому посиланні є досить всебічний шлях про те, як обчислити наявну пам’ять: blogs.technet.microsoft.com/markrussinovich/2009/03/10/…
Роджер Якобсон

Велике спасибі Я сподіваюся, що ця відповідь комусь допоможе у майбутньому (можливо, це навіть я буду, якщо я знову
зіткнуся з

0

У мене немає відповіді на пункт 1-2-3, але ви можете дізнатися у свого віртуального інженера про конфігурацію хоста Vmware. Якщо він VCP, він зрозуміє речі :)

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

Існує багато апаратних функцій, які можуть пояснити ваші проблеми, пряму дорогу 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


Дякую за відповідь, але я - ДКП. Це насправді зовсім не про конфігурацію хоста. У статті Microsoft, до якої я посилався, пояснюється, що розглянутий лічильник продуктивності не повинен перевищувати 0, і він знаходиться на декількох віртуальних машинах. Я намагаюся зрозуміти налаштування vNIC за межами того, що пояснено у статті VMware KB.
британіст

-1

Я не в змозі повністю шукати та вказувати на потрібні сторінки, тому я прошу самі шукати деталі ... (вибачте)

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

SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold

Вони можуть не вирішити вашу проблему, але налаштування цих проблем може позбавити вас від неприємностей на даний момент ...

Повернувшись у понеділок, я перевірте це повідомлення, якщо у вас виникнуть додаткові запитання

HTH, Едвін.


PS: Чи можете ви повідомити нам версію Windows, яку ви працюєте?
Едвін ван Мерло

Це була Windows 2008. Я отримав відповідь від VMware (після всіх цих місяців), але я навіть не в тій компанії, де я був, коли це сталося. Відповідь не проста, і я мав на увазі прочитати їх відповідь і написати щось, але у мене не було часу. Я ціную ваші поради щодо кластера, але наразі не можу їх випробувати.
британіст

Я лише зауважую, що початковій публікації є пару місяців, це було не дуже зрозуміло в додатку для Android ... Я буду детальніше ознайомитися наступного разу ... тим часом моя відповідь все-таки справедлива для інших користувачів, які можуть шукати за подібний досвід.
Едвін ван Мерло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.