Если вы много знаете о компьютерах, или даже если не знаете, скорее всего, вы слышали термин ЦП. ЦП, что означает Центральный процессор, является неотъемлемой частью каждой системы от вашего домашнего ноутбука до серверов, на которых размещен веб-сайт вашей компании. Но что такое ЦП, и какую роль он играет в инфраструктуре вашей системы? Ядра и vCPU — это одно и то же? А как насчет многопоточности?
В этом анализе мы рассмотрим функции ЦП, обсудим роли и различия между физическими и логическими ядрами, а также выясним, почему виртуальный ЦП, обещанный основными поставщиками облачных услуг, не так уж и хорош, как его представляют.
Ищете что-то конкретное? Используйте оглавление ниже, чтобы перейти к определенному разделу, или продолжайте читать, чтобы узнать больше!
Что такое ЦП?
Центральный процессор, или процессор, — это мозг вашего компьютера. Он отвечает за интерпретацию инструкций, делегирование задач и выполнение вычислений. Когда вы говорите компьютеру что-то сделать, например, загрузить видео, инструкции, которые вы передаете через мышь и клавиатуру, интерпретируются через ЦП и делегируются. В ранних компьютерах ЦП сам выполнял выполнение этих задач. Однако в современном оборудовании другие компоненты, такие как графический процессор, сами обрабатывают определенные действия. Таким образом, современные ЦП стали играть более контролирующую роль, обрабатывая меньше вычислений напрямую, но все еще контролируя выполнение задач.
До появления смартфонов и планшетов этот процесс связи между вами и центральным процессором вашей системы обрабатывался с помощью ряда наборов микросхем. Наборы микросхем представляют собой интегральные схемы, которые соединяют центральный процессор вашего компьютера с оперативной памятью, хранилищем и любыми внешними устройствами, такими как клавиатура. Однако теперь, поскольку технологии продолжают сокращаться, для того чтобы способствовать созданию более компактных и эффективных центральных процессоров, решения SOC (системы на чипах) практически заменили наборы микросхем. Как однокристальное решение, содержащее центральный процессор, графический процессор, память и многое другое, SOC предлагает более быструю и экономящую место альтернативу старым многокристальным решениям. Благодаря объединению всех этих аппаратных и программных компонентов на одном чипе конечным результатом является процессор, который работает быстрее и надежнее.
Однако в ближайшие годы, с постоянным ростом крупных гипермасштабных центров обработки данных, функциональность ЦП вскоре еще больше сократится. Для управления разрастающейся инфраструктурой этих огромных объектов и сотнями ЦП, которые объединяются для их создания, DPU (Data Processing Unit) вскоре превзойдет ЦП как настоящий «процессор» в большинстве крупных систем. Однако для вычислений общего назначения ЦП остается основным средством обработки инструкций, по крайней мере, на данный момент.
Центральный процессор является неотъемлемой частью каждой системы, от домашнего ноутбука до серверов, на которых размещен веб-сайт вашей компании.
Подумайте об этом так: вы, пользователь, являетесь генеральным директором компании. Ваш ЦП — это ваша команда среднего звена. Когда что-то нужно сделать, вы не делаете этого сами, это не работа генерального директора. Вы принимаете решения и даете указания. Вы определяете, что должно произойти, а ваши менеджеры разбираются в деталях. Они обсчитывают цифры и определяют, какие отделы (другие компоненты вашего компьютера) должны что-то делать, чтобы проект был выполнен наиболее эффективно и результативно. Они также не делают все сами, но они все еще контролируют различные части, перемещающиеся по вашим разным отделам. Это то, что делает ваш ЦП. Он заставляет вещи происходить. Только намного, намного быстрее, чем сейчас.
На техническом уровне причина, по которой ваш компьютер может обрабатывать так много сложных функций так быстро и одновременно, заключается в способе построения ЦП. По своей сути ЦП — это чип, установленный в гнездо на материнской плате вашей системы, которое заполнено миллиардами крошечных транзисторов. Эти транзисторы работают как выключатели света, включаясь и выключаясь в ответ на 1 и 0 входящего двоичного кода. На самом простом уровне это то, что позволяет вашему компьютеру делать все, что он делает.
Причина, по которой эти чипы становятся все быстрее и быстрее, заключается в том, что по мере совершенствования наших технологий наши транзисторы становятся все меньше и меньше. Это означает, что в один чип помещается больше, а вычислительная мощность повышается.
Итак, если процессор — это чип, полный крошечных транзисторов, то что же тогда такое ядро?
Что такое ядро?
Когда были разработаны самые первые процессоры, они все были одноядерными. Один чип в одном сокете, установленный на материнской плате. Однако, как упоминалось выше, технология обработки данных продолжает сокращаться. Это означает, что мы можем вместить больше в один чип. Это также означает, что мы можем вместить несколько процессоров в один сокет. Вот где мы подходим к определению ядра.
Физическое ядро — это ЦП, размещенный на чипе и занимающий один сокет. Если у вас четырехъядерный процессор, у вас есть 4 ЦП на одном чипе. Если у вас восьмиядерный, у вас их 8. Другими словами, для каждого ядра, которым обладает ваша система, это как иметь еще один мозг для обработки команд.
Итак, каждое ядро вашего компьютера может обрабатывать отдельную задачу одновременно. Чем больше процессов может быть выполнено одновременно, тем выше общая скорость выполнения. Конечно, ядра — не единственный фактор, влияющий на скорость вашей системы, но для машин, на которых выполняются ресурсоемкие процессы, такие как ИИ, большее количество ядер может иметь большое значение.
Каждое ядро вашего компьютера может одновременно обрабатывать отдельную задачу.
Дело в том, что не все ядра одинаковы. Поскольку технология, используемая в наших процессорах, становится более мощной, ее различия также становятся более тонкими. Вот где определение истинной вычислительной мощности вашей системы может начать становиться немного сложным.
Потоки? Виртуальные ядра? Это все семантика или есть различия, о которых следует знать?
Давайте посмотрим.
Физические ядра против логических ядер
Чтобы понять разницу между различными типами и компонентами ЦП, вы должны сначала понять разницу между физическими ядрами и логическими ядрами. Физическое ядро, или физический ЦП, является фактическим аппаратным компонентом микросхемы ЦП и является тем же самым, что и те ядра, которые обсуждались выше. Четырехъядерный процессор вашего домашнего ПК имеет 4 физических ядра. Каждое ядро является эквивалентом своего собственного ЦП, но вместо того, чтобы иметь 4 отдельных чипа, установленных в 4 отдельных сокета, ядра позволяют вам хранить их все на одном чипе. Это ядра, которые определяют истинные возможности вашей системы, устанавливая, сколько ресурсов доступно для выделения на обработку инструкций.
И затем, есть логические ядра. Логическое ядро, также известное как логический ЦП или виртуальное ядро, — это концепция, используемая для описания того, как операционные системы видят процессоры, использующие одновременную многопоточность (SMT). Многопоточность, или более популярное название Hyperthreading (это особый термин Intel для их технологии одновременной многопоточности), — это процесс, с помощью которого суперскалярные ЦП могут разделять наборы инструкций, известные как потоки, позволяя нескольким процессам выполняться в одном цикле.
Если ЦП имеет двухсторонний SMT, это означает, что каждое ядро может выполнять два потока одновременно. Четырехъядерный суперскалярный ЦП с двухсторонним SMT называется ЦП с 4 ядрами/8 потоками. Поскольку эта потоковая обработка позволяет системе обрабатывать до восьми задач одновременно, ОС машины рассматривает систему как имеющую 8 логических ядер. Таким образом, термин логическое ядро в основном является средством концептуализации этого взаимодействия между аппаратными средствами вашей системы при обработке инструкций с использованием многопоточности.
Но действительно ли логическое ядро — это то же самое, что физическое ядро или ЦП?
Что такое одновременная многопоточность?
Давайте вернемся к нашему примеру среднего менеджмента. Вы, генеральный директор, передаете задачу своей команде менеджеров, которые разделяют и властвуют, решая проблему максимально эффективно. Одна из этих задач требует, чтобы ваши рабочие на фабрике быстро собрали серию из двух разных механических деталей в большом объеме. У вас есть только одна производственная линия и только определенное количество сотрудников. При ограниченных доступных вам ресурсах задача может быть выполнена только определенное время. В конце концов, ваше ядро может обрабатывать только определенное количество одновременно.
Но предположим, что вы повышаете второго руководителя в этом отделе. У вас по-прежнему то же количество сотрудников, т. е. системных ресурсов, однако теперь ваш отдел разделен на две команды с двумя руководителями, каждый из которых выполняет отдельную задачу. Эти задачи представляют ваши потоки.
Прошивая сердечник, вы делаете его более эффективным.
В немногопоточном процессоре эти задачи пришлось бы выполнять последовательно, начиная каждую задачу только после полного завершения предыдущей.
Однако с многопоточностью ваша машина может обрабатывать несколько задач одновременно. Они не работают на самом деле одновременно, скорее они завершаются в одном и том же цикле, работая в соответствии с графиками друг друга, чтобы завершить все задачи как можно быстрее.
Итак, как же выглядит это различие?
Ваши две производственные команды используют одну и ту же линию для достижения двух разных целей. Поскольку производственная линия — это физический объект, она не может быть слишком большой и может использоваться только определенным количеством людей одновременно. Однако фактические компоненты, используемые каждой командой, части целого, не полностью совпадают.
Допустим, что в рамках задачи Team 1 им приходится ждать компонент, который поставляется другим отделом. Это создает простои, когда производственная линия не используется, поскольку Team 1 не может двигаться вперед без детали, которую они ждут. В не многопоточной среде эта задержка в Task 1 приведет также к задержке Task 2. Вашим работникам придется ждать полного завершения Task 1, прежде чем они смогут начать Task 2.
Однако в многопоточной версии этого сценария с двумя командами команде 2 на самом деле не нужно ждать. Если команда 1 задерживается и не использует производственную линию, команда 2 может подключиться и завершить свою задачу, пока команда 1 ждет, когда прибудут недостающие компоненты.
В этом сценарии вы не увеличили общие доступные ресурсы, но используете их более эффективно. Ваша эффективность и скорость увеличиваются. Это цель потоковой обработки.
Одновременная многопоточность ускоряет работу процессоров, позволяя им обрабатывать несколько строк команд одновременно. Хотя доступность ресурсов остается прежней, каналы для обработки инструкций увеличиваются.
Если задержка в задаче потока 1 создает отверстие в конвейере, вместо того, чтобы простаивать, второй, более быстрый поток может использовать эти доступные ресурсы и завершить свою задачу, пока поток 1 все еще ждет. По сути, разделяя ядро на потоки, вы делаете его более эффективным.
Теперь, в идеальном мире, эти потоки удвоили бы производительность ваших ядер, не так ли? Они в два раза эффективнее, верно?
Хотя верно, что многопоточность позволяет вашим процессорам обрабатывать большие объемы сложных команд, это не то же самое, что иметь в два раза больше доступных физических ядер. В конце концов, даже если ваши ядра более эффективны, всегда будет некоторая степень перекрытия ресурсов. В эти моменты, когда процесс требует полных ресурсов назначенного ядра, является ли он многопоточным или нет, будет иметь лишь ограниченное значение.
Тот факт, что четырехъядерный процессор с многопоточностью обычно быстрее четырехъядерного процессора без нее, не означает, что он такой же, как настоящий восьмиядерный процессор.
Но это не значит, что многопоточность не хороша. Увеличенная производительность логических процессоров, несомненно, делает вашу систему более эффективной. Однако то, что четырехъядерный процессор с многопоточностью обычно быстрее четырехъядерного процессора без нее, не означает, что он такой же, как настоящий восьмиядерный процессор.
Всем ли нужен такой уровень вычислительной мощности? Нет. Но для тех, кому он нужен, это различие имеет значение.
Итак, если логический процессор — это не то же самое, что и ядро, то что же такое vCPU?
Что такое vCPU?
Если вы знакомы с термином vCPU, скорее всего, вы или ваша компания являетесь клиентами поставщика публичных облачных услуг, например Amazon Web Services (AWS) или Google Cloud. vCPU или Virtual CPU — это термин, используемый поставщиками облачных IaaS для описания вычислительной мощности предоставляемых ими услуг.
Например, сборка AWS c5d.2xlarge, которую мы сравнивали в этой статье, указана как имеющая 8 vCPU вычислительной мощности. Однако это не физические ядра, это виртуальные ядра. Как обсуждалось ранее, виртуальное ядро — это не то же самое, что физическое ядро. Поэтому 8 vCPU — это не отражение его физического оборудования, а скорее его логической вычислительной мощности. На самом деле вы покупаете лишь доступ к фрагменту этого.
Используя гипервизоры, поставщики публичных облачных услуг, такие как AWS, разделяют свои серверы на несколько виртуальных машин (ВМ), которые они продают своим пользователям как отдельные экземпляры. Это можно сделать с SMT или без него, но когда они объединены, результатом является то, что одно физическое ядро может быть разделено на множество различных vCPU. Обычная формула для определения максимального количества vCPU, которое сервер может создать до перепродажи своих ресурсов, выглядит так: Потоки x Ядра x Сокеты = Максимальное количество vCPU.
Итак, если у вас есть 4-ядерный сервер с двухсторонним потоком на одном сокете, теоретически этот сервер можно разделить на 32 vCPU, прежде чем создать узкое место (8 потоков x 4 ядра x 1 сокет). Если у вас есть сервер Dual e5 2620v4 с двухсторонним SMT, вы смотрите на более чем 256 vCPU на одном сервере (16 потоков x 8 ядер x 2 сокета). Это много виртуальных машин на одной машине.
Создание vCPU по сути является вторичной версией SMT.
Другой способ думать об этом — оглянуться на нашу метафору производственной линии. Мы будем использовать наш пример 4 ядра/8 потоков/32 vCPU для этого.
Итак, предположим, что на вашем заводе есть 4 производственные линии (ядра), и вы разделили своих сотрудников на две команды на каждую производственную линию (многопоточность). Теперь у вас есть 4 линии и 8 команд, выполняющих 8 отдельных задач. Но согласно нашей формуле, при эффективном использовании, должно быть возможно, чтобы более 32 команд (vCPU) управляли этими 4 производственными линиями, пока перекрытие их ресурсов остается ограниченным.
По сути, гипервизор позволяет вам еще больше разделить эти команды, позволяя выполнять еще большее количество задач одновременно. Он делает это, разделяя потоки, используемые каждой виртуальной машиной, между разными ядрами, эффективно используя тот конвейер, который свободен в данный момент.
Другими словами, создание vCPU по сути является вторичной версией SMT.
Если сервер с 16 логическими процессорами может поддерживать более 256 виртуальных машин одновременно, можем ли мы действительно сказать, что vCPU эквивалентен физическому CPU? В конце концов, хотя маловероятно, что всем 256 из этих экземпляров потребуется доступ к этим логическим ядрам одновременно, определенно не невозможно представить, что такой сценарий может иметь место.
По этой причине, сравнивая 8 vCPU AWS c5d.2xlarge unit, упомянутый выше, мы сравниваем его не с настоящим восьмиядерным сервером, а с одним из наших 4-ядерных/8-поточных серверов. Это связано с тем, что физические ядра и логические ядра не идентичны. Хотя большинству пользователей такой процессор подойдет, тем пользователям, которым действительно нужны 8 физических ядер вычислительной мощности, просто знайте, что эти две вещи не одно и то же.
Используемая терминология может быть, порой, намеренно вводящей в заблуждение. Виртуальный ЦП (vCPU) — это не то же самое, что ядро (core).
Так является ли виртуальный ЦП на самом деле эквивалентом физического ЦП?
Короче говоря? Нет. Это не значит, что vCPU обязательно хуже. Система с 8 vCPU, скорее всего, будет работать эффективнее, чем система с 4. Это просто не то же самое, что иметь 8 физических ядер. Цель этого анализа — не дискредитировать vCPU, а просто убедиться, что это различие между физической и логической обработкой понято.
Хотя увеличение количества логических процессоров может быть большим преимуществом, ваши физические ядра, подсистема хранения и оперативная память в основном определяют истинные ограничения ресурсов вашей системы. При принятии решений относительно инфраструктуры и оборудования важно знать, какую роль играют эти тонкие различия. В конце концов, в отрасли, настолько укоренившейся в терминологии, очень легко потерять связь между одним ключевым словом и другим. Некоторые поставщики используют это в своих интересах. Если их клиенты не знают разницы, им легче обещать слишком много и не предоставлять слишком много.
Используемая терминология порой может намеренно вводить в заблуждение.