Кто-нибудь измерял производительность виртуальных машин для серверов сборки? - PullRequest
3 голосов
/ 12 февраля 2010

Мы пытались использовать виртуальные машины для серверов сборки. Все наши серверы сборки работают под управлением WinXP32, и мы размещаем их на VMWare Server 2.0, работающем на Ubuntu 9.10. Мы строим смесь из C, C ++, пакетов Python и других различных задач развертывания (установщики, файлы 7z, архивы и т. Д.). Управление с использованием серверов сборки VMWare великолепно. Мы можем перемещать их, совместно использовать системные ресурсы в одном большом 8-ядерном корпусе, удаленно получать доступ к системам через веб-интерфейс и просто в основном лучше управлять всем.

Но проблема в том, что производительность по сравнению с использованием физической машины варьируется от плохой до ужасной в зависимости от того, какой сегодня день. Это оказалось очень расстраивающим. Иногда нагрузка на систему для хоста будет превышать 20, а иногда она будет ниже 1. Кажется, что она не основана на том, сколько работы фактически выполняется в системах. Я подозреваю, что в системе есть узкое место, но я не могу понять, что это такое. (самое последнее подозрение - это ввод-вывод, но у нас есть выделенный диск SATA 2 емкостью 1 ТБ 7200 об / мин с 32 МБ кэш-памяти, который не выполняет ничего, кроме виртуальных машин. Кажется, что этого достаточно для 1-2 машин. , 2 ГБ на ВМ, 8 ядер, 1 на виртуальную машину).

Итак, исчерпав все, что я могу придумать, я захотел обратиться к сообществу Stack Overflow.

  • Кто-нибудь запускал или видел, как кто-то еще проводил тесты производительности сборки программного обеспечения внутри ВМ.
  • Чего нам ожидать от физической системы?
  • От какой производительности мы отказываемся?
  • Какие конфигурации оборудования / vm-сервера используются людьми?

Любая помощь будет принята с благодарностью.

1 Ответ

7 голосов
/ 12 февраля 2010

Дисковый ввод-вывод здесь определенно является проблемой, вы просто не можете выполнять сколько-нибудь значительную активность дискового ввода-вывода при резервном копировании с помощью одного шпинделя. Кэш-память объемом 32 МБ на одном диске SATA будет насыщена только вашим хостом и несколькими гостевыми ОС. Если вы посмотрите на счетчик длины очереди диска в вашей операционной системе Ubuntu Host, то увидите, что он высокий (что-либо выше 1 в этой системе с двумя дисками в течение любого промежутка времени означает, что что-то ожидает этот диск).

Когда я измеряю инфраструктуру для виртуальных машин, я обычно беру в среднем 30-50 операций ввода-вывода в секунду на виртуальную машину, и это для систем, в которых дисковая подсистема не работает очень сильно. Для систем, которые не требуют большой активности ввода-вывода, вы можете немного упасть, но шаблоны ввода-вывода для систем сборки будут сильно смещены в сторону большого количества очень случайных и довольно небольших операций чтения. Чтобы усугубить проблему, вы хотите, чтобы множество виртуальных машин одновременно создавало конкуренцию за диск через крышу. Общая пропускная способность диска, вероятно, не является большой проблемой (то, что диск SATA, вероятно, может выдавать 70-100Meg / sec, когда шаблон ввода-вывода является полностью последовательным), но когда файлы малы и разбросаны, вы ограничены IO ограничениями шпинделя, которые будут около 70-100 IO в секунду на SATA 7,2 тыс. Хост-операционная система под управлением гипервизора типа 2, такого как VMware Server, с одним гостем, вероятно, столкнется с этим при небольшой нагрузке.

