Hacker News Digest

Тег: #numa

Постов: 6

AMD's EPYC 9355P: Inside a 32 Core Zen 5 Server Chip (chipsandcheese.com)

AMD представила серверный процессор EPYC 9355P на архитектуре Zen 5 с 32 ядрами, который фокусируется не на максимальном количестве ядер, а на повышении производительности каждого из них. Чип работает на частоте до 4,4 ГГц, что выше, чем у моделей с 128 или 192 ядрами (3,7–4,1 ГГц). Для размещения ядер используются восемь кристаллов (CCD), в каждом из которых активировано только четыре из восьми физических ядер, но доступен полный объём кэша L3 — 32 МБ на CCD. Это обеспечивает высокое соотношение кэш-памяти к количеству ядер. Кроме того, каждый CCD подключён к IO-чипу через два канала GMI-Wide, что даёт 64 байта/цикл пропускной способности в каждом направлении и полностью использует возможности IO-чипа.

Система Dell PowerEdge R6715 с этим процессором и 768 ГБ DDR5-5200 демонстрирует теоретическую пропускную способность памяти около 500 ГБ/с. В режиме NPS1 запросы к памяти распределяются по всем 12 контроллерам, обеспечивая единое адресное пространство, но с несколько повышенной задержкой по сравнению с десктопными решениями, например Ryzen 9 9900X. Задержка DRAM в этом режиме немного лучше, чем у Intel Xeon 6 в конфигурации SNC3. Архитектура серверных чипов AMD, с необходимостью связывать множество компонентов через Infinity Fabric, закономерно приводит к более высокой латентности, но кэш-производительность Zen 5 в серверном и десктопном вариантах схожа, отличаясь в основном из-за разницы в тактовых частотах.

by rbanffy • 03 октября 2025 г. в 20:01 • 156 points

ОригиналHN

#amd#epyc#zen-5#server#ddr5#infinity-fabric#numa#ram-disk

Комментарии (31)

  • Обсуждаются технические характеристики серверных процессоров AMD EPYC: 768 ГБ оперативной памяти DDR5-5200, 12 контроллеров памяти и высокая пропускная способность.
  • Участники делятся опытом использования больших объемов RAM в качестве диска (RAM disk) для ускорения сборки проектов и запуска моделей ИИ.
  • Ведутся споры о влиянии архитектуры NUMA на производительность и о том, стоит ли оптимизировать код под нее в рамках одного сокета.
  • Обсуждаются возможные опечатки в спецификациях и корректность работы программы счетчика (program counter) в архитектуре EPYC.
  • Сравнивается заявленная пропускная способность памяти с другими системами (например, Apple M1 Ultra) и обсуждаются перспективы её роста.

Optimizing ClickHouse for Intel's 280 core processors (clickhouse.com)

Оптимизация ClickHouse для процессоров Intel с ультра-высоким числом ядер

Авторы: Цзебин Сань, Чжиго Чжоу, Ваньян Го, Тьянью Ли

Гостевой пост от инженеров по оптимизации производительности из Intel Shanghai.

Современные процессоры Intel достигают беспрецедентного числа ядер: до 128 P-ядер на сокет в Granite Rapids и 288 E-ядер в Sierra Forest. Многосокетные системы могут иметь более 400 ядер. Тенденция «больше ядер, а не выше тактовая частота» обусловлена физическими ограничениями и проблемами энергопотребления.

Для аналитических баз данных, таких как ClickHouse, большое количество ядер представляет как возможность, так и сложную задачу. Хотя теоретически больше ядер означают больше параллельной мощности, большинство СУБД не могут полностью использовать аппаратные ресурсы. Проблемы параллельной обработки, такие как конфликты блокировок, когерентность кэша, неоднородный доступ к памяти (NUMA), пропускная способность памяти и накладные расходы на координацию, усугубляются с ростом числа ядер.

Оптимизация для ультра-высокого числа ядер

За последние три года мы анализировали и оптимизировали масштабируемость ClickHouse на процессорах Intel Xeon с большим числом ядер. С помощью инструментов профилирования (perf, emon, Intel VTune) мы исследовали все 43 запроса ClickBench на серверах с ультра-высоким числом ядер, выявляли узкие места и оптимизировали ClickHouse.

Результаты впечатляют: отдельные оптимизации ускоряют выполнение запросов в несколько раз, в некоторых случаях до 10x. Среднее геометрическое время выполнения всех запросов стабильно улучшалось на 2–10% для каждой оптимизации. Это демонстрирует, что ClickHouse можно эффективно масштабировать на системах с ультра-высоким числом ядер.

