Получаем информацию о железе сервера в Linux
31.01.2020
VyacheslavK
CentOS, Linux
Комментариев пока нет
Вы можете узнать, какое железо установлено в вашем сервере из BIOS/UEFI, или через отдельный управляющий интерфейс сервера, который есть у большинства промышленных серверов (HPE ILO, Dell iDRAC, IBM BMC, IPMI и т.д.). А что делать, если у сервера нет интерфейса управления (или он не доступен), а перезагружать сервер перезагружать не желательно? В этой статье на примере CentOS мы рассмотрим основные команды и утилиты Linux, которые позволят получить подробные сведения об аппаратном обеспечении сервера: оперативной памяти, процессоре, жестких дисках, материнской плате и настройках BIOS.
Информация об оперативной памяти (RAM) в Linux
Вы можете получить информацию о количестве оперативной памяти на сервере с помощь встроенных средств Linux CentOS (данные команды не дают подробной информации, но вполне приемлемы для быстрой оценки).
Первая покажет количество памяти в мегабайтах, вторая в гигабайтах (информация о количестве оперативной памяти указано в значении Mem: total).

Тут же будет и показан размер swap.
Также вы можете получить информацию о RAM из файла /proc/meminfo:
# grep MemTotal /proc/meminfo
# grep SwapTotal /proc/meminfo

Первый вариант на мой взгляд удобнее, так как вы сразу видите и используемую память, и свободную.
Так же существует еще несколько вариантов проверки количества ОЗУ на сервере:
Vmstat показывает не только физическую память сервера, но и всю статистику по виртуальной памяти.
Либо запустите команду top и посмотрите информацию о RAM в самом верхнем блоке:

Так же, есть удобная утилита atop, которая покажет вам количество ОЗУ на сервере, а также информацию по занятой, кешированной и свободной памяти.
Вы можете установить утилиту atop из EPEL репозитория с помощью yum (dnf):
# yum install atop -y

Должна быть в вашем арсенале и не менее удобная утилита nmon. Установите ее на сервер:
# yum install nmon -y
Выполните команду nmon, и для проверки ОЗУ нажмите m:

Но все вышеперечисленные утилиты, показывают лишь объем памяти, а модель скорость и другие характеристики нет. Если нужна более подробная информация о бланках памяти (производитель, тип, частота), можно воспользоваться утилитой dmidecode:

Как видите, dmidecode выводит более подробную информацию о установленных модулях памяти.
Как узнать информацию о процессоре (CPU) в Linux?
Информацию о процессоре в Linux можно получить несколькими способами. Начнем с самого простого — получение информации из файла /proc/cpuinfo:
# cat /proc/cpuinfo | grep model

Чтобы узнать количество ядер, выполните:
# cat /proc/cpuinfo | grep processor

В моем случае на сервере 8 ядер.
Более подробную информацию о процессоре, можно узнать командой lscpu:

Утилита lscpu покажет вам количество ядер, модель процессора, максимальную частоту, рамеры кэшей CPU, ноды NUMA и многое другое.
Количество ядер, так же можно узнать запустив команду atop или nproc —all:


Для отображения подробной информации, можно дополнительно установить утилиту cpuid:
# yum install cpuid -y
После установки запустите командой:

Вы получите информацию не только о модели процессора, но тип и семейство процессора, конфигурацию кеша, функцию управления питанием и другое.
С помощью утилиты demidecodev вы так же можете узнать всю информацию об установленных на сервере процессорах:
# dmidecode —type processor

И, пожалуй, последняя утилита для проверки процессора inxi. Это скрипт на bash, который покажет вам модель процессора, размер кеша, частоту и дополнительные возможности процессора. Установим его:
# yum install inxi -y

Информация о жестких дисках сервера в Linux
Чтобы получить информацию о жестких дисках в системе, я обычно использую утилиту hdparm. Сначала нужно установить ее из репозитория:
# yum install hdparm -y
Чтобы получить инфу по жесткому диску, нужно указать название устройства:
# hdparm -I /dev/sdb

Как видите, при проверке отображается модель диска, серийный номер, версия прошивки диска, цилиндрах, rpm, поддерживаемые функции и ряд другой информации.
Вторая не менее популярная утилита это smartctl (она по умолчанию уже установлена в системе). Чтобы вывести информацию о диске, выполните:
# smartctl -d ata -a -i /dev/sdb
Информация будет предоставлена так же подробно:

Очередная, очень удобная утилита lshw. Установите ее:
# yum install lshw -y
# lshw -class disk

Утилита dmidecode: получения информации о материнской плате, BIOS и др.
В данном разделе я приведу примеры более расширенного использования утилиты dmidecode. Dmidecode позволяет получить информацию об аппаратном обеспечении сервера на основе данных из BIOS по стандарту SMBIOS/DMI.
С помощью dmidecode мы можем получить информацию о материнской плате, bios, шасси и слотах сервера. Например:
# dmidecode —type baseboard – получим информацию о материнской плате.

