Вопрос или проблема
У меня есть сервер OEL, подключенный по оптоволокну к SAN-системе NetApp. Как я могу увидеть глубину очереди, которую видит ОС?
Вывод команды lspci
:
05:00.0 Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)
05:00.1 Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)
08:00.0 Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)
08:00.1 Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)
Вывод команды lsmod
:
qla2xxx 1262209 352
scsi_transport_fc 83145 1 qla2xxx
scsi_mod 199641 15 be2iscsi,ib_iser,iscsi_tcp,bnx2i,libcxgbi,libiscsi2,scsi_transport_iscsi2,scsi_dh,sr_mod,sg,qla2xxx,scsi_transport_fc,libata,cciss,sd_mod
ls /sys/class/fc_host/host*
/sys/class/fc_host/host3:
device issue_lip port_id port_state speed subsystem supported_speeds system_hostname uevent
fabric_name node_name port_name port_type statistics supported_classes symbolic_name tgtid_bind_type
/sys/class/fc_host/host4:
device issue_lip port_id port_state speed subsystem supported_speeds system_hostname uevent
fabric_name node_name port_name port_type statistics supported_classes symbolic_name tgtid_bind_type
/sys/class/fc_host/host5:
device issue_lip port_id port_state speed subsystem supported_speeds system_hostname uevent
fabric_name node_name port_name port_type statistics supported_classes symbolic_name tgtid_bind_type
/sys/class/fc_host/host6:
device issue_lip port_id port_state speed subsystem supported_speeds system_hostname uevent
fabric_name node_name port_name port_type statistics supported_classes symbolic_name tgtid_bind_type
На моем сервере NETAPP:
ls /proc/scsi/qla2xxx
1
ls /proc/scsi/qla2xxx/1 | grep -i -A1 -B1 "queue depth"
Total number of interrupts = 30686605
Device queue depth = 0x20
Number of free request entries = 1842
Таким образом, x20 это 32 в десятичном формате,
это то число, которое вы ищете.
О расчетах для NETAPP можно почитать здесь:
https://library.netapp.com/ecmdocs/ECMP1196793/html/GUID-A055B184-0876-4376-9C75-35FE8C9BE832.html
РЕДАКТИРОВАТЬ:
другой способ посмотреть:
cat /sys/module/qla2xxx/parameters/ql2xmaxqdepth
Самый простой способ
cat /sys/block/<sdX>/device/queue_depth
А как я могу это изменить?
echo 1024 > /sys/block/sda/device/queue_depth
bash: echo: ошибка записи: Недопустимый аргумент
Ответ или решение
Операционная система Oracle Enterprise Linux (OEL) обладает различными методами для мониторинга и управления глубиной очереди. Это важный параметр для настройки и оптимизации производительности ваших систем хранения данных на SAN, таких как NetApp. Давайте разберем, как именно можно проверить текущую глубину очереди, а также некоторые аспекты конфигурации, которые вам стоит учитывать.
Теория (Theory)
Глубина очереди (queue depth) определяет, сколько команд ввода-вывода может находиться в очереди на обработку устройством одновременно. Это ключевой параметр, влияющий на производительность Fibre Channel Host Bus Adapter (HBA) и ваших систем хранения данных. Глубину очереди необходимо точно настраивать, чтобы получить максимальную производительность от хранилища, предотвращая как перегрузки ввода-вывода, так и простои от недозагрузки.
Пример (Example)
В вашем случае сервер с OEL подключен через Fibre Channel к хранилищу NetApp через адаптеры QLogic ISP2532. Эти адаптеры поддерживаются драйвером qla2xxx
, который предоставляет информацию о текущих настройках глубины очереди.
На вашем сервере доступен следующий способ проверки глубины очереди:
-
Проверка через /proc/scsi/qla2xxx:
Выполните командуcat /proc/scsi/qla2xxx/1 | grep -i -A1 -B1 "queue depth"
для получения текущей глубины очереди. Как видно из примера, "Device queue depth = 0x20", что равно десятичному 32. -
Чтение параметров модуля ядра:
Используйтеcat /sys/module/qla2xxx/parameters/ql2xmaxqdepth
для получения значения максимальной глубины очереди, установленной для модуля qla2xxx. -
Проверка через sysfs для специфицированного блочного устройства:
Используйтеcat /sys/block/<sdX>/device/queue_depth
, заменяя<sdX>
на соответствующий идентификатор вашего устройства, чтобы получить текущую настройку глубины очереди для конкретного блочного устройства.
Применение (Application)
Теперь, когда вы знаете, как проверить текущую глубину очереди, важно также понимать, как изменить это значение для оптимизации под ваши конкретные потребности. Однако стоит учесть, что глубина очереди не может быть изменена на произвольное значение; система может возвращать ошибку, как в вашем примере "echo: write error: Invalid argument", если вы пытаетесь внести неподдерживаемые изменения.
Чтобы изменить глубину очереди, выполните следующие шаги:
-
Удостоверьтесь, что ваш параметр поддерживается системой:
Перед тем как изменять значение, рекомендуется проверить документацию вашего устройства и конкретные ограничения хранилища. Некоторые значения могут быть ограничены как самим адаптером, так и конфигурацией хранилища. -
Изменение глубины очереди:
Используйте командуecho 32 > /sys/block/sda/device/queue_depth
, заменяя32
на ваше целевое значение иsda
на ваш диск, чтобы изменить параметр. -
Проверка изменений:
После внесения изменений вы должны проверить новое значение глубины очереди, чтобы убедиться в успешности операции.
Заключение
Оптимальная настройка глубины очереди требует учета множества факторов, таких как поддержка устройства, потребности в производительности и спецификации хранилища. Тщательная настройка и мониторинг этих параметров позволяет значительно повысить производительность и надежность системы хранения данных.
Настоятельно рекомендуется провести предварительные тесты в контролируемой среде перед применением изменений на производственных системах, чтобы избежать непредвиденных последствий и убедиться в целесообразности выбранных настроек.