Объяснение серверного оборудования (часть 4)

Опубликовано: 20 Марта, 2023

  • Объяснение серверного оборудования (часть 6)
  • Объяснение серверного оборудования (часть 7)
  • Объяснение серверного оборудования (часть 8)

Введение

Когда дело доходит до серверной памяти, необходимо понимать две основные концепции — четность и NUMA. Я хочу начать с обсуждения NUMA.

NUMA — это аббревиатура, обозначающая неунифицированный доступ к памяти. Хотя поначалу это может показаться немного пугающим, основная предпосылка NUMA на самом деле довольно проста.

На протяжении многих лет я читал бесчисленное количество книг и статей, в которых утверждалось, что память является самым быстрым компонентом любого компьютера. Однако это утверждение уже давно не верно для суперкомпьютеров и больше не верно для большинства сетевых серверов. В настоящее время ЦП сервера имеет тенденцию быть немного быстрее, чем его память.

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

Я хочу сказать, что производители компьютеров начали понимать, что хотя процессоры становятся все быстрее и быстрее, большая часть скорости теряется, потому что процессору приходится тратить так много времени на ожидание в памяти сервера.

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

Причина, по которой оснащение сервера несколькими ядрами и/или процессорами является такой проблемой, заключается в том, что доступ к ячейке памяти может получить только один процессор за раз. Это означает, что ЦП может не только тратить время на ожидание памяти, но и стоять в очереди позади других ЦП, прежде чем он получит возможность попытаться получить доступ к системной памяти.

Один из способов, с помощью которого производители серверов пытались уменьшить количество «спешек и ожиданий», с которыми сталкивается ЦП, — это введение памяти NUMA. Память NUMA разделена на отдельные отсеки, известные как узлы NUMA. Таким образом, каждому процессору можно выделить отдельный узел NUMA.

В большинстве случаев узлы NUMA выделяются для каждого процессора, а не для каждого ядра. Обычно между физическими сокетами ЦП и узлами NUMA существует отношение один к одному, независимо от того, сколько ядер существует в физическом ЦП. Это не значит, что исключений нет. Я знаю по крайней мере один сервер, который выделяет два узла NUMA для одного 12-ядерного процессора.

Выделение узла NUMA для каждого ЦП сервера помогает повысить производительность двумя способами.

Во-первых, использование отдельных узлов NUMA помогает предотвратить конкуренцию нескольких ЦП за доступ к памяти. Несколько ЦП могут одновременно обращаться к памяти, поскольку каждый ЦП обращается к отдельному узлу NUMA.

Другой способ повышения производительности NUMA — ограничение объема памяти, доступной одному ЦП. Если ЦП использует исключительно выделенный узел NUMA, то он имеет дело с меньшим объемом памяти, чем система в целом. Это делает управление памятью более эффективным.

К сожалению, то, что я только что описал, представляет собой идеальную ситуацию. В реальном мире процессоры не всегда используют исключительно узлы NUMA. Например, некоторым процессам может потребоваться больше памяти, чем может предоставить один узел NUMA, поэтому процессору может потребоваться использовать несколько узлов NUMA. Точно так же некоторые приложения могут совместно использовать данные, что также может потребовать от ЦП доступа к нескольким узлам NUMA. Обычно ЦП не представляет проблемы для доступа к данным с нелокального узла NUMA, но локальные запросы обрабатываются намного быстрее, чем нелокальные запросы, в результате того, как работает базовая шина.

Паритет памяти

В начале этой статьи я упомянул, что двумя наиболее важными понятиями, с которыми следует ознакомиться в отношении серверной памяти, являются узлы NUMA и контроль четности. В таком случае я хочу обратить внимание на паритет.

Проще говоря, четность памяти — это механизм обнаружения ошибок памяти. Если ошибки памяти возникают и не обнаруживаются, они могут привести к повреждению данных или нестабильности системы.

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

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

Хотя хорошо иметь возможность обнаруживать и исправлять однобитовые ошибки, существуют более надежные технологии ECC. Существует расширение ECC, известное как коррекция данных одного устройства (SDDC). SDDC способен обнаруживать и исправлять множественные сбои памяти.

SDDC работает аналогично массиву RAID 5. Данные, которые записываются в память, разбросаны по нескольким чипам, и каждый чип получает немного дополнительных данных. Таким образом, в случае сбоя чипа данные не теряются, потому что данных реплик, разбросанных по оставшимся чипам, достаточно, чтобы компенсировать сбой.

Некоторые серверы даже делают еще один шаг вперед, добавляя запасные сокеты памяти. Таким образом, на сервер можно установить дополнительную память, и эта память будет использоваться только в случае сбоя основной памяти сервера.

И последнее, что я хочу быстро упомянуть о памяти ECC, заключается в том, что простой установки памяти ECC на сервер не всегда достаточно для защиты от ошибок памяти. Поскольку память с ECC имеет тенденцию быть дорогой, многие серверы также рассчитаны на использование менее дорогой памяти без ECC. Такие серверы обычно требуют, чтобы вы изменили настройки BIOS перед установкой памяти ECC.

Вывод

В этой статье я познакомил вас с двумя наиболее важными понятиями, касающимися памяти сервера. В следующей статье этой серии я хочу обратить внимание на хранилище.

  • Объяснение серверного оборудования (часть 5)
  • Объяснение серверного оборудования (часть 6)
  • Объяснение серверного оборудования (часть 7)
  • Объяснение серверного оборудования (часть 8)