Я бы порекомендовал создать массив RAID 10 с небольшими и в идеале более быстрыми дисками. 10 тыс. Дисков SAS дадут вам 100-150 IOP каждый, так что пакет из 4 человек может обработать 600 операций чтения IOPS и 300 операций записи IOP до завершения. Также убедитесь, что вы выровняли все разделы данных для диска, на котором размещены VMDK и в гостевой ОС, если вы помещаете файлы виртуальных машин в массив RAID. Для таких рабочих нагрузок это повысит производительность диска на 20-30%. Избегайте RAID 5 для чего-то подобного, пространство дешевое, а штраф на запись на RAID 5 означает, что вам нужно 4 диска в пакете RAID 5 для выравнивания производительности записи одного диска.

Еще один момент, который я хотел бы добавить, - это то, что VMware Server не является отличным гипервизором с точки зрения производительности, если вообще возможно перейти на гипервизор типа 1 (например, ESXi v4, он также бесплатный). Это не тривиальная настройка, и вы полностью теряете хост-ОС, так что это может быть проблемой, но вы увидите гораздо лучшую производительность ввода-вывода по всем направлениям, особенно для дискового и сетевого трафика.

Отредактировано для ответа на ваш комментарий.
1) Чтобы узнать, есть ли у вас проблемы с существующим хостом Ubuntu.
Я вижу, вы пробовали dstat, я не думаю, что это дает вам достаточно деталей, чтобы понять, что происходит, но я не знаком с его использованием, поэтому я могу ошибаться. Iostat даст вам хорошее представление о том, что происходит - эта статья об использовании iostat поможет вам получить более полное представление о реальном шаблоне ввода-вывода, попавшем на диск - http://bhavin.directi.com/iostat-and-disk-utilization-monitoring-nirvana/. Avgrq-sz и avgwq-sz - это необработанные индикаторы количества запросов в очереди. Большие цифры, как правило, плохо, но то, что на самом деле плохо, зависит от типа диска и геометрии RAID. В конечном итоге вы заинтересованы в том, чтобы узнать, проводят ли ваши дисковые операции ввода-вывода больше \ увеличение времени в очереди, чем на самом деле их обслуживание. Вычисление (await-svctim)/await*100 действительно говорит вам о том, что ваш диск пытается поддерживать уровень выше 50%, а ваши операции ввода-вывода тратят столько же времени, сколько их обслуживают диск (и), если он приближается к 100%, диск полностью захлопывается. Если вы обнаружите, что хост фактически не подвержен стрессу, а VMware Server на самом деле просто паршивый (что вполне может быть, я никогда не использовал его на платформе Linux), то вы можете попробовать одну из альтернатив, таких как VirtualBox, прежде чем прыгнуть на ESXi.

2) Чтобы выяснить, что вам нужно.
Определите базовые требования к вводу-выводу типичной сборки в системе, которая имеет хорошую \ приемлемую производительность, - в Windows посмотрите на счетчики IOPS - число считываний диска / сек и записи / диска / сек и убедитесь, что средняя длина очереди <1. Вам необходимо знать пиковые значения для обоих при загрузке системы, мгновенные пики могут быть очень высокими, если все идет из дискового кэша, поэтому следите за устойчивыми пиковыми значениями в течение минуты или около того. Когда у вас есть эти цифры, вы можете выделить дисковую подсистему, которая будет предоставлять то, что вам нужно. Причина, по которой вам нужно смотреть на числа ввода-вывода, состоит в том, что они отражают фактическое переключение, которое должны пройти головки дисковода для завершения чтения и записи (число операций ввода-вывода в секунду, IOPS), и если вы не выполняете потоковую передачу больших файлов или заполнение диска. резервные копии будут наиболее точно отражать пределы, на которые ваш диск попадет при загрузке. Современные диски могут выдержать примерно следующее: </p>

  • 7,2 тыс. Дисков SATA - 70-100 IOPS
  • 10 тыс. Дисков SAS - 120-150 IOPS
  • 15 тыс. Дисков SAS - 150-200 IOPS

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

