- Posted in: Admin-tips
Недавно на нескольких из наших серверов, обслуживающих миллионы посещений в сутки, мы достигли предела производительности дисковой подсистемы. Когда я начал анализировать методы, которыми можно исправить ситуацию, я обратил внимание, что на эти сервера имеют чипсеты 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 на ваших дисках, попробуйте эти патчи – они действительно стабильны.