Итак, имеем в распоряжении новый сервер следующего конфига:
- 2хXeon E5630
- RAM 48 Gb
- SAS адаптер LSILogic 1064
- 3 Seagate SAS 10000 rpm
- 2 Seagate SAS 15000 rpm
- 1 Seagate SAS 10000 rpm 600Gb
- 2 Toshiba SATA по 1 Tb.
На сервер установлена
операционная система FreeBSD 8.1.
Процесс установки прошел штатно, все в норме, не считая некоторой ругани на
ACPI.
Я предпочитаю не ставить дерево портов с диска, а качать из сети свежее. После установки портов, кто не в курсе:
server /# portsnap fetch extract
смотрим
dmesg:
server /# dmesg | grep mpt
mpt0: port 0xc000-0xc0ff mem 0xdf3ec000-0xdf3effff,0xdf3f0000-0xdf3fffff irq 16 at device 0.0 on pci5
mpt0: [ITHREAD]
mpt0: MPI Version=1.5.20.0
mpt0: Capabilities: ( RAID-0 RAID-1E RAID-1 )
mpt0: 0 Active Volumes (2 Max)
mpt0: 0 Hidden Drive Members (14 Max)
da0 at mpt0 bus 0 scbus0 target 11 lun 0
da1 at mpt0 bus 0 scbus0 target 12 lun 0
da2 at mpt0 bus 0 scbus0 target 15 lun 0
da3 at mpt0 bus 0 scbus0 target 16 lun 0
da4 at mpt0 bus 0 scbus0 target 17 lun 0
da5 at mpt0 bus 0 scbus0 target 18 lun 0
da6 at mpt0 bus 0 scbus0 target 19 lun 0
SMP: AP CPU #1 Launched!da7 at mpt0 bus 0 scbus0 target 20 lun 0
mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x0f Depth 128
mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x0f Depth 128
mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x0f Depth 128
mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x10 Depth 127
mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x10 Depth 127
Последние 3 строки тут явно лишние. Зпись
Target 0x0f — в десятичном представлении 15, а Target 0x0f — 16, смотрим чуть выше
target 15 и
target 16, это у нас диски
da2 и
da3. В моем случае это SAS диски 10к. Те-же самые сообщения можно получить и для других дисков, если дать на них соответствующую нагрузку.
Воспроизводится довольно легко:
server #/ find / -name "*"
Теперь можно посмотреть, кто у нас там
da2 и
da3:
server /# dmesg | grep -E "da2|da3"
da2 at mpt0 bus 0 scbus0 target 15 lun 0
da2: Fixed Direct Access SCSI-5 device
da2: 300.000MB/s transfers
da2: Command Queueing enabled
da2: 140014MB (286749488 512 byte sectors: 255H 63S/T 17849C)
da3 at mpt0 bus 0 scbus0 target 16 lun 0
da3: Fixed Direct Access SCSI-5 device
da3: 300.000MB/s transfers
da3: Command Queueing enabled
da3: 140014MB (286749488 512 byte sectors: 255H 63S/T 17849C)
Trying to mount root from ufs:/dev/da2s1a
Это у нас 2 диска
SEAGATE, модель
ST9146803SS.
Далее если интересно, можно найти на сайте производителя спецификацию на данную модель хардов, скачать ее и почитать.
Standard features:
128 - deep task set (queue)
Если я правильно понял, это и есть значение, которое превышает
FreeBSD. То есть мы пытаемся запихнуть в очередь больше, чем определено настройками.
Проверяем:
server /# camcontrol tags da2 -v
(pass2:mpt0:0:15:0): dev_openings 255
(pass2:mpt0:0:15:0): dev_active 0
(pass2:mpt0:0:15:0): devq_openings 255
(pass2:mpt0:0:15:0): devq_queued 0
(pass2:mpt0:0:15:0): held 0
(pass2:mpt0:0:15:0): mintags 2
(pass2:mpt0:0:15:0): maxtags 255
Ставим новое значение, чуть меньше чем написано в сообщении
dmesg:
server /# camcontrol tags da2 -N 126
(pass2:mpt0:0:15:0): tagged openings now 126
(pass2:mpt0:0:15:0): device openings: 126
После этого можно снова попробовать воспроизвести ситуацию, однако новых сообщений о переполнении очереди в dmesg не появится.
Что-бы настройки вступали в силу, при загрузке FreeBSD, достаточно прописать в файл
/etc/rc.conf строку для каждого диска:
camcontrol tags da2 -N 126
Покурив интернеты, более простого решения не нашел.