Пакеты RAID позволяют вам распараллелить рабочую нагрузку ввода-вывода, а при достойном контроллере RAID пакет RAID диска N даст вам N * (базовый IOPS для 1 диска) для чтения ввода-вывода. Для записи ввода-вывода есть штраф, вызванный политикой RAID - RAID 0 не имеет штрафа, запись выполняется так же быстро, как и чтение. RAID 5 требует 2 чтения и 2 записи на IO (чтение четности, чтение существующего блока, запись нового контроля четности, запись нового блока), поэтому он имеет штраф 4 (RAID 10 имеет штраф 2 (2 записи на IO)). RAID 6 имеет штраф 5. Чтобы выяснить, сколько IOPS вам нужно из массива RAID, вы берете базовое число IOPS для чтения, необходимое вашей ОС, и прибавляете к нему произведение числа IOPS для записи, которое требуется ОС, и соответствующий штрафной коэффициент.

3) Теперь определите структуру RAID-массива, которая будет соответствовать вашим потребностям в производительности Если ваш анализ физической базовой системы говорит вам, что вам нужно только 4 \ 5 IOPS, то ваш единственный диск может быть в порядке. Я был бы изумлен, если это произойдет, но не поверьте мне на слово - получите ваши данные и примите обоснованное решение.

В любом случае давайте предположим, что во время базового упражнения вы измерили 30 операций чтения-записи в секунду и 20 операций записи-записи в секунду, и вы хотите иметь возможность поддерживать 8 экземпляров этих систем сборки как виртуальные машины. Для этого ваша дисковая подсистема должна поддерживать 240 операций чтения-ввода-вывода и 160 операций ввода-вывода в ОС. Настройте свои собственные расчеты в соответствии с количеством систем, которые вам действительно нужны.

Если вы выберете RAID 10 (и я настоятельно рекомендую его, RAID 10 жертвует емкостью для производительности, но когда вы проектируете для достаточной производительности, вы можете выбирать диски по размеру, чтобы получить необходимую вам емкость, и результат обычно будет дешевле, чем RAID5, если только Шаблон ввода-вывода включает в себя очень мало операций записи) Ваши диски должны быть в состоянии обеспечить 560 операций ввода-вывода в секунду (240 для чтения и 320 для записи, чтобы учесть коэффициент штрафа записи RAID 10, равный 2).
Это потребует:
- 4 накопителя SAS 15 КБ
- 6 дисков SAS 10 тыс. (Округление вверх, для RAID 10 требуется даже отсутствие дисков)
- 8 дисков SATA 7,2 тыс.

Если бы вы выбрали RAID 5, вам пришлось бы скорректировать увеличение штрафа за запись и, следовательно, потребовалось бы 880 IOPS для достижения желаемой производительности.
Для этого потребуется:
- 6 дисков SAS 15 КБ
- 8 дисков SAS 10 КБ
- 14 дисков SATA 7,2 тыс.

Таким образом, у вас будет намного больше места, но это будет стоить почти вдвое дороже, потому что вам нужно гораздо больше дисков, и вам понадобится довольно большая коробка для них. Вот почему я настоятельно рекомендую RAID 10, если производительность вообще вызывает беспокойство.

Другой вариант - найти хороший SSD (например, Intel X-25E, а не X-25M или что-то более дешевое), в котором достаточно места для ваших нужд. Купите два и установите их для RAID 1, твердотельные накопители довольно хороши, но их частота отказов (даже для таких дисков, как у X-25E) в настоящее время хуже, чем у вращающихся дисков, поэтому, если вы не готовы справиться с мертвой системой, в которой вы хотите использовать RAID 1 минимум. В сочетании с хорошим высокопроизводительным контроллером что-то вроде X-25E легко выдержит 6 тыс. Операций ввода-вывода в реальном мире, что эквивалентно 30 15 тыс. Накопителям SAS. Твердотельные накопители достаточно дороги на ГБ емкости, но при правильном их использовании они могут обеспечить гораздо более экономичные решения для задач, требующих интенсивного ввода-вывода.

...