Ключевые проблемы масштабирования

Помимо производительности одного ядра, необходимо решить несколько ключевых задач:

  1. Накладные расходы когерентности кэша: Перемещение строк кэша между ядрами требует циклов CPU.
  2. Конфликты блокировок: Даже небольшие последовательные участки кода (1%) сильно ограничивают параллелизм по закону Амдала.
  3. Пропускная способность памяти: Эффективное использование памяти критично для систем с интенсивной работой с данными.
  4. Координация потоков: Стоимость синхронизации потоков растет сверхлинейно с их количеством.
  5. Эффекты NUMA: Задержки и пропускная способность памяти различаются для локальной и удаленной памяти в многосокетных системах.

В этом посте summarized наши оптимизации ClickHouse для серверов с ультра-высоким числом ядер.

by ashvardanian • 17 сентября 2025 г. в 18:46 • 198 points

ОригиналHN

#clickhouse#intel#cpu#numa#perf#avx2#avx512#jemalloc#tcmalloc#mimalloc

Комментарии (46)

  • Исправление опечатки в заголовке: речь идёт о 288-ядерных серверных процессорах Intel Sierra Forest, а не о "Intel 280".
  • Оптимизация ClickHouse под высокоядорные системы: улучшение аллокаторов памяти, борьба с конкуренцией, использование SIMD-фильтрации (ускорение запросов до 35%).
  • Обсуждение технических деталей процессоров: отсутствие AVX-512 на E-ядрах Sierra Forest, наличие AVX2 VNNI, сравнение с AMD Zen 4c.
  • Проблемы масштабирования: сложности NUMA, contention points на уровне аллокаторов, разделение полосы пропускания памяти.
  • Практический опыт использования ClickHouse: высокая эффективность сжатия и скорость агрегации больших данных (миллиарды снэпшотов).
  • Критика и предложения: переход с jemalloc на современные аллокаторы (TCMalloc, mimalloc), использование оптимистичного контроля параллелизма.
  • Исторический и футуристический контекст: сравнение с устаревшими системами, шутки о запуске 1000 виртуальных машин и размещении целого стойка в одном процессоре.

GigaByte CXL memory expansion card with up to 512GB DRAM (gigabyte.com)

by tanelpoder • 06 сентября 2025 г. в 18:17 • 93 points

ОригиналHN

#cxl#pci-express#dram#linux#windows#numa

Комментарии (59)

  • CXL — это стандарт расширения памяти по PCIe: позволяет добавлять сотни гигабайт/терабайт ОЗУ вне материнки, сохраняя когерентность кэшей.
  • Задержка ~200 нс, в ~100 раз выше обычной ОЗУ, но в ~100 раз ниже NVMe; пропускная способность PCIe 5.0 всё ещё высока.
  • Первые «доступные» карты (Gigabyte 512 ГБ) уже продаются, но цена и совместимость пока неясны; требуются CPU и материнка с CXL-поддержкой.
  • Linux/Windows видит память без специальных драйверов, но для эффективного использования нужно перепроектировать алгоритмы (NUMA, tiering).
  • Основные плюсы: дешёвое расширение старой DDR4, shared-memory кластеры, быстрый обмен GPU↔CXL без копирования в основную ОЗУ.

Io_uring, kTLS and Rust for zero syscall HTTPS server (blog.habets.se) 🔥 Горячее

  • История: от pre-fork до epoll — каждый шаг уменьшал сисколлы, но они всё ещё оставались узким местом.
  • io_uring — кольцевые очереди в памяти: сервер пишет команды, ядро асинхронно их выполняет и кладёт результат обратно. При высокой нагрузке strace не покажет ни одного сисколла.
  • 1 поток = 1 ядро без разделяемых структур; память берётся только из локального NUMA-узла.
  • Память: заранее выделяем фиксированный буфер на соединение — без brk/mmap, без фрагментации.
  • kTLS — после рукопожатия шифрование переходит в ядро. Плюсы:
    1. Работает sendfile, данные не копируются в userspace.
    2. Возможно аппаратное ускорение NIC.

by guntars • 22 августа 2025 г. в 03:51 • 442 points

ОригиналHN

#io-uring#ktls#rust#https#syscalls#epoll#numa#dpdk