# dmidecode —type bios – информация о BIOS (версия, поддерживаемые функции).

# dmidecode —type chassis – сведения о корпусе (шасси) сервера.

# dmidecode —type slot – сведения о используемых слотах на материнской плате.

Чтобы собрать вообще всю информацию о железе вашего сервера Linux, можно воспользоваться ранее указанную утилиту lshw:
# lshw -html > server_info.html
Вся информация будет выгружена в html файл.

Итак, мы рассмотрели, как получить информацию о аппаратном обеспечении вашего сервера. Надеюсь, информация будет полезна многим пользователям, а может и администраторам.
Предыдущая статья Следующая статья
Подготовка системы
Поддерживается работа на платформах AMD и Intel с архитектурой x86-64.
Для оптимальной работы платформ AMD требуется настройка BIOS.
Hyper-threading
Рекомендуется включить hyper-threading (HT) в BIOS.
При включенном HT следующая команда показывает 2 :
Многопроцессорные платформы рекомендуется использовать в NUMA-режиме с одним процессором на NUMA-ноду. Поддерживаются платформы с одной и двумя NUMA-нодами.
Для оптимальной производительности рекомендуется разносить сетевые карты по разным NUMA-нодам, чтобы каждый процессор работал только с портами на своей ноде.
Узнать NUMA-ноду устройства по его PCI-адресу:
Драйвера (модули ядра)
Для сетевых карт Intel и некоторых других в системе должен быть загружен драйвер (модуль ядра), позволяющий DPDK работать с ними. Для карт Mellanox загрузка модулей ядра не требуется.
Подобрать драйвер для установленных сетевых устройств (документация DPDK):
- Карты Mellanox работают только с собственным драйвером.
- vfio-pci : стандартный, рекомендуется по умолчанию (см. ниже);
- uio_pci_generic : стандартный, используется вместо vfio-pci , если он не работает (см. ниже);
- igb_uio : нестандартный, нужен только если остальные драйвера не работают (см. ниже);
- virtio-pci : нужен для виртуальных адаптеров QEMU/KVM.
Настроить загрузку драйвера при запуске системы.
Управление драйверами
Привязка устройств к нужному драйверу производится через скрипт dpdk-devbind (документация DPDK).
Cкачать и установить dpdk-devbind :
Посмотреть состояние сетевых устройств и доступных драйверов:
В списке Network devices using DPDK-compatible driver перечислены устройства, привязанные к совместимому с DPDK драйверу. В списке Network devices using kernel driver — устройства со стандартными драйверами ядра. Текущий драйвер указан в поле drv= . Доступные драйвера перечислены в поле unused= . Отображаются только драйвера, загруженные в системе.
Если нужный драйвер не загружен, загрузить через modprobe . Например, для загрузки драйвера vfio-pci :
Сопоставить имя устройства (например, eth0 или enp3s0f0 ) и его PCI-адрес можно через поле if= в выводе dpdk-devbind .
Рекомендуется привязывать все устройства одной командной dpdk-devbind . Для работы с vfio-pci все порты одной карты должны быть привязаны к одному драйверу. Например, для привязки устройств 06:00.0 и 06:00.1 к драйверу vfio-pci :
Если команда привязки выполнилась без ошибкок, драйвер можно использовать. Устройство, привязанное к специальному драйверу, пропадает из системы (вывод ip link и т.п.). Привязка работает до перезагрузки, автоматическую привязку можно настроить при установке MITIGATOR.
Внимание. Устройства, отмеченные в списке **Active** , имеют IP-адрес. Обычно это порт, через которой идет доступ к машине по SSH, поэтому скрипт не позволяет менять драйвер таким устройствам.
Автоматическая загрузка модуля ядра
Если нужный модуль ядра не загружается по умолчанию при старте системы, его загрузку можно включить через /etc/modules-load.d . Например, для загрузки vfio-pci :
Модуль vfio-pci
Модуль vfio-pci входит в состав ядра Linux. Необходим для работы DPDK с сетевыми картами. Требует поддержки процессором виртуализации ввода-вывода (Intel VT-d или AMD-V). Включается в BIOS соответствующими настройками (например, “VT-d”, “Intel Virtualization Technology”, “SVM”, “AMD-V”, “AMD Virtualization”, “IOMMU”).
В параметрах ядра необходимо добавить опции (например, через GRUB):
- Для платформ Intel: intel_iommu=on iommu=pt ,
- Для платформ AMD: iommu=pt .
Проверить наличие виртуализации:
Проверить наличие IOMMU:
Модуль uio_pci_generic
Модуль uio_pci_generic входит в состав ядра Linux. Используется вместо vfio-pci , если тот не поддерживается системой или по какой-то причине не работает.
Модуль igb_uio
Модуль igb_uio может быть использован, как альтернатива другим модулям, если они не работают.
- Debian 10: apt install -y dpdk-igb-uio-dkms
- Debian 11: apt install -y dpdk-kmods-dkms
Hugepages
Для работы MITIGATOR необходимы настроенные hugepages (большие страницы памяти). Платформой могут поддерживаться hugepages разных размеров (2 МБ, 1 ГБ), рекомендуется настраивать страницы большего размера.
Необходимое количество hugepages зависит желаемого количества политик защиты. Рекомендуется отводить на hugepages 50-75% от общего объема памяти.
1 GB hugepages
Рекомендуется использовать hugepages размером 1 ГБ, если поддерживаются платформой. Их можно выделить только при загрузке системы.
Настраивается опциями в параметрах ядра. Пример для выделения 64-х 1 ГБ страниц:
2 MB hugepages
Hugepages размером 2 МБ можно настраивать без перезагрузки системы.
Пример выделения 2048 страниц по 2 МБ:
Пример настройки выделения при загрузке системы:
Docker
Установить Docker и Docker Compose, следуя официальной документации по установке для вашей ОС:
Следует устанавливать Docker Compose версии v1. Работоспособность MITIGATOR с Docker Compose версии v2 не гарантируется.
Системный уровень
Прежде всего, я хочу показать вам несколько способов узнать, сколько узлов NUMA у вас есть на системном уровне. Самый простой способ — использовать представление CPU в диспетчере задач. По умолчанию диспетчер задач покажет вам, сколько ядер процессора у вас доступно.

