Есть сервер БД (MySQL) с RAID-контроллером от Compaq, который принципиально не поддерживает кеширование записи. В связи с этим очень узким местом этой системы являются операции записи на диск.Гугление по поводу I/O кеша в Linux не дало никакой информации (возможно, я гуглил не по тем ключевым словам...)
Поэтому обращаюсь к сообществу со следующими вопросами:
Умеет ли I/O cache в ядре Linux (речь о ядре 2.6) кешировать не только операции чтения, но и операции записи? Если умеет - как включить? И как посмотреть, включено ли оно?
Если не умеет - есть ли какой-то программный кеш, который позволит включить кеширование записи на диск в ОЗУ?
Бесперебойник на сервере достаточно надежный, поэтому вопросы возможных катаклизмов при отложенной записи не актуальны.
ОЗУ на сервере более, чем достаточно (32 гига). Практически весь этот объем занимает именно кеш.
>Есть сервер БД (MySQL) с RAID-контроллером от Compaq, который принципиально не поддерживает
>кеширование записи.что за контроллер?
можно включить кэш диска/ов, для сокращения времени отклика при записи.
>>Есть сервер БД (MySQL) с RAID-контроллером от Compaq, который принципиально не поддерживает
>>кеширование записи.
>
>что за контроллер?Compaq Computer Corporation Smart Array 5i/532
>можно включить кэш диска/ов, для сокращения времени отклика при записи.
Подскажите, как. Или дайте ссылочку, где можно об этом почитать.
>>можно включить кэш диска/ов, для сокращения времени отклика при записи.
>
>Подскажите, как. Или дайте ссылочку, где можно об этом почитать.копай на тему sdparm и WCE
>
>>>можно включить кэш диска/ов, для сокращения времени отклика при записи.
>>
>>Подскажите, как. Или дайте ссылочку, где можно об этом почитать.
>
>копай на тему sdparm и WCEкопнул.
sdparm работает с дисками. в моем же случае в системе дисков не видно. а видно одно устройство - /dev/cciss/c0d0 (аппаратный RAID). Возможно, через него как-то можно "достучаться" до физических дисков - но sdparm здесь вряд ли поможет...
>видно. а видно одно устройство - /dev/cciss/c0d0 (аппаратный RAID).__Он__ и есть "диск". fdisk или lvm в руки и вперёд:
$ cat /proc/driver/cciss/cciss0
cciss0: HP Smart Array P410i Controller
Board ID: 0x3245103c
Firmware Version: 1.66
IRQ: 62
Logical drives: 2
Current Q depth: 0
Current # commands on controller: 0
Max Q depth since init: 16
Max # commands on controller since init: 31
Max SG entries since init: 31
Sequential access devices: 0cciss/c0d0: 146.77GB RAID 1(1+0)
cciss/c0d1: 733.90GB RAID 5
$ cat /proc/partitions
major minor #blocks name104 0 143338560 cciss/c0d0
104 1 248976 cciss/c0d0p1
104 2 143082922 cciss/c0d0p2
104 16 716708248 cciss/c0d1
254 0 499712 dm-0
254 1 5079040 dm-1
254 2 5079040 dm-2
254 3 974848 dm-3
254 4 24608768 dm-4
254 5 9768960 dm-5
254 6 262144000 dm-6
254 7 41943040 dm-7
$ _>Возможно, через
>него как-то можно "достучаться" до физических дисков - но sdparm здесь
>вряд ли поможет...Может логи массива попробовать почиать?
$ apt-cache search compaq array
array-info - command line tool reporting RAID status for several RAID types
arrayprobe - command line HP (Compaq) SmartArray status checker
cpqarrayd - monitoring tool for HP (Compaq) SmartArray controllers
$ _
>>видно. а видно одно устройство - /dev/cciss/c0d0 (аппаратный RAID).
>__Он__ и есть "диск".Если бы вы прочитали весь тред, а не только последнюю фразу, вы бы заметили, что речь идет о _физических_ накопителях, подключенных к контроллеру. Именно на физических накопителях мне посоветовали попробовать включить кеширование записи.
О том, что "логические" диски RAID'а являются "дисками" в терминологии Линукса, я в курсе :)
>>Возможно, через
>>него как-то можно "достучаться" до физических дисков - но sdparm здесь
>>вряд ли поможет...
>
>Может логи массива попробовать почиать?Как это поможет включить кеш записи на физических дисках?
>$ apt-cache search compaq array
>array-info - command line tool reporting RAID status for several RAID types
>
>arrayprobe - command line HP (Compaq) SmartArray status checker
>cpqarrayd - monitoring tool for HP (Compaq) SmartArray controllersНасколько я понял - все они только статус показывают.
Я нашел единственную (пока) утиль - hpacucli - HP Command Line Array Configuration Utility, позволяющую "рулить" устройством. Но и она рулит только контроллером, рулить отдельными физическими дисками она не позволяет.
>Я нашел единственную (пока) утиль - hpacucli - HP Command Line Array
>Configuration Utility, позволяющую "рулить" устройством. Но и она рулит только контроллером,
>рулить отдельными физическими дисками она не позволяет.кэшем дисков позволяет .. см. документацию
=> set target ctrl slot=1
=> showSmart Array P400 in Slot 1
Bus Interface: PCI
Slot: 1
Serial Number: PAFGK0L9VWA2Z1
Cache Serial Number: PA82C0J9VWA0EZ
RAID 6 (ADG) Status: Disabled
Controller Status: OK
Chassis Slot:
Hardware Revision: Rev E
Firmware Version: 5.20
Rebuild Priority: Medium
Expand Priority: Medium
Surface Scan Delay: 15 secs
Post Prompt Timeout: 0 secs
Cache Board Present: True
Cache Status: OK
Accelerator Ratio: 100% Read / 0% Write
Drive Write Cache: Disabled
Total Cache Size: 256 MB
No-Battery Write Cache: Disabled
Battery/Capacitor Count: 0
SATA NCQ Supported: True
>
>>Я нашел единственную (пока) утиль - hpacucli - HP Command Line Array
>>Configuration Utility, позволяющую "рулить" устройством. Но и она рулит только контроллером,
>>рулить отдельными физическими дисками она не позволяет.
>
>кэшем дисков позволяет .. см. документациюДайте, плиз, ссылочку!
>=> set target ctrl slot=1
>=> show=> set target ctrl slot=0
"controller slot=0"
=> show
Smart Array 5i in Slot 0
Bus Interface: PCI
Slot: 0
RAID 6 (ADG) Status: Disabled
Controller Status: OK
Chassis Slot:
Hardware Revision: Rev B
Firmware Version: 2.76
Rebuild Priority: Medium
Expand Priority: Medium
Surface Scan Delay: 15 sec
Cache Board Present: True
Cache Status: OK
Accelerator Ratio: 100% Read / 0% Write
Read Cache Size: 16 MB
Write Cache Size: 0 MB
Total Cache Size: 16 MB
Battery Pack Count: 0
SATA NCQ Supported: FalseНи слова упоминания о физических дисках...
>>
>>>Я нашел единственную (пока) утиль - hpacucli - HP Command Line Array
>>>Configuration Utility, позволяющую "рулить" устройством. Но и она рулит только контроллером,
>>>рулить отдельными физическими дисками она не позволяет.
>>
>>кэшем дисков позволяет .. см. документацию
>
>
>Ни слова упоминания о физических дисках...Firmware то последнее прошито?
судя по ХП-шному сайту последняя прошивка для 5i
2.76 от 7 июл 2008
и наскольку я помню? с какого-то вмемени стали меняться прошивки и на дисках.
Firmware CD 3.54 (C) от 5 янв 2007
можно попробовать накатить вдруг какие опции появятся...
>[оверквотинг удален]
>>>>рулить отдельными физическими дисками она не позволяет.
>>>
>>>кэшем дисков позволяет .. см. документацию
>>
>>
>>Ни слова упоминания о физических дисках...
>
>Firmware то последнее прошито?
>судя по ХП-шному сайту последняя прошивка для 5i
> 2.76 от 7 июл 2008Она и прошита. Я ведь показал вывод 'show'
>и наскольку я помню? с какого-то вмемени стали меняться прошивки и
>на дисках.
>Firmware CD 3.54 (C) от 5 янв 2007
>можно попробовать накатить вдруг какие опции появятся...Ох, не люблю я на боевых серваках прошивки менять без особой на то потребности...
покажите настройки mysql (и версии, версии назовите!).
>покажите настройки mysql (и версии, версии назовите!).Версии чего? Ядро - 2.6.31-gentoo-r10. Мускуль - 5.0.60 (как раз сейчас обновляю до 5.0.90).
Но вопрос ведь был не про Мускуль! Вылизыванием Мускульного конфига мне еще предстоит заняться. Но перед этим я хочу устранить первое узкое место - запись на диск.
Так все-таки, умеет ли Линуховое ядро кешировать операции записи на диск?
>>покажите настройки mysql (и версии, версии назовите!).
>
>Так все-таки, умеет ли Линуховое ядро кешировать операции записи на диск?конечно умеет (раз с дисками засада) а надоли :-)
только двойное кеширования для баз это лишнее, лучше без кеша прямо на диск.
можно поиграться с опциями монтирования FS.
смотрите на счет опций sync|async для ext2
osyncisdsync для xfs
...
>>Так все-таки, умеет ли Линуховое ядро кешировать операции записи на диск?
>конечно умеет (раз с дисками засада) а надоли :-)Я считаю, что надо, т.к. RAID (в нашем конкретном случае) крайне медленный. В перспективе Мускуль переедет на более подходящее железо, но до этого нужно дожить (на том, что есть).
Если я ошибаюсь, и кеширование записи на диск лучше не делать - расскажите, почему. Про надежный (тьфу-тьфу-тьфу) бесперебойник я писал еще в 1-м посте.
>только двойное кеширования для баз это лишнее, лучше без кеша прямо
>на диск.Это я понял (с учетом ответа от anonymous). Заниматься кешированием должен либо сам Мускуль, либо ядро, но не оба сразу.
>можно поиграться с опциями монтирования FS.
>смотрите на счет опций sync|async для ext2ОК, спасибо.
(Я не тормоз. Был занят другими задачами, более срочными, поэтому две недели не возвращался к этой теме)
>Я считаю, что надо, т.к. RAID (в нашем конкретном случае) крайне медленный.
>В перспективе Мускуль переедет на более подходящее железо, но до этого
>нужно дожить (на том, что есть).А какой у Вас рейд собран? 5-ый, 10-ый ? Если пятый, то кеш ОС вам ничем не поможет
>>Я считаю, что надо, т.к. RAID (в нашем конкретном случае) крайне медленный.
>>В перспективе Мускуль переедет на более подходящее железо, но до этого
>>нужно дожить (на том, что есть).
>
>А какой у Вас рейд собран? 5-ый, 10-ый ? Если пятый, то
>кеш ОС вам ничем не поможетИменно 5-й. Объясните, почему Линуховый кеш (на запись) не поможет?
>>>Я считаю, что надо, т.к. RAID (в нашем конкретном случае) крайне медленный.
>>>В перспективе Мускуль переедет на более подходящее железо, но до этого
>>>нужно дожить (на том, что есть).
>>
>>А какой у Вас рейд собран? 5-ый, 10-ый ? Если пятый, то
>>кеш ОС вам ничем не поможет
>
>Именно 5-й. Объясните, почему Линуховый кеш (на запись) не поможет?А чем он поможет? Вы же сами говорите, что у Вас самое меленное звено - диски. 5-й рейд очень плох на случайные опреции записи, размер которых меньше всей полоски, так как при этом необходимо прочитать всю полоску целиком для перерасчета парити. Т.е. если у Вас пришла запись даже на один диск, контроллер прочитает весь страйп (количество операций равно количеству дисков), пересчитает парити и должен потом записать изменяемые данный и новую парити. При наличие кеша, контроллер пытается оптимизировать и чтение и запись с дисков, храня временные данные.
>
>А чем он поможет? Вы же сами говорите, что у Вас самое
>меленное звено - диски. 5-й рейд очень плох на случайные опреции
>записи, размер которых меньше всей полоски, так как при этом необходимо
>прочитать всю полоску целиком для перерасчета парити.не обязательно, кстати
http://www.redbooks.ibm.com/redpapers/pdfs/redp4484.pdf
>>покажите настройки mysql (и версии, версии назовите!).
>
>Версии чего? Ядро - 2.6.31-gentoo-r10. Мускуль - 5.0.60 (как раз сейчас обновляю
>до 5.0.90).
>
>Но вопрос ведь был не про Мускуль! Вылизыванием Мускульного конфига мне еще
>предстоит заняться. Но перед этим я хочу устранить первое узкое место
>- запись на диск.почитайте про innodb_flush_method
>Так все-таки, умеет ли Линуховое ядро кешировать операции записи на диск?
умеет. но если приложение пользуется O_DIRECT, то записи идут мимо кэша. поэтому нужно знать действующие настройки приложения, логично?
>почитайте про innodb_flush_methodПочитал. Признаюсь честно - понял далеко не все. Понял только, что этот параметр управляет кешированием файлов журнала и данных, но в чем суть отличий не разобрался (не хватает знаний - нужно "курить" файловые операции на уровне ядра - но времени пока нет).
Параметр innodb_flush_method отсутствует в конфиге и имеет "пустое" значение, если посмотреть через "SHOW VARIABLES;".
>>Так все-таки, умеет ли Линуховое ядро кешировать операции записи на диск?
>умеет. но если приложение пользуется O_DIRECT, то записи идут мимо кэша.
> поэтому нужно знать действующие настройки приложения, логично?Конечно логично! Но я-то этого не знал...
Поэтому гораздо логичнее было бы сразу спросить про этот параметр :)
советуют
innodb_flush_method=O_DIRECT
если вообще используется InnoDB и есть raid адаптер с батарейкой
O_DIRECT исклячает двойное кэширование, т.к. СУБД сама занимается кэшированием и ей не нужен кэш ОС, поэтому нет нужды заморачиваться на файловом кэше.
Ну а вообще там же всё сложнее - какие-то записи обязательно должны быть записаны на диск (например записи в лог файлах) и никакое кэширование здесь не поможет - это требования для обеспечения косистентости и сохранности данных в базе.удачи!
да, не контролере raid'а (если с батарейкой) обязательно включите write cache :) ещё базы любят память - innodb_buffer_pool_size - 70-80% от общего объёма памяти
>да, не контролере raid'а (если с батарейкой) обязательно включите write cache :)
>ещё базы любят память - innodb_buffer_pool_size - 70-80% от общего объёма
>памятиВ моем 1-м посте, в 1-й строке как раз написано о том, что контроллер не поддерживает write cache
>>да, не контролере raid'а (если с батарейкой) обязательно включите write cache :)
>>ещё базы любят память - innodb_buffer_pool_size - 70-80% от общего объёма
>>памяти
>
>В моем 1-м посте, в 1-й строке как раз написано о том,
>что контроллер не поддерживает write cacheТогда советую проапгрейдится до Smart Array 5i Plus
Q7. What is the difference between the Smart Array 5i and the Smart Array 5i Plus?
A7. The Smart Array 5i Plus is the upgraded version of the Smart Array 5i now with 64MB Cache and the capability to add battery backed write cache.
>>>да, не контролере raid'а (если с батарейкой) обязательно включите write cache :)
>>>ещё базы любят память - innodb_buffer_pool_size - 70-80% от общего объёма
>>>памяти
>>
>>В моем 1-м посте, в 1-й строке как раз написано о том,
>>что контроллер не поддерживает write cache
>
>Тогда советую проапгрейдится до Smart Array 5i PlusА по существу вопроса что-то можете посоветовать?
>Умеет ли I/O cache в ядре Linux (речь о ядре 2.6) кешировать не только операции чтения, но и операции записи? Если умеет - как включить? И как посмотреть, включено ли оно?умеет и ничего включать не надо, как конкретно это работает зависит от используемой ФС и приложения.
>Если не умеет - есть ли какой-то программный кеш, который позволит включить кеширование записи на диск в ОЗУ?
все что приходит на ум - это tmpfs, но это не совсем то.
в вашем случае, я бы занялся тюнингом mysql'а, т.к. mysql имеет свою, систему кэширования, и может обходится без кэша ОС вовсе.
>Есть сервер БД (MySQL) с RAID-контроллером от Compaq, который принципиально не поддерживает
>кеширование записи. В связи с этим очень узким местом этой системы
>являются операции записи на диск.Может быть, он просто не включается без батарейки?
По теме, после прочтения комментариев:1. НЕ используйте 5-й рейд, сделайте десятый. Это обязательно, и сразу даст Вам очевидный эффект
2. Не делайте этого(!) не отрепетировав схему восстановления из бэкапов, или не проклинайте меня потом, пожалуйста:http://wiki.centos.org/HowTos/Disk_Optimization
Конечно, не Gentoo, но советы дельные
3. Как уже сказали, тюньте innodb
4. Может лучше вообще выкинуть этот недоконтроллер и сделать рейд через mdraid? Он гораздо быстрее, чем многие "православные" аппаратные контроллеры с кэшем, защищенным батарейкой, но слабым чипом для обсчета операций
Сделайте десятый рейд через md, это может сразу же облегчить жизнь в разы