Комментарии (137)

  • io_uring даёт «zero-syscall» при высокой нагрузке, но требует ручного управления памятью: безопасность не обеспечивается ни borrow checker, ни runtime.
  • На большинстве облачных платформ io_uring выключен по умолчанию, поэтому остаётся нишевым.
  • Автор статьи сначала чистит код, а потом будет мерить производительность — что вызвало одобрение читателей.
  • Обсуждаются альтернативы: epoll, kTLS, DPDK, eBPF, а также споры «один поток на ядро» vs oversubscription.
  • Некоторые считают, что сложность io_uring и async Rust — цена за неспособность ОС ускорить syscalls без нарушения обратной совместимости.

Without the futex, it's futile (h4x0r.org) 🔥 Горячее

Без futex всё тленно

Книга The Art of Multiprocessor Programming (2-е изд., 2021) считается канонической, но она обходит стороной futex — ключевой примитив современной многопоточности. Это упущение делает пособие бесполезным для практиков.

Futex ≠ mutex
Название происходит от «fast userspace mutex», но futex — это не мьютекс, а основа для всех высокоэффективных примитивов синхронизации. До него всё строилось на громоздких System V IPC, которые не масштабировались: при 1000 потоков futex в 2002-м оказался в 20–120 раз быстрее sysv-блокировок. Windows и macOS добавили аналоги только в 2012 и 2016 гг.

Суть futex
Он разделяет блокировку и ожидание/пробуждение:

  • В user-space проверяем состояние; если свободно — захватываем без системного вызова.
  • При конфликте вызываем futex_wait(addr, expected), засыпаем в ядре на конкретном адресе.
  • Пробуждение — futex_wake(addr, n), где n обычно 1 или «все».

Передаваемое в wait значение защищает от «просыпания» после уже случившегося события: если память изменилась, системный вызов мгновенно возвращает ошибку.

Такой подход убирает лишние системные вызовы и позволяет строить быстрые мьютексы, rw-lock’и, семафоры и пр. без поллинга и экспоненциальных бэкоффов.

Итог
Любая современная библиотека (pthreads, C++ std::mutex, Rust std::sync) опирается на futex. Учебник, игнорирующий этот примитив, не готовит к реальной разработке.

by eatonphil • 19 августа 2025 г. в 13:53 • 284 points

ОригиналHN

#futex#multithreading#system-v#linux#pthreads#rust#c++#io-uring#numa#synchronization

Комментарии (138)

  • Futex — это быстрый примитив синхронизации, который экономит системные вызовы при отсутствии конфликтов и не требует выделения ядром объектов.
  • В отличие от Benaphore и старых SysV-механизмов, futex не требует предварительной инициализации в ядре и исчезает, когда нет ожидающих.
  • Обсуждение подчёркивает, что современные учебники по многопроцессорному программированию обязаны упоминать futex, но «The Art of Multiprocessor Programming» этому не уделяет внимания.
  • Улучшения futex2 (Linux ≥5.16) добавили NUMA-поддержку и аналог Windows WaitForMultipleObjects, а io_uring теперь умеет работать с futex.
  • Для надёжности при падении потока существуют robust-locks и списки futex, которые ядро автоматически разблокирует.

Non-Uniform Memory Access (NUMA) is reshaping microservice placement (codemia.io)

Codemia
Подготовка к систем-дизайн-интервью через практику:
Начать | Блог | Системный дизайн

Юридика
Условия | Конфиденциальность | Контакт

Соцсети
Twitter | LinkedIn

by signa11 • 18 августа 2025 г. в 01:40 • 78 points

ОригиналHN

#numa#microservices#hpc#aws#gcp#kubernetes#linux

Комментарии (24)

  • Обсуждение подтверждает: для HPC, высоконагруженных и чувствительных к задержкам систем NUMA-распределение критично, и ручное pinning процессов/потоков к нужным узлам остаётся основным способом добиться стабильной производительности.
  • В публичных облаках (AWS, GCP) NUMA-топология скрыта, VM часто выглядят как однонодовые UMA; полезны lscpu, lstopo, cpu-latency, но настроек управления NUMA почти нет.
  • Сообщество делится инструментами: mpibind, sched_ext, DAMON, fake NUMA, идеями эмуляции NUMA даже на Raspberry Pi 5.
  • Kubernetes уже умеет NUMA-affinity, но вручную выбирать 64-ядерный инстанс вместо 96-ядерного (чтобы не пересекать сокеты) всё равно приходится самим.
  • Крайняя альтернатива — односокетные серверы с NPS=1: «равномерно медленно», но без головной боли.