none
Влияние числа ядер, процессоров на производительность одной виртуальной машины. RRS feed

  • Общие обсуждения

  • Допустим есть у меня под Hyper-V R2 (Enterprise) несколько виртуальных серверов и некоторым из них не хватает процессорной производительности. Стоит один 4-ядерный процессор (E5530, 2.4GHz). Если я добавлю второй процессор, то производительность одной виртуальной машины повысится? Или может это только повлияет на возможное число виртуальных машин на этом сервере? А число ядер влияет на производительность одной виртуалки? (допустим, поставлю я 6-ядерник вместо 4-ядерника). Есть вообще разница между ядрами и отдельными процессорами? Или каждое ядро это вроде как отдельный CPU и важно количество этих ядер, т.е. два 4-ядерных процессора как бы равны 8 одноядерным или четырём 2-ядерным?

    А как влияет на производительность одной виртуальной машины число виртуальных процессоров? Допустим, на виртуалке у меня стоит MS SQL 2008, который умеет работать с несколькими процессорами и на данный момент в этой виртуалке 1 процессор (при одном физическом 4-ядерном). Если я сделаю 2 виртуальных процессора, то производительность SQL сервера на этой виртуалке выростет существенно (удвоится)? А если до 4-х увеличу?

    Увеличивается ли общее потребление ресурсов физического CPU с увеличением числа процессоров в виртуальной машине? Ну, допустим, был в виртуалке один CPU и он был забит на все 100%, сделал я 4 CPU в виртуалке - общая нагрузка на физический CPU хоста выросла вчетверо и другим виртуальным серверам осталось меньше ресурсов - так или нет?

    В документации есть такое: "If the physical computer has multiple processors and uses non-uniform memory architecture (NUMA), we recommend that you do not assign more processors or memory to a virtual machine than are available on a single NUMA node. For example, do not assign 4 processors to a virtual machine if each NUMA node has only two processors. For more information about the processor architecture of the physical computer, see the documentation that came with the computer." Если у меня один процессор, но 4-ядерный, то можно назначать 4 процессора виртуальной машине?

