Показаны сообщения с ярлыком performance. Показать все сообщения
Показаны сообщения с ярлыком performance. Показать все сообщения

High-speed Networking Features vs VMware VM

Начиная с Windows 2008 R2 MS придумывает всякие разные штуки для оптимизации работы сети. Происходит это за счет перераспределения выполняемых операций между CPU и сетевой карточкой.
Некоторые из них описаны здесь.
При использовании данных фич на реальном железе теоретически должен наблюдаться прирост производительности системы и снижение загрузки центрального процессора.

Рассмотрим один из таких параметров - TCP Chimney Offload.
В случае с активированным TCP Chimney Offload происходит передача ряда функций обработки TCP трафика от CPU к сетевому адаптеру, что, естественно, в случае с VM совсем не правильно.

В моем случае проблема проявилась на VM c W2k8r2 (vmxnet3), app сервере с множественными пользовательскими подключениями (200+). Со стороны пользователя это выглядело как постоянные разрывы сессий и ошибки при передаче данных.

По умолчанию параметр TCP Chimney Offload в Windows 2008 R2 включен. Вариантов отключения два:

1. Правка в ручную ключа реестра:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip - DisableTaskOffload=1 

2. netsh int tcp set global chimney=disabled

С выключением параметра проблемы с пользовательскими подключениями исчезли. Выключил данный параметр еще на ряде VM - новых проблем не словил. Внес данные изменения в эталонный шаблон.

Отключение balloon driver

Есть два способа почти законного отъема денег у граждан отключения balloon driver в VM.

1. Правим *.vmx или добавляем ключ в Configuration Parameters VM (что есть одно и то же):

sched.mem.maxmemctl = 0

2. Подходит для VM Windows. Правим реестр:

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\VMMEMCTL

Меняем ключик Start

Все это не очень полезно для продуктивных сред, а вот для изучения работы Memory compression и VMkernel swap вполне сгодиться.

вище, швидше, сильніше

Действующие лица истории двух месячной давности:
Я
К – автор приложения
З – заказчик, на его площадке работает приложение написанное К
А.К. – админ компании, где работает К.

Раннее субботнее утро. Звонок с неизвестного номера:
К: Зачем Вы посоветовали компании "XYZ" запускать мое приложение на виртуальном сервере ? Теперь там проблемы с производительностью моего приложения. Заказчик жалуется. Скажите, чтобы перенесли мое приложение на нормальный сервер. 
Я: О_о. 
Пытаюсь прояснить ситуацию: что за приложение, какие проблемы и кто автор раннего звонка. 
Подключаюсь к инфраструктуре "XYZ", смотрю статистику производительности за последних два месяца VM с "болеющим" приложением - курит. Возникает желание забрать лишнее ядро и половину выделенной памяти.
Я:  Постараюсь в ближайшее время разобраться.
Вешаю трубку. Звоню заказчику "XYZ" - прояснить ситуацию с "тормозящим приложением"
Я:  Привет, какие у вас проблемы с приложением  ? 
З: Никаких, все ок 
Я: О_о. Мне только что звонил К, сказал, что у вас все тормозит.
З: Нет. все нормально.
Звоню К.
Я: У них все нормально. Никто не жалуется.
К: Они просто не понимают, как быстро может работать мое приложение, поэтому не жалуются. Это все ваша виртуализация, она тормозит все мои приложения. Когда мы тестировали приложение на НАСТОЯЩЕМ сервере, все работало быстрее. Можете узнать у наших админов.

Получаю скайп админов, звоню, объясняю ситуацию.
С той стороны смех:
А.К:  Скажи, что перенесете на физический сервер, иначе выест мосх.
Я: О_о.
А.К: У нас все разрабатываемые приложения тестируются только на VM. Пока автору этого приложения не сказали, что перенесли  на физический сервер, он не давал нам покоя. Поступи так же. Его приложение никогда не тестировалось и не работало на не виртуальном сервере.

