Является ли 1 vCPU в Google Compute Engine половиной одного физического ядра процессора?
Страница типов машин Google гласит:
Для машин серии n1 виртуальный ЦП реализован в виде единого аппаратного гиперпотока на процессорах Intel Xeon E5 2,6 ГГц (Sandy Bridge), Intel Xeon E5 v2 2,5 МГц (Ivy Bridge) и т. Д. И т. Д.
Предполагая, что одно физическое ядро ЦП с гиперпоточностью выглядит как два логических ЦП для операционной системы, то если машина n1-standard-2, которая описывается как 2 виртуальных ЦП и 7,5 ГБ памяти, то это по существу означает 1 ядро ЦП, право?
Поэтому, если я пытаюсь следовать рекомендациям по оборудованию для экземпляра InfluxDB, который рекомендует 2 ядра ЦП, я должен стремиться к компьютеру с Google Compute Engine, который имеет 4vCPU, правильно?
6 ответов
Обычно, когда программное обеспечение сообщает вам, сколько ядер им нужно, они не принимают во внимание гиперпоточность. Помните, у AMD даже не было этого (Hyper-Threading) до совсем недавнего времени. Таким образом, 2 ядра означают 2 виртуальных ЦП. Да, одно ядро ЦП HT отображается как 2 ЦП для ОС, но НЕ вполне работает как 2 действительно независимых ядра ЦП.
Это правильно, вы должны стремиться к типу машины GCE с 4 виртуальными ЦП... Когда вы переходите из локального мира, вы привыкли к физическим ядрам с гиперпоточностью. В GCP они называются vCPU или виртуальными процессорами. ВЦП эквивалентен одному ядру с гиперпоточностью. Следовательно, если у вас локальный одноядерный гиперпотоковый ЦП, это, по сути, будет два виртуальных ЦП на одно физическое ядро. Так что всегда помните об этом, так как часто люди сразу же проводят тест. Они скажут: "У меня есть физическая машина с четырьмя ядрами, и я собираюсь запустить четыре ядра в облаке" и спросят: "Почему их производительность не такая?!!!"
Давным-давно и издалека существовала эквивалентность 1: 1 между "ЦП" (например, то, что мы видим в выводе "top"), сокетом, ядром и потоком. (И "процессор" и / или "чип" тоже, если хотите.)
Итак, многие люди привыкли использовать два или более этих термина как синонимы. В частности "CPU" и "core".
Затем разработчики процессоров начали размещать несколько ядер на одном кристалле / кристалле. Таким образом, "сокет", "процессор" или "микросхема" больше не были одноядерными, но "ЦП" по-прежнему был 1: 1 с "ядром". Так что поменять местами эти два термина все еще было нормально.
Затем разработчики ЦП начали размещать несколько "потоков" (например, гиперпотоков) в одном ядре. Операционные системы будут представлять каждый гиперпоток как "ЦП", так что больше не будет соответствия 1: 1 между "ЦП", "потоком" и "ядром".
Кроме того, разные семейства ЦП могут иметь разное количество потоков на ядро.
Но обращение к "ядрам", когда имеется в виду "процессоры", сохраняется.
если машина n1-standard-2 описывается как 2 виртуальных процессора и 7,5 ГБ памяти, то это по сути означает 1 ядро процессора, верно?
Я считаю, что да.
Итак, если я пытаюсь следовать рекомендациям по оборудованию для экземпляра InfluxDB, который рекомендует 2 ядра ЦП, то я должен стремиться к машине Google Compute Engine с 4 виртуальными ЦП, верно?
Я думаю, они означают 2 физических ядра независимо от гиперпоточности (HT), потому что производительность HT не является стабильным эталоном. Но ИМО, рекомендация также должна содержать скорость каждого физического ядра. Если программное обеспечение рекомендует 2 ядра ЦП, вам потребуется 4 виртуальных ЦП на GCP.
У меня до сих пор нет указателей на четкую документацию по типам экземпляров Google Machine, а также по количеству ядер / предлагаемых потоков.
Здесь он есть в Azure:https://docs.microsoft.com/en-us/azure/virtual-machines/acu У
AWS он есть здесь:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html#cpu-options-gen-target
PS
Я также заметил, что в GCP мы не можем определить vcpu и amt RAM, тогда как эта настраиваемая конфигурация недоступна в AWS и Azure. ( Https://cloud.google.com/compute/docs/machine-types#custom_machine_types )
Кроме того, AWS позволяет нам получить доступ к ядрам / потокам и сократить их, чтобы противостоять затратам на лицензирование (если они привязаны к числу ядер), такой возможности нет в Azure или GCP. Хотя стоимость, уплаченная в AWS, будет соответствовать определению исходного экземпляра. (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html)
https://cloud.google.com/compute/docs/cpu-platforms говорит:
В Compute Engine каждый виртуальный ЦП (vCPU) реализован как один аппаратный многопоток на одном из доступных процессоров ЦП. В процессорах Intel Xeon технология Intel Hyper-Threading поддерживает несколько потоков приложений, работающих на каждом физическом ядре процессора. Вы настраиваете свои экземпляры ВМ Compute Engine с одним или несколькими из этих многопотоков в качестве виртуальных ЦП. Конкретный размер и форма вашего экземпляра виртуальной машины определяет количество его виртуальных ЦП.