На этой странице
Если сравнить конфигурации наших серверов, объёмы памяти выглядят непривычно: 384, 576 и 1 152 ГБ вместо 256, 512 или 1 024. Они следуют из того, как процессор работает с памятью, и дают всю пропускную способность, на которую способна платформа.
Коротко о каналах памяти
Канал памяти — это независимый путь между контроллером памяти процессора и подключёнными к нему модулями DIMM. Каналы работают параллельно, поэтому общая пропускная способность примерно равна пропускной способности одного канала, умноженной на число заполненных каналов. Кроме того, каждый модуль DDR5 делит свой тракт данных на два 32-битных подканала, что повышает эффективность, но при подборе конфигурации ориентируются на число каналов.
При DDR5-6000 один канал теоретически передаёт до 48 ГБ/с: 6 000 миллионов передач в секунду по 8 байт каждая. Вот что это означает для нашей линейки:
| Платформа | Серверы | Каналы | Теоретическая пиковая пропускная способность |
|---|---|---|---|
| AMD EPYC 9005, один сокет | Pro, Max 96, GPU RTX PRO | 12 | 576 ГБ/с |
| AMD EPYC 9005, два сокета | Max 192 | 24 | 1 152 ГБ/с |
| AMD EPYC 4005 | Core, Storage | 2 | Шестая часть от одного сокета EPYC 9005 при той же частоте памяти |
В реальных приложениях устойчивая пропускная способность ниже этих пиков. Если ваша нагрузка зависит от пропускной способности памяти, измерьте её на сервере с помощью инструмента вроде STREAM.
Один модуль DIMM на канал
Мы устанавливаем в каждый канал ровно один модуль DIMM, и все модули одинаковые. На то есть три причины.
- Работает каждый канал. Пропускная способность растёт с числом заполненных каналов, поэтому сокет, у которого заполнены только 8 каналов из 12, выдаёт не больше двух третей пика.
- Память чередуется равномерно. Когда везде стоят одинаковые модули, последовательные блоки памяти распределяются по всем каналам. При модулях разного объёма или неравномерном заполнении остаются области, которые чередуются по меньшему числу каналов, и производительность начинает зависеть от того, где оказались ваши данные.
- Память работает на полной скорости. С одним модулем на канал платформа работает на максимальной поддерживаемой частоте памяти. Второй модуль в канале обычно вынуждает её снизить.
Поэтому объём памяти набирается кратно 12 модулям на сокет:
| Сервер | Модули DIMM | Общий объём памяти |
|---|---|---|
| Pro 32 | 12 × 32 ГБ | 384 ГБ |
| Pro 48 и GPU RTX PRO | 12 × 48 ГБ | 576 ГБ |
| Pro 64 | 12 × 64 ГБ | 768 ГБ |
| Max 96 | 12 × 96 ГБ | 1 152 ГБ |
| Max 192 | 24 × 64 ГБ | 1,5 ТБ |
Модули на 48 ГБ и 96 ГБ собраны на микросхемах памяти плотностью 24 Gb — такая плотность появилась вместе с DDR5. Они заполняют промежутки между объёмами, равными степеням двойки, не нарушая правила «один модуль на канал».
GPU L40S с 256 ГБ рассчитан на другую задачу: на сервере для инференса с одним GPU модель размещается в 48 ГБ памяти видеокарты, поэтому память хоста здесь важна меньше, чем на сервере баз данных.
Два канала в Core и Storage
У процессоров AMD EPYC 4005 в сериях Core и Storage два канала памяти. Поэтому пропускная способность памяти у них намного ниже, чем у серверов Pro, зато частоты очень высокие: boost до 5,4 ГГц, а у Core 16X — до 5,7 ГГц. Кроме того, у Core 16X 128 МБ кеша L3 благодаря 3D V-Cache, так что рядом с ядрами помещается больше горячих данных.
Для игровых серверов, веб-приложений и CI-раннеров, чьи горячие данные в основном помещаются в кеш, частота важнее пропускной способности памяти, и серия Core выгоднее. Для аналитических сканирований, больших наборов данных в памяти и плотной виртуализации выигрывают двенадцать каналов.
Пропускная способность или объём
При подборе памяти нужно ответить на два разных вопроса.
Объём: помещается ли рабочий набор данных? Если нет, система читает с NVMe. Для накопителя это быстро, но каждое обращение занимает микросекунды вместо примерно 100 наносекунд у DRAM — разница в два-три порядка.
Пропускная способность: как быстро ядра могут прокачивать данные? Когда данные уже в памяти, аналитические запросы, колоночные хранилища в памяти, большие сортировки и многие HPC-программы упираются в то, как быстро память их отдаёт.
Если разделить показатели на число ядер, становится виден компромисс в линейке EPYC 9005. Значения пропускной способности — теоретические пики.
| Сервер | Ядра | Память на ядро | Пиковая пропускная способность на ядро |
|---|---|---|---|
| Pro 32 | 32 | 12 ГБ | 18 ГБ/с |
| Pro 48 | 48 | 12 ГБ | 12 ГБ/с |
| Pro 64 | 64 | 12 ГБ | 9 ГБ/с |
| Max 96 | 96 | 12 ГБ | 6 ГБ/с |
| Max 192 | 192 | 8 ГБ | 6 ГБ/с |
Pro 32 даёт каждому ядру больше всего пропускной способности — это подходит для требовательных к ней задач, которые плохо масштабируются на много ядер. Серверы Max дают наибольший общий объём памяти и наибольшую суммарную пропускную способность — для нагрузок, которые распределяются по множеству ядер и держат в памяти очень большие наборы данных.
Подбор памяти для баз данных
Цель — держать в памяти часто используемые данные и индексы и при этом оставить место для подключений и операционной системы.
- PostgreSQL опирается и на собственный буферный кеш, и на страничный кеш операционной системы. Обычная отправная точка —
shared_buffersоколо 25% RAM, а остальное отдаётся страничному кешу.work_memвыделяется на каждую операцию сортировки или хеширования, поэтому при большом числе активных подключений общий расход памяти может многократно вырасти. - MySQL с InnoDB на выделенном сервере обычно отдают под
innodb_buffer_pool_sizeот 60 до 75% RAM. - Redis хранит весь набор данных в памяти. Оставьте запас для фоновых сохранений: они создают дочерний процесс (fork) и при интенсивной записи могут потребовать значительного объёма дополнительной памяти.
Подбор памяти для виртуальных машин
Для продакшен-хостов сложите память всех ВМ, затем зарезервируйте память для самого хоста и для кеширования хранилища — например, ZFS ARC, если вы используете ZFS. Ballooning и объединение одинаковых страниц памяти позволяют повысить плотность, но гипервизор, которому не хватает памяти, замедляет сразу все гостевые системы.
На двухсокетном Max 192 по возможности держите каждую ВМ в пределах ядер и памяти одного сокета. Для этого в Proxmox VE у каждой ВМ есть параметр NUMA; настройка хоста описана в нашем руководстве по Proxmox.
Как проверить конфигурацию памяти сервера
В Linux можно посмотреть каждый модуль DIMM, его объём и настроенную частоту, а также топологию NUMA:
dmidecode -t memory | grep -E '^\s+(Size|Locator|Configured Memory Speed):'
numactl --hardwareНа сервере Pro или Max вы должны увидеть 12 занятых слотов на сокет, и все модули одного объёма.
Чтобы сравнить конфигурации, посмотрите серию Pro и серию Max или прочитайте, что меняет EPYC 9005 в остальных компонентах платформы.