Так и поступили: уменьшил ресурсы сервера, сказал К, что перенесли его приложение на физический сервер. Больше «жалоб» не поступало.  Для З. ничего не изменилось, К. – доволен. Возможно, меня можно обвинить в поддержании невежества и заблуждений, но, порой, зануде проще дать, чем отказать. Все счастливы. Занавес. 

Вспомнилось после прочтения на v-front.de такой вот притчи. 

Битва за performance CPU

В продолжении заметки о доступных к мониторингу счетчиках хотелось бы уменьшить список счетчиков на которые необходимо в первую очередь обращать внимание при troubleshooting.

- Первое что стоит понимать количество ядер процессора физического сервера будет меньше суммарного количества vCPU виртуальных машин "находящихся" на этом сервере, от этого я возникает ряд специфических для виртуализации проблем с производительностью.
- 1 vCPU = 1 vCore = 1 Core
- Для большинства случаев на серверах стоит включать hyper-threading.
- Включайте поддержку MMU Virtualization (Intel EPT and AMD RVI) - это позволит уменьшить накладные расходы связанные с необходимостью поддержания согласованного представления памяти для нескольких vCPU.
- Выделяйте для виртуальной машины минимальное число vCPU. В случае с vCPU принцип чем больше чем лучше и быстрее - не работает. Выделение неиспользуемых ресурсов ведет к росту накладных расходов и снижению эффективности использования ресурсов. "Лишние" ресурсы выделенные виртуальной машине, не только могут не ускорить ее саму, но и привести к падению производительности виртуальных машин разделяющих с ней одни физические ресурсы. Планировщик гостевой ОС может выполнять миграцию однопоточной нагрузки между vCPU, что также снизит производительность.
- Отключите все неиспользуемые устройсва: COM, LPT порты, USB контроллеры, Floppy, CD, DVD устройства, сетевые карты, дисковые контроллеры. USB контроллеры потребляют ресурсы CPU, PCI - резервируют под себя ресурсы памяти - это общая рекомендация, не относящаяся только к ресурсам CPU.
- Чтобы использовать ресурсы несколько vCPU приложение должно поддерживать работу в многопоточном режиме.

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

Счетчики которые стоит отслеживать для оптимизации производительности или первичного выявления проблем с производительностью. Названия счетчиков приведены в виде представленном в esxtop.

%RDY>10 - виртуальной машине не хватает ресурсов процессора, выстроилась очередь к ресурсам процессора. Вариантов может быть несколько: ресурсов действительно физического процессора действительно не хватает, ресурсов физического сервера хватает, но гипервизор не дает их виртуальной машине (машине надо русурсы 2-х Core, а у нее только 1 vCPU), использование Limit для данной машины. Узнать точную причину такого поведения можно используя другие счетчики:

%CSTP>3 - накладные расходы на многопроцессорную машину. Машина ждет освобождения нескольких vCPU для одновременного исполнения операций. Необходимо уменьшить число vCPU.

%MLMTD>0 - машина уперлась в Limit. Естественно, необходимо убрать ограничения по CPU.

%SWPWT>5 - машина ожидает чтения из файла подкачки. Необходимо увеличить выделенную память.

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

В общем, все что сможет для обеспечения максимальной производительности сделает CPU Scheduler ESXi, а все остальное в руках администраторов.

В качестве источника использовался Performance Best Practices, настоятельно рекомендованный к вдумчивому прочтению.

Тип ресурсов, счетчики и объекты.

В vSphere существует иерархия объектов инфраструктуры Data center -> Cluster -> Host -> Resource pool -> VM. Каждый из этих объектов использует ресурсы, а значит для него доступны счетчики для мониторинга этих ресурсов. Data center скорее логическая единица иерархии, она не использует ресурсы, а значит и доступных счетчиков для объекта "Data center" нет.

Доступные счетчики для мониторинга ресурсов остальных объектов иерархии выглядят так:

CPU

Memory