Центральные процессоры (CPU) в серверных решениях
Студент освоит характеристики серверных процессоров, включая количество ядер, частоту, кэш-память и особенности многопроцессорных систем.
Анатомия серверного процессора. Производительность сервера в первую очередь определяется характеристиками его центрального процессора (CPU). В отличие от десктопных решений, серверные CPU (например, Intel Xeon Scalable или AMD EPYC) проектируются для обеспечения максимальной надежности и непрерывной работы в режиме 24/7 под высокой нагрузкой. Ключевыми характеристиками являются: количество физических ядер (Cores), базовая и турбо-частота (Clock speed), а также объем кэш-памяти.
Кэш-память — это сверхбыстрая статическая память (SRAM), расположенная прямо на кристалле процессора. Она необходима для сглаживания разницы в скорости между невероятно быстрым CPU и относительно медленной оперативной памятью (RAM). Кэш строится по иерархическому принципу: L1 (Level 1) — самый быстрый, но самый маленький (десятки килобайт на ядро), хранит инструкции и данные, которые нужны процессору прямо сейчас. L2 — больше по объему (мегабайты), но чуть медленнее. L3 — общий кэш для всех ядер процессора (достигает сотен мегабайт), используется для обмена данными между ядрами. Эффективная работа кэша L3 критически важна для баз данных, где множество потоков обращаются к общим таблицам.
Многопроцессорные системы и архитектура NUMA. Большинство корпоративных серверов имеют многопроцессорную архитектуру. На материнской плате располагается два, четыре или даже восемь физических сокетов (разъемов) для установки процессоров. Исторически все процессоры обращались к общему контроллеру памяти по единой шине (архитектура SMP/UMA). Это создавало «бутылочное горлышко»: при одновременном обращении нескольких CPU к памяти шина не справлялась с трафиком.
Для решения этой проблемы была разработана архитектура NUMA (Non-Uniform Memory Access) — Неравномерный доступ к памяти. Это важнейший концепт для системного администратора. В NUMA-архитектуре контроллер оперативной памяти встроен прямо в каждый процессор. Оперативная память физически разделена на банки (слоты на материнской плате), которые жестко привязаны к конкретным сокетам. Один процессор (Node 0) и привязанная к нему память образуют NUMA-узел.
Особенности работы NUMA и межпроцессорные связи. Доступ процессора к «своей» локальной памяти (Local Memory) происходит на максимальной скорости и с минимальной задержкой. Однако, что произойдет, если Процессору 1 понадобятся данные, которые физически лежат в планках памяти, подключенных к Процессору 2? В этом случае запрос передается по специальным высокоскоростным шинам, соединяющим процессоры между собой (у Intel это называется UPI/QPI, у AMD — Infinity Fabric). Доступ к памяти соседнего процессора называется удаленным (Remote Memory Access). Главная проблема — такой доступ занимает значительно больше времени (увеличивается latency).
Just-in-Time Learning: Как проверить NUMA-топологию на Linux-сервере? Если вы подозреваете проблемы с производительностью, подключитесь по SSH и используйте утилиту numactl --hardware. Команда покажет количество NUMA-узлов, объем памяти в каждом из них и матрицу задержек (node distances) между узлами. Это первый шаг в диагностике узких мест производительности.
Практика виртуализации: NUMA-awareness. Понимание NUMA критически важно при настройке гипервизоров (VMware ESXi, KVM). Когда вы создаете виртуальную машину (ВМ), гипервизор выделяет ей виртуальные процессоры (vCPU) и виртуальную память (vRAM). Типичная и фатальная ошибка новичков: создание огромных виртуальных машин (Monster VMs), размер которых превышает емкость одного физического NUMA-узла. Например, на сервере с двумя 16-ядерными процессорами и 128 ГБ RAM (по 64 ГБ на узел), администратор создает ВМ с 20 vCPU и 80 ГБ RAM.
Последствия (Direct Instruction): Гипервизор будет вынужден «размазать» эту ВМ по двум физическим процессорам. Часть процессов ВМ будет выполняться на CPU 1, но обращаться к памяти, физически подключенной к CPU 2. Это вызовет постоянный поток данных через межпроцессорную шину UPI, резкий рост задержек (latency) и глобальную деградацию производительности всего физического сервера. Правильный подход — NUMA-awareness: при конфигурации ВМ необходимо следить, чтобы её ресурсы (vCPU и RAM) укладывались в границы одного физического NUMA-узла (в нашем примере — максимум 16 vCPU и 64 ГБ RAM на одну ВМ). Если ВМ должна быть больше, необходимо правильно настроить vNUMA внутри гостевой ОС.
Задание
Сценарий: Разработчики жалуются, что их тяжелая база данных PostgreSQL, работающая на виртуальной машине, периодически «фризит» (зависает на миллисекунды), хотя ресурсов CPU и RAM выделено с избытком. Физический хост имеет 2 процессора (сокета) по 12 ядер и 128 ГБ RAM (64 ГБ на сокет). ВМ базы данных имеет 16 vCPU и 80 ГБ RAM. Ваша задача — диагностировать и устранить проблему.
- Анализ конфигурации: Вычислить размер одного физического NUMA-узла хоста (12 ядер, 64 ГБ RAM).
- Выявление проблемы: Сопоставить конфигурацию ВМ (16 vCPU, 80 ГБ) с размером NUMA-узла. ВМ пересекает границы NUMA (NUMA spanning).
- Проверка задержек: Использовать утилиты гипервизора (esxtop или virt-top) для подтверждения высокого процента обращений к Remote Memory.
- Устранение: В нерабочее время выключить ВМ, изменить конфигурацию (например, разбить на две ВМ или уменьшить ресурсы до 10 vCPU и 60 ГБ RAM, если это допустимо), чтобы ВМ помещалась в один NUMA-узел.
Флеш-карточки
Что такое L3 кэш в архитектуре процессора?
Нажмите, чтобы увидеть ответ
Уровень кэш-памяти 3-го уровня. Самый большой и медленный из кэшей на кристалле, является общим для всех ядер процессора.
Нажмите, чтобы вернуться
Что означает NUMA Spanning (пересечение границ NUMA)?
Нажмите, чтобы увидеть ответ
Ситуация, когда виртуальной машине выделено больше ресурсов (vCPU/RAM), чем имеется в одном физическом процессоре (NUMA-узле), что приводит к падению производительности из-за доступа к удаленной памяти.
Нажмите, чтобы вернуться