В настоящее время я провожу тестирование производительности веб-приложений, которые мы переместили на AWS.
Мы заметили, что производительность виртуальных ЦП не так хороша, как мы ожидали. Фактически, на высоко загруженной машине с одним виртуальным ЦП мы обнаружили, что 50% заявленного использования ЦП (через vmstat) было зарегистрировано как кражи ЦП. Казалось, что мы получаем только половину основных циклов.
После некоторого исследования выяснилось, что в большинстве экземпляров EC2 виртуальный ЦП фактически означает, что вы получаете один из доступных гиперпотоков на одном ядре. Фактически это означает, что на каждый виртуальный ЦП можно положиться только в течение 50% циклов физического ядра.
Мы нашли несколько статей, которые, кажется, подтверждают то, что мы видим: http://www.pythian.com/blog/virtual-cpus-with-amazon-web-services/
Верно ли, что виртуальный ЦП на самом деле представляет собой только один гиперпоток в ядре, или мы неправильно интерпретируем данные? Если это правда, существуют ли какие-либо типы экземпляров, где мы действительно получили бы доступ к обоим гиперпотокам ядра?
Очевидно, мы могли бы настроить экземпляры EC2 с удвоенным количеством виртуальных ЦП, но это имеет последствия для лицензии на программное обеспечение, поскольку проприетарное программное обеспечение, которое мы запускаем, в настоящее время лицензируется по ядрам. В настоящее время поставщик программного обеспечения не делает различий между виртуальным ЦП и ядром. Мы не хотим платить вдвое больше затрат на лицензирование, потому что определения ЦП нашего поставщика инфраструктуры и поставщика программного обеспечения не совпадают.
Я получил подтверждение от Amazon, что виртуальный ЦП на самом деле представляет собой одинарный гиперпоток на одном ядре.
Кстати, это была новость для поставщика программного обеспечения, с которым мы работали (одна из крупнейших корпоративных компаний), и они были достаточно хороши, чтобы скорректировать условия лицензий для программного обеспечения, работающего в средах AWS.