Управление NCQ на SATA-винчестерах в GNU/Linux

Впервые опубликовано 2008-01-11 (в составе GNU/Linux: разное)

SATA NCQ (Native Command Queueing) – это поддерживаемая многими жёсткими дисками и контроллерами функция, позволяющая диску выполнять запросы ввода вывода не в порядке их поступления, а в более оптимальном, руководствуясь (к примеру) взаимным расположением головки чтения/записи и требуемых секторов.

При условии поддержки диском и контроллером, NCQ активируется автоматически. Для того, чтобы в GNU/Linux отключить NCQ для какого-либо из жёстких дисков, нужно выставить параметр queue_depth (глубина очереди команд) для этого диска в 1. По-умолчанию (со включенным NCQ), этот параметр чаще всего равен 31.

Просмотр состояния NCQ

Кратко:

echo -n "NCQ depths: " ; cat /sys/block/sd?/device/queue_depth | tr "\n" " " ; echo

…или чуть более подробно:

echo "NCQ depths:"; find /sys/block/sd? -maxdepth 0 -exec sh -c "echo -n {} =\ ; cat {}/device/queue_depth" \;

Управление NCQ

Для управления этим параметром можно воспользоваться ключом -Q программы hdparm. Кроме того, можно изменять его значение “вручную”, записывая нужные значения в соответствующие файлы в /sys.

Выключить NCQ для /dev/sda:

echo 1 > /sys/block/sda/device/queue_depth

Включить NCQ для /dev/sda:

echo 31 > /sys/block/sda/device/queue_depth

Отключить NCQ для всех дисков:

find /sys/block/sd?/device/queue_depth -exec sh -c "echo 1 > {}" \;

Включить NCQ для всех дисков:

find /sys/block/sd?/device/queue_depth -exec sh -c "echo 31 > {}" \;

ncq.txt · Last modified: 2013-10-08 18:34 UTC by rm