Включение поддержки NCQ Queing на чипсетах ICH7 Chipsets под Linux
Недавно на нескольких из наших серверов, обслуживающих миллионы посещений в сутки, мы достигли предела производительности дисковой подсистемы. Когда я начал анализировать методы, которыми можно исправить ситуацию, я обратил внимание, что на эти сервера имеют чипсеты ICH7 и SATA-диски Seagate с поддержкой NCQ… Но при ближайшем рассмотрении я увидел, что поддержка NCQ не включена на этих серверах с IDE-драйвером ata_piix. Итак, я решил было бы отлично включить поддержку NCQ и взглянуть, как это повлияет на производительность (было очевидно, что она должна увеличиться)…
Беглый поиск показал, что для начала нам необходимо включить режим совместимости AHCI в BIOS сервера для того, чтобы использовать SATA-драйвер ahci из последней версии ядра Linux 2.6. После включения AHCI я увидал в логах сервера следующее:
ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 4 ports 3 Gbps 0xf impl SATA mode ahci 0000:00:1f.2: flags: 64bit ncq pm led clo pio slum part ata1: SATA max UDMA/133 cmd 0xFFFFC20000022500 ctl 0x0 bmdma 0x0 irq 66 ata2: SATA max UDMA/133 cmd 0xFFFFC20000022580 ctl 0x0 bmdma 0x0 irq 66 ata3: SATA max UDMA/133 cmd 0xFFFFC20000022600 ctl 0x0 bmdma 0x0 irq 66 ata4: SATA max UDMA/133 cmd 0xFFFFC20000022680 ctl 0x0 bmdma 0x0 irq 66 scsi0 : ahci ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) ata1.00: ATA-7, max UDMA/133, 586072368 sectors: LBA48 ata1.00: ata1: dev 0 multi count 16 ata1.00: configured for UDMA/133 scsi1 : ahci ...... Vendor: ATA Model: ST3300622AS Rev: 3.AA Type: Direct-Access ANSI SCSI revision: 05 Vendor: ATA Model: ST3300622AS Rev: 3.AA Type: Direct-Access ANSI SCSI revision: 05 Vendor: ATA Model: ST3300622AS Rev: 3.AA Type: Direct-Access ANSI SCSI revision: 05 Vendor: ATA Model: ST3300622AS Rev: 3.AA Type: Direct-Access ANSI SCSI revision: 05 ......
Как вы видите – ни одного упоминания об NCQ для SATA-дисков не наблюдалось… Но официальная страница библиотеки libata заявляет, что поддержка должна быть там!
Более глубокие исследования показали, сто libata в ядре linux 2.6 не содержит поддержки NCQ для AHCI-чипсетов.
Тогда я решил копнуть глубже и найти вохможность поставить новую версию libata на linux 2.6… К сожалению, официальный сайт libata сожержал только устаревшие патчи для linux 2.6. После долгих поисков я нашел сайт с патчами libata для самого свежего ядра 2.6, который позволял получить последнюю версию библиотеки libata и включить поддержку NCQ на моих дисках! Этот сайт – домашнаяя страница Tejun Heo – Корейского хокера ядра, который поддерживает набор патчей libata-tj-stable.
После применения описанного патча и перезагрузки я с удовлетворением увидел следующие сообщения насчет каналов sata-контроллера:
... ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) ata1.00: ATA-7, max UDMA/133, 586072368 sectors: LBA48 NCQ (depth 31/32) ata1.00: ata1: dev 0 multi count 16 ata1.00: configured for UDMA/133 ...
Итак, тетерь поддержка NCQ включена на наших дисках и мы получили дополнительные 15-30% дополнительной производительности (я вижу ее на графиках трафика, потому никаких глубоких тестов не проводил – результат оказался очевиден). Итак, если вы имеете ICH-контроллер и хотите получить поддержку NCQ на ваших дисках, попробуйте эти патчи – они действительно стабильны.
Related posts:
- Обзор Неофициальных Репозитариев Пакетов Для Дистрибутива Debian GNU/Linux
- Как настроить IP-IP-тунель между FreeBSD и Linux
- Настройка и оптимизация Red Hat Enterprise Linux для баз данных Oracle 9i и 10g
- Linux Traffic Shaping За 5 Минут При Помощи htb.init
- Настройка Nginx для поддержки PHP при помощи FastCGI

9 Responses to this entry
В основном везде линухи, как я понимаю? Фри практически нету?
Ну, почему же? Есть и FreeBSD и Solaris
Только всему свое место
Подскажите, что может быть в моем случае – 2.6.17 с патчами от gentoo (патчи на drm i810 и i830).
При работе с диском жудкие тормоза в системе. А уж если в своп полезем, то ждать реакции системы на пользовательский запрос придется долго.
Файл размером 600-700Мб на ext3 удаляется секунд 5-10. На ReiserFS ситуация не лучше.
Мамка интеловская на i915, диск samsung s-ata.
Пропускная по hdparam на уровне s-ata2.
Но при интенсивной работе приложения с диском вся система в глубоком ступоре.
Что это может быть?
Пставил ядро 2.6.16-rc3-git7. Появилась запись в логе LBA48 NCQ (depth 0/32).
Что означает запись “(depth 0/32)”, и почему у меня “0″, а не “31″?
Но при копировании файла внутри одного раздела (из каталога в каталог) процессор загружается на 100%
SATA Native Command Queueing support
This is automatically enabled if both the controller and device
support NCQ. libata supports maximum of 31 concurrent commands. If
NCQ is enabled you should be able to see a message like the following
during device initialization.
ata1.00: ATA-7, max UDMA7, 312581808 sectors: LBA48 NCQ (depth 31/32)
If the device supports NCQ but the host doesn’t, you’ll get
ata8.00: ATA-7, max UDMA7, 312581808 sectors: LBA48 NCQ (depth 0/32)
Queue depth can be adjusted by
# echo 16 > /sys/class/scsi_device/0:0:0:0/device/queue_depth
But, there aren’t many good reasons to mess with queue depth.
Thanks a lot.
а сами графики производительности где?
Графиков нету. Единственными графиками для меня являются данные MRTG, который показывал умирающую тачку при определенной нагрузке, а теперь даже при нагрузке на 50% больше ему значительно легче
Задача поста была не в том, чтобы получить точные оценки, а в том, чтобы показать, как можно получить прирост в производительности просто используя все возможности своего железа.
[...] On the Intel side a techreport review lists the Intel ICH7R and ICH8R as the only chipsets with ahci support and that none of the nVidia chipsets (5xx and 6xx series) do so. Though other reports have listed the 570 as having ahci. Intel’s ICH8, ICH7, ICH6, ICH5, ICH5R all do not support AHCI but the ICH7DH does according to Intel relayed on the linux-ide mailing list (which also links to a blog post about getting NCQ to work in linux) The ATI SB600 supports AHCI. [...]