Как видно из рисунка, система сообщает количество доступных сокетов ЦП. Обычно количество сокетов ЦП соответствует количеству имеющихся у вас узлов NUMA. Если вы хотите подтвердить, вы можете изменить настройки отображения на представление NUMA.

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

В инструменте SysInternals также есть инструмент conrinfo.exe, который также получает количество узлов NUMA в вашей системе. Этот инструмент также сообщит вам время задержки между узлами NUMA.

Уровень SQL Server
Если у вас нет личного доступа к операционной системе, вы также можете использовать SQL Server, чтобы узнать, сколько узлов NUMA доступно в вашей системе. Самый простой способ — просмотреть журнал SQL Server. Потому что во время запуска SQL Server сообщит о количестве обнаруженных узлов NUMA.

Или вы можете запросить DMV sys.dm_os_memory_nodes, где SQL Server сообщит о доступных узлах памяти. Для каждого доступного узла NUMA SQL Srver создаст определенный узел памяти (за исключением идентификатора узла памяти 64, который используется для блокировки выделенного административного соединения (Dedicated Admin Connection)).

Здесь вы можете видеть, что этот SQL Server работает в системе NUMA с двумя узлами.
резюме
В этой статье вы увидели, что есть много способов узнать, сколько узлов NUMA доступно в вашей системе. Ваш SQL Server работает на нескольких системах узлов NUMA? Добро пожаловать, чтобы оставить сообщение!
How many NUMA Nodes do I have?
A question that I get asked very often during my various SQL Server Consulting engagements is on how many NUMA nodes SQL Server is running on. Therefore I want to show you in today‘s blog post a few ways and techniques to find out how many NUMA nodes your SQL Server has.
For a general (deep dive) introduction to NUMA I recommend that you read the NUMA Deep Dive Series from Frank Denneman.
Windows OS Level
First I want to show you a few ways at the Windows OS level how you can find out how many NUMA nodes you have. The easiest way is to use the CPU view of Windows Task Manager. With the default setup Task Manager shows you how many CPU cores you have available.

As you can see from the picture, Windows also reports here the number of CPU sockets that you have available. Normally the number of CPU sockets corresponds to the number of NUMA nodes you have. If you want to be sure you can also change the display settings to the NUMA view.

After changing that the Task Manager shows you how many NUMA nodes you have available – in my case 4 NUMA nodes.

There is also the coreinfo.exe tool from the SysInternals tools which also reports how many NUMA nodes you have in your system. And this tool also tells you the latency times between the individual NUMA nodes.

SQL Server Level
When you don’t have access to the Windows Server itself, you can also use SQL Server to find out how many NUMA nodes you have available on your system. The easiest way is to look into the SQL Server Log, because during the startup phase SQL Server reports how many NUMA nodes were detected.

Alternatively you can also query the DMV sys.dm_os_memory_nodes, where SQL Server reports the available Memory Nodes. For every available NUMA node SQL Server creates one dedicated Memory Node (besides Memory Node ID 64, which is always present for the Dedicated Admin Connection).
![]()
Here you can also see that this SQL Server is running on a two-node NUMA system.
Summary
As you have seen in this blog post there are many different ways to find out how many NUMA nodes you have available on your system. Please feel free to leave a comment on how many NUMA nodes you are running SQL Server on.