Все ответы

  • От количества процессоров и ядер на хосте зависит в первую очередь то, сколько виртуальных ядер Вы сможете получить виртуальных ядер, максимальное количество которых в ВМ на платформе Hyper-V равно 4.

    Взаимосвязь между виртуальным и физическим процессором приведены Сашей Купчинецким в данном топе, там же мной приведены линки на рекомендации по виртуализации SQL.

    Модератор
  • Если я правильно понял, то каждый процессор в виртуальной машине ставится в соответствие физическому ядру хост-машины. Overcommit (т.е. когда суммарно число всех виртуальных процессоров превышает число физических ядер) ведёт к большим тормозам и посему не рекомендуется. Иными словами если у меня всего одна виртуалка на 4-ядерной машине и в этой виртуалке всего один процессор, то вся мощность физического процессора не будет использована, будет задействовано лишь одно ядро? Если я добавлю ещё один виртуальный процессор в эту виртуальную машину или подниму ещё одну однопроцессорную виртуальную машину, то будет задействовано два ядра и т.д.?

    "With proper I/O capacity and configuration, the I/O overhead is minimal. For best performance, you should have enough physical processors to support number of virtual processors configured on the server to avoid overcommit CPU resources. The CPU overhead increases significantly when the CPU resources are overcommitted. It is important to test each application thoroughly before you deploy it to a Hyper-V environment in production."

    В принципе меня не только MS SQL интересует - это просто один из примеров. На самом деле есть ряд самых разных задач на виртуальных серверах (файл-сервер, принт-сервер, Oracle, самописные приложения), но в целом понятно. Надо ставить ещё один процессор, а лучше два 6-ядерных что бы оверкомит не наступил ).

  • Тоесть добавление второго виртуального процессора при отсутствии оверкоммита эквивалентно удваиванию числа физических ядер в невиртуальном, обычном сервере? Второй виртуальный процессор это не что-то типа Hyper-Threading, а это полноценное ядро добавляется в виртуалку (т.к. ставится в соответствие, привязывается к другому, к отдельному физическому ядру) и "мешать" по части производительности CPU другие виртуалки не будут (опять же при отсутствии оверкоммита). Если надо что бы вируталка быстрее работала, то либо более производительные ядра нужны (менять CPU хоста на более производительные), либо добавлять ещё одно ядро - только так. Я правильно понял?
  • По возможности ВМ работает с одним сокетом, если ресурсов не хватает - гипервизор начинает нарезать на потоки другие процессоры. И фактически количество виртуальных процессоров  означает то, что ВМ с большим числом процессоров имеет больший приоритет при обращении к ресурсам физических процессоров.

    Т.е. в первую очередь производительность виртуальной машины зависит от количества ее сокетов. А уже распределением ресурсов для нее занимается гипервизор в зависимости от нагрузки на физические сокеты и их количество.

    Модератор
  • Сокет? Тоесть Hyper-V различает процессор и ядра в нём? А значит и нет привязки виртуального процессора к ядру, нагрузка равномерно распределяется по ядрам одного процессора, а при нехватке ресурсов - начинает загружать второй процессор? Или всё-таки для Hyper-V один 4-ядерный процессор = 4 одноядерным? Но привязки я ядрам/сокетам всё равно нет? Т.е. если у меня 10 очень мало загруженных виртуалок, то они все могут использовать лишь один физический сокет (ядро)? Как тут быть с советом избегать оверкоммит? Он не так страшен при небольших нагрузках?

    А хост-машина как использует сокеты/ядра? Допустим на ней средства управления (а может ещё что-то) прилично загружают ресурсы CPU - будут использоваться все сокеты, все ядра? И есть ли какой-то приоритет у виртуальных машин перед приложениями хост-машины?

    Ещё такой вопрос. Допустим, есть у меня сильно загруженная виртуалка с четыремя виртуальными процессорами, в хост-машине два сокета по 4 ядра. Эта виртуалка будет использовать только 4 ядра одного сокета, а ресурсы второго я могу смело использовать для других виртуалок без вреда первой по части ресурсов CPU?

  • Привязки виртуального сокета к конкретному физическому сокету нет - ВМ и не должна об этом знать, это задача, нарезать физические ресурсы для виртуальных машин. Вы верно поняли. Ресурсов одного ядра/процессора становится недостаточно - гипервизор начинает нарезать потоки с другого ядра/процессора.

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

    Выше отвечал. Нет как таковой парковки ресурсов сокетов за определенным ядром/процессором. Все будет зависеть от конкретной нагрузки на ВМ.

     

    Модератор
  • Если нет привязки виртуального процессора к физическому ядру, то тогда как-то непонятно в этой теме: http://social.technet.microsoft.com/Forums/ru-RU/virtualizationru/thread/91ebea27-f687-40fa-b3aa-1e77d352fed7 смысл неудовлетворённости тем, что лишь 4 виртуальных процессора может быть в одной виртуальной машине. Ведь если стоит 8 физических ядер и нет привязки, а есть возможность использовать дополнительные физические ядра с увеличением нагрузки, то значит все 8 физических ядер могут быть полностью задействованы даже одной виртуалкой с 4 (или даже меньше) виртуальными процессорами? Какой тогда смысл добавления виртуального процессора, если и так при необходимости могут быть задействованы ресурсы других физических ядер? Т.е. однопроцессорная виртуалка будет примерно так же загружать физические ядра как и 2-процессорная, как и 4- процессорная? Ну и как-то не очень понятен совет не использовать оверкоммит CPU, если ВМ всё равно ничего не знает о физических процессорах (ядрах) и никак не привязывается ни к одному из ядер.
  • Смысл добавления виртуального процессора в том, что у машины с большим числом виртуальных сокетов больший приоритет при обращении к рабочим потокам, нарезанным гипервизором с логического процессора. Т.е. виртуальная машина с двумя сокетами будет получать больше процессорных ресурсов, чем односокетная, исходя из того, что два процессора обращаются к рабочим процессам чаще.

    Используйте понятие сокет лучше -)

    Модератор
  • А в чём на практике (для приложений на ВМ) разница между увеличением числа виртуальных сокетов и установкой в свойствах процессора Virtual machine reserve (percentage)? Условно говоря тормозит у меня одна из ВМ, хочу что бы побыстрее работала. И то, и другое повышать? А если учесть, что может возникнуть CPU overcommit? А если у меня всего одна ВМ на хост-машине, то есть ли смысл в увеличении числа виртуальных сокетов и повышении указанных процентов? (кластер многонодовый и в какой-то момент не на долго может стать несколько ВМ на хосте).
  • В случае одной ВМ на производительность повлияет добавление виртуальных сокетов, т.к. при их росте будет возрастать обращение к гипервизору за ресурсами логических сокетов.

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

    Модератор
  • Ресурсов одного ядра/процессора становится недостаточно - гипервизор начинает нарезать потоки с другого ядра/процессора.

     

    Читаем на ссылке http://technet.microsoft.com/en-us/library/cc768535%28BTS.10%29.aspx следующее:

    "Furthermore, virtual machines cannot exceed the processor utilization of the configured number of logical processors, for example if a single virtual machine is configured to run with 2 logical processors on a physical computer with 8 processors/cores, then the virtual machine cannot exceed the processor capacity of the number of configured logical processors (in this case 2 processors). "

    Правильно ли я понимаю, что если у меня в виртуальной машине сконфигурирован один виртуальный процессор, то он может использовать только одно физическое ядро и не более того (хоть привязки к конкретному ядру нет), если я использую 2 виртуальных процессора, то они будут использовать строго два физических ядра? Т.е. все ядра задействовать ни по умолчанию, ни каким-то конфигурированием нельзя?

    4 января 2011 г. 15:04
  • Ресурсов одного ядра/процессора становится недостаточно - гипервизор начинает нарезать потоки с другого ядра/процессора.

    Т.е. сначала гипервизор Hyper-V созадёт один поток на одном ядре, а в какой-то момент (в какой?) создаёт ещё один поток - распараллеливает виртуальную машину на два ядра, если понадобится, то создаёт третий поток и т.д.? Где-то в официальной документации можно об этом почитать, можно ссылку на это?
    5 января 2011 г. 23:17
  • Каждый виртуальный процессор жестко маппируется на определенное физическое ядро реального процессора - этот процесс не конфигурируется и не управляется администратором хоста виртуализации.

    При возникновении количества vCPU, большего, чем количество ядер на процессора - гипервизор начинает использовать использовать ресурсы другого процессора. В какой-то момент вполне может наступить оверкомитмент, когда vCPU будет получать часть процессорного времени, а не маппироваться к определенному ядру.

    11 января 2011 г. 1:34
    Модератор
  • Каждый виртуальный процессор жестко маппируется на определенное физическое ядро реального процессора

    Маппируется всегда только на физическое ядро или может так получиться, что смаппируется на Hyper-Threading? Отключать Hyper-Threading не нужно на хост-машинах, особенно если нет процессорного оверкоммита, число vCPU не превышает число физических ядер?
    9 декабря 2011 г. 5:17
  • Скорее всего да.

    Hyper-Threading можно и не отключать, Hyper-V R2 умеет работать с этим функционалом, особенно на новых процессорах (а о "старых" мы речь не ведет, т.к. большинство не поддерживает HAV).

    Но, на мой взгляд, в такой ситуации включение HT хорошо лишь для сценариев VDI.

    9 декабря 2011 г. 5:42
    Модератор
  • Т.е. в общем случае, когда под Hyper-V R2 работают лишь серверы и суммарно число их vCPU не превышает число физических ядер, Hyper-Threading лучше отключать, т.к. производительность будет повыше? А если число виртуальных процессоров становится больше числа физических ядер, то лучше включить Hyper-Threading? Есть в документации какие-то рекомендации по этому вопросу?

    P.S. CPU у меня Intel Xeon X5670 - на сегодняшний день достаточно свежие.

    9 декабря 2011 г. 8:16
  • Скажем так, производительность не будет хуже -) В случае превышения числа виртуальных процессоров над физическими HT лучше включить. Рекомендации по задействованию данной опции лучше уточнять в документации вендора оборудования.

    9 декабря 2011 г. 8:21
    Модератор