Объяснение серверного оборудования (часть 9)
В этой статье вы узнаете о сокетах ЦП, ядрах процессора, архитектуре ЦП и о том, как добавление дополнительных ядер ЦП на сервер может повысить вычислительную мощность сервера.
Недавно в этой серии статей я уделил много времени обсуждению серверного оборудования для хранения данных. Теперь я хочу обратить внимание на архитектуру процессора.
На первый взгляд, архитектура ЦП сервера не так уж сильно отличается от архитектуры ПК. Большинство ПК, выпущенных за последние несколько лет, оснащены многоядерными процессорами. Многоядерный процессор — это ЦП с двумя или более отдельными процессорами (или, если быть более точным с технической точки зрения, двумя или более процессорными ядрами), интегрированными в один чип.
Хотя ПК часто включают в себя многоядерные процессоры, ПК почти всегда ограничены использованием одного физического ЦП. С другой стороны, серверы часто рассчитаны на размещение как минимум двух физических ЦП, а иногда и больше. Количество физических ЦП, которые может разместить сервер, часто называют количеством сокетов.
Невероятная популярность виртуализации серверов заставила администраторов внимательно следить за общим количеством ядер, доступных на серверах, которые используются в качестве узлов виртуализации. Несмотря на то, что ядра ЦП редко назначаются виртуальным машинам в соотношении один к одному, количество доступных ядер на сервере напрямую влияет на количество виртуальных машин, которые может разместить сервер. По сути, чем больше процессорных ядер у сервера, тем больше виртуальных машин он потенциально может разместить. Я говорю «потенциально», потому что существует множество факторов, помимо ядер ЦП, которые ограничивают количество виртуальных машин, которые может разместить хост-сервер. Например, наиболее распространенным ограничивающим фактором является физическая память.
Вы можете определить общее количество ядер ЦП, существующих в системе, умножив количество ядер на процессор на количество процессоров в системе. Вы заметите, что я не говорил умножать общее количество ядер на процессор на общее количество сокетов в системе. Причина этого в том, что часто сокеты пусты. Многие производители серверов проектируют свои системные платы с дополнительными сокетами, чтобы расширить возможности сервера, но в интересах сохранения доступной цены они не всегда могут включать ЦП в каждый сокет.
Это поднимает еще один интересный момент. Системные платы серверов обычно могут вмещать различные варианты. Например, я встречал системные платы, поддерживающие использование четырех или пяти различных процессоров. Процессоры, поддерживаемые системной платой, часто различаются по количеству доступных ядер и общей тактовой частоте.
Вообще говоря, процессоры с более высокими тактовыми частотами обеспечивают более высокую производительность. Конечно, это предполагает, что архитектура процессора остается прежней. Нельзя судить о производительности процессора исключительно по его тактовой частоте. Некоторые конструкции ЦП более эффективны, чем другие. Таким образом, бывают случаи, когда ЦП с более низкой тактовой частотой может превзойти ЦП с более высокой тактовой частотой. Общая производительность сводится к количеству инструкций, которые ЦП может обрабатывать в секунду. Несмотря на то, что тактовая частота ограничивает общее количество инструкций, которые ЦП может обрабатывать каждую секунду, на это также влияют другие факторы. Большинство современных ЦП могут выполнять несколько инструкций в течение одного такта.
Еще одна вещь, которую вам необходимо понять об архитектуре ЦП сервера, заключается в том, что добавление дополнительной вычислительной мощности к серверу не обеспечивает действительно линейного увеличения производительности. Чтобы показать вам, что я имею в виду, давайте на мгновение забудем о виртуализации серверов. Виртуализация все усложняет, и сейчас я хотел бы сделать этот пример максимально простым, поскольку эта серия статей предназначена для начинающих. Имея это в виду, представьте, что у вас есть сервер с двумя сокетами, но с одним физическим процессором. Предположим также, что этот сервер обрабатывает одну рабочую нагрузку. Возможно, он запускает какое-то приложение базы данных. Со временем нагрузка на сервер увеличивается, и вы решаете добавить дополнительный процессор в надежде повысить производительность сервера.
Логически было бы легко предположить, что добавление второго физического процессора удвоит производительность сервера. К сожалению, это просто не так. Во-первых, существует значительная степень накладных расходов, связанных с процессом планирования задач. Другими словами, операционная система сервера должна активно решать, какой ЦП назначить различные задачи обработки. Простой акт манипулирования ресурсами между ЦП требует определенных накладных расходов.
До широкого использования многоядерных ЦП процесс планирования задач мог потреблять до 50 % общих возможностей нового процессора, другими словами, добавление второго ЦП к серверу обеспечивало прирост производительности только примерно на 50 %, а то есть в идеальных условиях. Сегодня многоядерные процессоры многое сделали, чтобы изменить способ работы планирования задач, к сожалению, я не смог найти никаких надежных тестов, подробно описывающих степень накладных расходов, которые можно ожидать от процесса переключения задач в современных процессорах.
Минуту назад я упомянул, что до выпуска многоядерных ЦП добавление второго физического ЦП к серверу могло привести к увеличению производительности на 50% в идеальных условиях. Причина, по которой я использовал фразу в идеальных условиях, заключается в том, что не каждый сервер может извлечь выгоду из добавления дополнительных ЦП или ядер ЦП, если уж на то пошло. Причина этого связана с потоками. Поток — это отдельная единица выполнения. Если приложение спроектировано как однопоточное, то приложение нельзя разделить таким образом, чтобы части рабочей нагрузки обслуживались несколькими ЦП или ядрами ЦП. Единственный способ, которым приложение может получить выгоду от наличия нескольких ЦП или ядер ЦП, — это многопоточное приложение. Многопоточные приложения потенциально могут использовать преимущества многоядерных систем, поскольку каждый поток может выполняться на отдельном ядре ЦП.
Архитектура процессора
При покупке серверного оборудования вы, скорее всего, встретите такие термины, как x86, x64 и Itanium, которые используются для описания процессоров, доступных в серверном оборудовании. Эти спецификации известны как архитектура процессора. По сути, архитектура ЦП определяет, какой тип кода может выполнять ЦП. Например, процессор x86 не может выполнять код, написанный для 64-битных процессоров или процессоров Itanium. Исключением из этого правила является то, что большинство 64-битных серверов позволяют запускать 32-битный код, если это поддерживается операционной системой сервера.
Вывод
В этой серии статей я попытался донести идею о том, что, несмотря на сходство между аппаратным обеспечением сервера и аппаратным обеспечением ПК, аппаратное обеспечение сервера имеет некоторые довольно существенные различия. Подавляющее большинство этих различий сосредоточено вокруг таких вещей, как хранилище, ЦП, память и управление.