Управление 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 > {}" \;