Управление числом vCPU и ядер в виртуальной машине
10.02.2020
itpro
Hyper-V, KVM, VMware, Windows 10, Виртуализация
комментария 2
При создании виртуальных машин на различных гипервизорах (VMWare, KVM, Hyper-V и т.д.) вы можете обратить внимание, что иногда виртуальная машина может не видеть все выделенные ей виртуальные ядра (vCPU). В нашем случае виртуальной машине на KVM были выделены 8 vCPU, на нее установлена Windows 10. Однако Windows определяла эти ядра как отдельные процессоры, из которых можно использовать только 2 vCPU.
Виртуальная машина Windows 10 не видит все ядра
Если открыть диспетчер устройств Windows, можно убедится, что все выделенные ядра видны в качестве 8 отдельных виртуальных процессоров типа QEMU Virtual CPU version 2,5.
При этом в свойствах Windows 10 (Computer -> Properties) и в Task Manage видно, что на компьютере доступны только 2 процессора QEMU Virtual CPU.
То есть сколько бы вы не добавили виртуальных ядер, Windows 10 все равно сможет использовать только два. При этом соседний виртуальный сервер с Window Server 2016 на этом же гипервизоре видит все 16 выделенных ему vCPU.
Количество поддерживаемых процессоров в Windows 10
Проблема заключается в том, что в десктопных редакциях Windows (Windows 10/8.1/7) есть ограничение на максимальное количество физических процессоров (сокетов), которое компьютер может использовать:
- Windows 10 Home – 1 CPU
- Windows 10 Professional – 2 CPU
- Windows 10 Workstation – до 4 CPU
- Windows Server 2016 – до 64 CPU
Однако это ограничение не распространяется на ядра. Т.е. для повышения производительности вы можете использовать процессор с большим количеством ядер. Большинство гипервизоров умеют предоставлять vCPU в виде процессоров, процессорных ядер или даже потоков. Т.е. вместо 8 виртуальных CPU вы можете предоставить vCPU в виде 2 сокетов по 4 ядра в каждом. Рассмотрим, как в различных системах виртуализации выделить виртуальные процессоры в виде ядер и как это связать с архитектурой NUMA, использующейся в современных процессорах.
Управление виртуальными ядрами и vCPU в KVM
В моей виртуальной машине KVM c Windows 10, все назначенные виртуальные ядра считаются отдельными процессорами.
Чтобы использовать все ресурсы CPU, выделенные виртуальной машине нужно, чтобы виртуальная машина видела не 8 процессоров, а один 8-ядерный процессор, 2 процессора по 4 ядра или 1 процессор с 4 ядрами по 2 потока. Попробуем изменить способ назначения виртуальных ядер для ВМ на KVM.
Выключите виртуальную машину:
# virsh shutdown server.vpn.ru – где server.vpn.ru это имя виртуальной машины.
Выведите текущую XML конфигурацию виртуальной машины KVM:
# virsh dumpxml server.vpn.ru
Нам интересен блок с описанием процессоров:
Как видим, у нас указано просто 8 vCPU. Изменим конфигурацию:
# virsh edit server.vpn.ru
И после </features> добавим:
- host-passthrough — режим эмуляции при котором на виртуальной машине будет показан физический процессор узла кластера (ноды).
- sockets=’1′ — указываем что процессор 1
- cores=’4′ — указываем, что процессор имеет 4 ядра
- threads=’2′ — указываем, что ядра у нас по 2 потока
Сохраните конфигурационный файл и запустите ВМ. Авторизуйтесь в гостевой ВМ с Windows 10 и в Task Manager или Resource Monitor проверьте, что ОС видит все выделенные виртуальные ядра.
Также в свойства системы теперь стал отображаться физический процессор хоста Intel(R) Xeon(R) Silver 4114 CPU, а не виртуальный.
Так нам удалось решить проблему с нагрузкой на ВМ, так как двух ядер не хватало для полноценной работы приложений.
Настройка виртуальных процессоров и количества ядер в VMWare
Вы можете изменить способ презентации vCPU для виртуальной машины VMWare из интерфейса vSphere Client.
- Выключите ВМ и откройте ее настройки;
- Разверните секцию CPU;
- Изменим конфигурацию ВМ так, чтобы гостевая ОС видела 2 процессора по 4 ядра. Измените значение Cores per Socket на 4. Это означает, что гостевая ОС будет видеть два четырех –ядерных процессора (2 сокета по 4 ядра);
- Сохраните изменения и запустите ВМ.
Архитектура NUMA и виртуальные vCPU
Есть еще несколько аспектов назначения vCPU и ядер виртуальным машинам, которые нужно понимать.
При назначении ядер на сокете учитывайте наличие NUMA архитектуры (используется в большинстве современных CPU). Не рекомендуется назначать вашей ВМ количество ядер на сокет (и общее количество vCPU) больше, чем доступно ядер на вашем физическом сокете/процессоре (ноде NUMA). При размещении на одной физической ноде NUMA, виртуальная машина сможет использовать быструю локальную RAM, доступную на конкретной ноде NUMA. Иначе для выполнения операции процессам придется ждать ответа от другой ноды NUMA (что несколько более долго).
Если вы назначаете для ВМ два отдельных виртуальных сокета, то гипервизор может их запускать на разных нодах NUMA. Что не лучшим образом скажется на производительности ВМ.
Если количество требуемых vCPU превышает количество ядер на 1 физическом сокете (ноде NUMA), нужно создать несколько виртуальных сокетов (процессоров) с необходимым количество ядер. Также не желательно использовать нечетное количество процессоров (лучше добавить 1 vCPU)
Это позволит сохранить производительность виртуальной машины.
Например, для 2 процессорного хоста с 10 ядрами (суммарно доступно 40 vCPU с учетом Hyper—Threading), при настройке vCPU для ВМ оптимально использовать такие конфигурации:
Требуемое количество vCPU | Количество виртуальных сокетов в настройках ВМ | Количество ядер на виртуальном процессоре в настройках ВМ |
1 | 1 | 1 |
…… | ||
10 | 1 | 10 |
11 | Не оптимально | |
12 | 2 | 6 |
…… | ||
20 | 2 | 10 |
Например, ВМ с Microsoft SQL Server 2016 Enterprise Edition 16 vCPU в конфигурации 8 сокетов по 2 ядра будет работать хуже, чем в конфигурации 2 сокета по 8 ядер.
Также не забывайте, что некоторые приложения лицензируются по физическим сокетам (так было в старых версиях SQL Server). Иногда вам просто выгоднее лицензировать один многоядерный процессор, чем несколько процессоров с меньшим количеством ядер.
Выбираем IaaS: что такое vCPU, и сколько ядер вам нужно
От виртуальных процессоров во многом зависит производительность облачной инфраструктуры. Что такое vCPU, как рассчитать количество процессоров под конкретный проект, и в чем отличие от физических CPUs — рассказал Сергей Афанасьев, тимлид команды Compute в Selectel.
Что такое vCPU и какова его производительность
vCPU — это виртуальный процессор, который «отрезает» гипервизор от физического CPU при создании виртуальных машин (ВМ). vCPU содержит минимум одно ядро.
От количества ядер виртуального процессора зависит количество потоков, которыми может оперировать приложение, а следовательно — его возможности.
Гипервизор наряду с другими ресурсами может нарезать vCPU и отдавать его виртуальным машинам. Основная задача — правильно распределить время физических CPU между vCPU.
Чтобы собралась полная картина, сейчас необходимо ввести еще пару терминов.
Начнем с определения ядер. Ядра — это самостоятельные вычислительные блоки в архитектуре процессоров. Основная проблема ядер в том, что они выполняют команды последовательно. Если нагрузить одно ядро несколькими последовательностями задач, оно будет переключаться между ними по завершению каждой, что негативно повлияет на скорость работы системы.
Еще важно знать про потоки обработки. Этим термином называют выделенную область внутри физического ядра процессора. Ресурсы ядра разделяются по потокам. Это позволяет обрабатывать параллельно несколько последовательностей команд.
На уровне операционной системы каждый поток воспринимается как отдельный вычислительный центр, поэтому такая модель использования ресурсов ядра обладает большей скоростью вычислений.
Сам факт такого деления возможен, потому что даже самые интенсивные задачи не используют 100% ЦП все время. По этой причине vCPU иногда рассматривают не как отдельный процессор, а как часть времени, проведенного в ядре процессора.
Сколько vCPU выбрать в зависимости от проекта
Оценить производительность vCPU можно на примере параметра CPU Usage. Он как раз показывает процент использования CPU за заданный период времени. Если ядра виртуальной машины стабильно нагружаются до 80% и выше, то такие показатели говорят о том, что она близка или находится на пике своей нагрузки. В таком случае можно посоветовать увеличить количество vCPU или же мигрировать ВМ на сервер с более производительными процессорами. Второй путь сложнее, поскольку не каждый провайдер может предоставить подходящую конфигурацию.
Важно понимать, что ядра виртуальной машины не должны нагружаться до своего пика, всегда должен быть запас (в 40-50%). В противном случае виртуальная машина может не справиться с поступающей на нее нагрузкой, которая может внезапно резко возрасти.
Для расчета правильного количества vCPU для проекта нет единой формулы — это число обычно выявляется эмпирическим путем. Для этого нужно знать характер задач приложения.
Например, в случае с интернет-магазином нагрузка прямо пропорциональна количеству активных пользователей: чем их больше, тем выше нагрузка. Вряд ли на старте в один момент у него окажется 10000 пользователей, которые обеспечат высокую нагрузку. Поэтому вкладываться заранее в ресурсы неэффективно. Масштабироваться следует постепенно, в зависимости от фактической нагрузки на сайт или приложение. Важно, чтобы со стороны провайдера этот процесс был выстроен максимально комфортно: панель управления интуитивно понятна, поддержка работает 24/7.
Можно подключить системы мониторинга для отслеживания показателей виртуальной машины, нагрузки в частности. Такой подход поможет оперативно реагировать на резко возрастающую нагрузку и не дать « захлебнуться » приложению от нее. В период маркетинговых активностей и праздников присматривать за системой следует плотнее.
Стоит также обратить внимание на параметр CPU Steal Time. Он показывает время, в течение которого виртуальная машина должна была получать ресурсы от хостовой ОС, но что-то пошло не так, и по итогу они не были получены. А значит и вычисления ВМ также не были выполнены. Нормой для этого параметра считаются значения не более 5-10%.
Причин возникновения steal может быть несколько: одна из них — высокая загруженность хоста виртуализации. Это может быть спровоцировано системными задачами хоста или же большим количеством других виртуальных машин, которые тоже его нагружают. В таком случае увеличение количества vCPU никак не поможет в решении этой проблемы, от этого ВМ никак не станет производительнее.
В большинстве случаев это решается на стороне облачного провайдера, например, изменением значения параметра переподписки (vCPU:pCPU) или же уменьшением количества виртуальных машин на этом хосте. Обычно облачные провайдеры следят за этим и стараются не допускать превышения допустимого порога значений.
Можно ли управлять количеством и производительностью vCPU в виртуальной машине
На начальном этапе даже базовая конфигурация ВМ может быть избыточна, а платить за неиспользуемые ресурсы — сомнительное удовольствие. В этих случаях отлично работает нарезка ядер на доли для рабочих ВМ.
Часть настроек, связанных с ресурсами ВМ, находится на стороне провайдера, поэтому изменить их можно только по запросу. Впрочем, обычно это не занимает много времени.
С облачными серверами Shared Line ситуация намного проще. В этой линейке можно выбрать любую производительность ядра: 10%, 20% или 50% в зависимости от задач и не платить за остальное. Если остальные ресурсы ядра доступны, то производительность увеличивается вплоть до 100% без каких-либо доплат. Этого вполне хватает для поддержки dev-сред, хостинга простых сайтов, чат-ботов/Telegram-ботов или квизов.
Если оставшуюся часть сервера никто в этот момент не использует — производительность может доходить до 100%.
Главное, что следует учитывать при распределении vCPU — историю наблюдений и фактор сезонности, а также маркетинговые активности (например, можно зарезервировать ресурсы перед началом распродажи).
Возможно, в какие-то месяцы количество пользователей резко увеличивается, поэтому следует предоставить им должный уровень сервиса и выделить достаточно ресурсов.
Что такое «vCPU» и какова его производительность? – CloudSavvy IT
archy13 / Shutterstock
Поставщики облачных серверов часто будут рекламировать свои экземпляры как имеющие определенное количество виртуальных процессоров, сокращенно от виртуального ЦП. Какую производительность вы можете ожидать от этого по сравнению с обычным процессором?
Разница между ядрами и нитями
Важно понимать разницу между потоком обработки и ядром процессора. Процессоры будут иметь установленное количество ядер, которые обрабатывают выполнение программ. Но даже очень интенсивные задачи не используют 100% ЦП все время; Программы часто должны ожидать чтения памяти из кэша L3, ОЗУ и дисков и часто засыпают, ожидая поступления данных. В течение этого времени ядро ЦП неактивно.
Решение этой проблемы называется «гиперпоточность» или «одновременная многопоточность». Вместо того, чтобы запускать один набор задач за один раз, ЦП может обрабатывать несколько потоков. В настоящее время почти каждый высокопроизводительный процессор от Intel или AMD поддерживает два потока на ядро.
В зависимости от приложения, гиперпоточность может дать теоретическое ускорение на 100%, если оба потока ожидают чтения памяти и не конфликтуют друг с другом. В большинстве случаев гиперпоточность дает увеличение скорости примерно на 30% по сравнению с отсутствием гиперпоточности. Однако в некоторых случаях, когда два потока закреплены на 100% и работают на одном и том же ядре, это может вызвать замедление, поскольку они сражаются за ресурсы ЦП.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Что делает vCPU?
vCPU примерно сопоставимы с одним потоком обработки, но это не совсем справедливое сравнение.
Скажем, вы арендуете c5.large экземпляр от AWS с 2 виртуальными ЦП. Ваше приложение будет работать вместе со многими другими на одном большом сервере. Вы можете арендовать весь сервер с AWS Bare Metal экземпляр, который дает вам прямой доступ к процессору. Если вы арендуете что-то меньшее, чем это, ваш доступ управляется через AWS Nitro,
Nitro – это гипервизор, который управляет созданием и управлением виртуальными машинами, работающими на самом сервере. Вот почему вы арендуете «Виртуальный сервер», а не место в стойке в центре обработки данных. Нитро – это то, что делает тик EC2 он частично питается от выделенного оборудования, поэтому замедление работы в виртуализированной среде должно быть минимальным.
Nitro решает, каким потокам назначать виртуальную машину, исходя из того, сколько вычислительной мощности необходимо, так же, как это делает планировщик задач в обычной среде рабочего стола. В случае двух виртуальных ЦП наихудший случай – приложение работает на одном ядре и получает два потока этого ядра. Если вы действительно максимально используете свой экземпляр, ваши потоки могут конфликтовать и вызывать небольшие замедления. Трудно сказать точно, как работает гипервизор AWS, но, вероятно, можно с уверенностью предположить, что этот сценарий в значительной степени смягчен благодаря хорошему управлению потоками со стороны Nitro.
Таким образом, в целом, вы можете ожидать производительность, сопоставимую с нормальным потоком процессора, если не чуть лучше. В любом случае это различие не имеет большого значения, поскольку большинство экземпляров EC2 будут иметь кратные 2 виртуальных ЦП. Просто помните, что экземпляр 4 vCPU – это не 4-ядерный сервер – он действительно эмулирует 2-ядерный сервер, на котором выполняется 4 потока обработки.
Скорость обработки vCPU будет больше зависеть от реального оборудования, на котором он работает. Большинство серверных процессоров будут Intel Xeons, поскольку они составляют большую часть рынка. Серверы нижнего уровня могут работать на более старом оборудовании, которое немного устарело по современным стандартам. В экземплярах AWS T3a используются процессоры AMD EPYC с большим количеством ядер, они работают немного медленнее, но стоят дешевле из-за того, что аппаратное обеспечение значительно дешевле на ядро.
Бустабильные экземпляры
Экземпляры AWS T2 и T3 являются «пакетными», которые больше подходят для приложений, которые не должны работать на 100% все время.
Например, t3.micro Экземпляр имеет 2 виртуальных ЦП, но его базовая скорость составляет 10% от нормального виртуального ЦП. На самом деле, t3.micro на самом деле имеет только 0,2 vCPU, что на самом деле, как Google Cloud Platform рекламирует их f1-micro экземпляры,
Но t3.micro в целом не на 90% медленнее; он может превышать базовую скорость в течение коротких периодов времени, очень похоже на то, как работает турбо частота на обычном компьютере. За исключением того, что ограничивающим фактором здесь являются не термики, а то, сколько вы готовы заплатить.
За каждый час работы экземпляра ниже базовой скорости вы накапливаете кредиты ЦП, которые используются для взрыва экземпляра за одну минуту. t3.micro В частности, экземпляр накапливает 6 кредитов ЦП в час, что он работает ниже базовой скорости. Но когда требуется вычислительная мощность, кредиты ЦП расходуются на работу, превышающую базовую скорость.
Это хорошо подходит для приложений на основе микросервисов, которые должны отвечать на запросы, когда они происходят, но остаются бездействующими, пока следующий пользователь не запросит что-либо. Службы, которые должны постоянно обрабатывать цифры, лучше подходят для традиционных серверов.
Это позволяет AWS запускать больше экземпляров T2 на сервер, чем сервер обычно способен, что помогает снизить затраты. Например, каждая стойка в их центре данных может содержать 48-ядерную систему с 96 потоками обработки. Это можно использовать для экземпляров C5 на 96 виртуальных ЦП, но экземпляры T2 могут совместно использовать ядра и работать на скорости менее 20% базовой скорости ядра, поэтому AWS может запускать большее количество из них на одном сервере.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Чем простой процессор отличается от Виртуального vCPU и что такое потоки Ядра?
Добрый день, друзья. В чем разница между процессорами? Я имею в виду не amd и intel, а процессоры CPUs и vCPUs. Также мы рассмотрим разницу между потоками и ядрами. Центральные процессоры (CPU) — это мозг наших компьютеров. Они обрабатывают все, что мы делаем ежедневно, от открытия приложения до просмотра фильма. Но что такое процессор? Как это работает? И в чем разница между обычными процессорами и все более популярными процессорами VCPU?
Что такое мозг компьютера?
Согласно полному руководству по истории, опубликованному G2, первые электронные компьютеры были созданы в начале 1900-х годов. Однако эти компьютеры были большими и дорогими, и ими могли пользоваться только подготовленные математики и ученые.
Чарльзу Бэббиджу приписывают изобретение первой вычислительной машины, Difference Engine (Разностный движок), которую можно было запрограммировать для выполнения любых вычислений, которые можно было выполнить вручную. Однако, по данным Музея компьютерной истории, проект Difference Engine так и не был завершен из-за нехватки финансирования.
В 1937 году Бэббидж впервые упомянул Аналитическую машину, которая станет первым в мире механическим компьютером общего назначения. “Аналитический движок включил в себя все элементы современного компьютера: арифметико-логический блок, поток управления в форме условного ветвления и циклов, а также встроенную память”, — отмечает Electronics Notes.
Ключевым компонентом современного компьютера является центральный процессор (CPU) или Central Processing Unit. Центральный процессор отвечает за выполнение инструкций, данных ему программным обеспечением, таким как операционная система или приложение. С точки зрения непрофессионала, вы можете думать о процессоре как о мозге вашего компьютера. Центральный процессор состоит из двух основных частей: блока управления и арифметико-логического блока (ALU).
Блок управления отвечает за извлечение инструкций из памяти, их декодирование и последующую отправку в арифметико-логическое устройство для выполнения. ALU выполняет арифметические и логические операции с данными, хранящимися в регистрах, которые являются внутренними блоками памяти внутри центрального процессора.
Современные процессоры также содержат кэш, который представляет собой небольшой объем высокоскоростной памяти, в которой хранятся часто используемые инструкции и данные. Кэши делятся на уровни: кэш уровня 1 (L1) встроен в сам процессор, кэш уровня 2 (L2) находится на отдельном чипе рядом с процессором, а кэш уровня 3 (L3) находится дальше от процессора на собственном чипе или даже на собственной печатной плате.
Процессор против vCPU
С развитием облачных сервисов появилось виртуальное центральное процессорное устройство, или сокращенно vCPU. TechTarget определяет vCPU как “физический центральный процессор (CPU), который назначен виртуальной машине (VM)”.
Виртуальные машины — это, по сути, автономные операционные системы, которые работают внутри другой операционной системы, как если бы они были приложениями. Виртуальные машины используются для различных целей, таких как тестирование нового программного обеспечения в безопасной среде, запуск нескольких операционных систем (например, Windows и Linux) на одном компьютере или объединение нескольких физических серверов в один сервер для экономии места и снижения затрат.
Итак, vCPU — это программная реализация процессора; он физически не существует внутри вашего компьютера, как реальный процессор. Гипервизор, который представляет собой программное обеспечение, которое создает виртуальные машины и управляет ими, назначает VCPU виртуальной машине. Каждый vCPU рассматривается операционной системой внутри виртуальной машины как реальное ядро процессора.
Однако, поскольку процессоры VCPU основаны на программном обеспечении, они не так эффективны, как настоящие процессоры. Поэтому важно указать, сколько ядер имеет ваш процессор, когда вы покупаете компьютер (например, «четырехъядерный» означает четыре ядра). То же правило применяется при выборе виртуального частного сервера (VPS) или плана хостинга выделенного сервера.
Основное различие между физическими процессорами и процессорами VCPU заключается в том, что обычные процессоры основаны на оборудовании, а процессоры VCPU основаны на программном обеспечении. Это означает, что процессоры CPU физически существуют внутри вашего компьютера, а процессоры VCPU — нет; вместо этого они создаются гипервизорами, когда это необходимо. Из-за этой разницы в реализации процессоры CPU намного эффективнее, чем процессоры VCPU; у них нет накладных расходов, связанных с запуском в программном обеспечении.
С начала 2000-х годов процессоры VCPU становятся все более популярными, поскольку их дешевле и проще назначать, чем физические процессоры; однако, если вы ищете производительность, лучше всего использовать компьютер с несколькими ядрами процессора, поскольку каждое ядро может обрабатывать инструкции независимо.
Ядра против Потоков
Центральный процессор может иметь одно или несколько ядер, которые являются процессором, выполняющим задачи в указанное время. Ядро будет поддерживать порядок выполнения задач, регистры и кэш (если применимо) и выполнять операции через ALU. Центральный процессор управляет ядрами. Ядро выполняет каждый программный процесс или поток, который запланирован операционной системой. Поток — это независимая последовательность инструкций, которая может обрабатываться процессором.
Несколько потоков могут существовать в одном процессе и использовать одно и то же пространство памяти. Это позволяет им легче взаимодействовать друг с другом, чем если бы они выполнялись в рамках отдельных процессов. Потоки часто используются для повышения производительности многопоточных приложений, позволяя различным частям программы выполняться одновременно на разных ядрах или процессорах.
Термин «поток» использовался в вычислительной терминологии в течение многих лет, однако только в начале 2000-х годов в процессорах была введена аппаратная поддержка потоков. Это позволило выполнять несколько потоков одновременно на отдельных ядрах. Ранее одновременно на одном ядре мог выполняться только один поток, независимо от того, сколько ядер присутствовало в процессоре. Многоядерные процессоры в настоящее время являются обычным явлением, и большинство операционных систем обеспечивают некоторый уровень поддержки для запуска программ в виде нескольких потоков.
Разница между процессорами — итог
Подводя итог, можно сказать, что процессоры — это аппаратный мозг наших компьютеров, в то время как их виртуальный аналог, VCPU, основан на программном обеспечении и создается гипервизорами для работы на виртуальных машинах. Ядра — это аппаратные процессорные блоки в ЦП, в то время как потоки — это программные инструкции, которые могут обрабатываться ЦП.
Потоки могут выполняться одновременно на отдельных ядрах, что позволяет запускать разные части программы одновременно. Это может повысить производительность оборудования, поскольку несколько задач могут обрабатываться одновременно, а не последовательно.
Теперь, когда вы понимаете разницу между процессорами CPU, процессорами VCPU, ядрами и потоками, вы можете принять обоснованное решение при выборе компьютера или сервера. Если вы ищете производительность, лучше всего выбрать компьютер с несколькими процессорными ядрами, поскольку каждое ядро может обрабатывать инструкции независимо. Однако, если вы ищете экономичное решение, VCPU могут быть подходящим вариантом. Успехов!