Практикум по серверной топологии
Приёмка PCIe-карты: скорость, ширина и NUMA
Курс учит проверять PCIe-карту после установки: отдельно смотреть максимальные возможности и текущие скорость и ширину линии, а неизвестную NUMA-привязку не принимать за подтверждённую локальность.
Что вы сможете сделать
- Отделять максимальные параметры PCIe-устройства от текущего состояния линии.
- Проверять текущие скорость и ширину как два независимых параметра.
- Читать NUMA-привязку PCIe-устройства и не принимать запасной список local_cpulist за подтверждённую локальность.
1. Сначала запишите максимум устройства
Максимальные параметры отвечают на вопрос, что устройство умеет заявить системе. Это ещё не фактический режим линии после установки.
Linux 6.12 публикует max_link_speed через pcie_get_speed_cap() и max_link_width через pcie_get_width_cap().
Максимальные и текущие параметры находятся в разных sysfs-атрибутах, поэтому одно значение нельзя подставлять вместо другого.
Наличие максимального значения не доказывает, что линия сейчас работает именно так.
Атрибуты max_link_speed и max_link_width Linux показывает только для устройств, распознанных как PCI Express.
2. Проверьте текущую линию
После установки смотрите не только возможности карты, но и тот режим, который ядро видит сейчас.
current_link_speed в Linux 6.12 берётся из поля текущей скорости PCI Express Link Status.
current_link_width берётся из Negotiated Link Width того же Link Status.
Скорость и ширина опубликованы отдельно, поэтому проверяйте обе величины.
Текущие значения и max_link_* — разные проверки; расхождение само по себе ещё не называет причину.
Текущие speed и width относятся к группе PCIe-атрибутов и доступны для устройств, которые ядро распознаёт как PCI Express.
3. Проверьте NUMA-привязку
Для серверной карты важно знать не только PCIe-режим, но и то, к какому NUMA-узлу система относит устройство.
numa_node показывает NUMA-узел PCI-устройства; -1 означает, что узел неизвестен.
Начальное значение NUMA-узла приходит из ACPI _PXM или аналогичного источника прошивки.
При известном узле local_cpus/local_cpulist используют маску CPU этого NUMA-узла.
При неизвестном узле Linux 6.12 показывает в local_cpus/local_cpulist все online CPU — это fallback, а не найденная локальная группа.
4. Соберите короткий протокол приёмки
Результат полезен, когда в нём отдельно сохранены возможности карты, текущая линия и NUMA-привязка.
Для одной PCIe-карты сохраните max_link_speed/max_link_width и current_link_speed/current_link_width как две пары разных смыслов.
Сохраните numa_node; если он равен -1, так и укажите, не заменяя неизвестность удобным предположением.
Не переписывайте numa_node как обычную настройку производительности: ABI Linux считает это обходом ошибки прошивки и помечает ядро.
Проверьте инженерное мышление
Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.
Следующий шаг
Сформулируйте задачу и уточните требования к своей системе.
Подготовить состав проектаОткроется черновик вопроса. Отправьте его, когда будете готовы.
Источники курса
Ссылки приведены один раз для всего курса, чтобы не мешать чтению каждого тезиса.
- Официальная документация
Linux v6.12 — drivers/pci/pci-sysfs.c
Linux kernel maintainers / torvalds/linux · исходный код ядра Linux, тег v6.12, drivers/pci/pci-sysfs.c, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, файл по тегу v6.12 сверен. Официальная реализация, не ABI-файл.
Открыть первоисточник - Официальная документация
ABI testing symbols: sysfs-bus-pci
The Linux Kernel documentation · документация ABI ядра Linux (sysfs-bus-pci), страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен.
Открыть первоисточник