(эссе с вопросами, и без ответов)
Когда я решил проверить производительность нового рейда и прилагающихся к нему 72 дисков, мне казалось, что я знаю про иопсы всё. Сейчас я понимаю, что ничего не понимаю.
Итак, IOPS = i/o (operations) per second. Число операций ввода-вывода в секунду.
Померять IOPSы очень легко — достаточно запустить почти любой монитор производительности. perfmon в виндах, atop в линуксе. Сколько раз конкретный диск сумел ответить за секундну на запросы «записать»/«прочитать», столько и IOPS'ов.
Но когда говорят «иопсы», обычно подразумевают не текущий показатель, а максимальный, который способен выдать [диск|рейд|полка].
И вот тут-то нас ждёт величайшее удивление.
Не буду голословным, вот результаты измерения.
Это один и тот же диск. Один и тот же объём данных. Что же меняется, откуда эта ошеломляющая разница почти на два порядка?
Эта разница — в порядке выполнения запросов. Первое — линейная запись. Второе — произвольная, блоками по 4к. Записан строго один и тот же объём данных, но в разном порядке.
… И этот результат смотрелся бы логичнее, если бы речь шла об одном винчестере. Но это RAID60 на 22 диска!
Я меняю в свойствах рейда один параметр (размер слайса) — и получаю совсем другие цифры для произвольной записи:
Разумеется, это совсем не сверхзвуковые скорости линейных операций, но, разница между 320 и 4000 иопсами СЛИШОМ велика, чтобы её игнорировать.
… я чуть-чуть меняю условия теста (размер блоков) и один вариант рейда сваливается вниз, а второй взрывается вверх…
Так что же такое ИОПС? И как мы можем, хотя бы приблизительно, оценить производительность дисковой подсистемы?
Мы можем сказать «считать надо под задачу». Под какую задачу? Можете ли вы предсказать размер блоков данных, к��торые решит записать ваш (тот, который вы лучше всего знаете) sql-сервер после очередного commit'а? Или другая вами администрируемая программа: можете ли вы сказать, какими блоками она будет писать/читать?
А дальше, не зная этой информации, мы оказываемся перед параметрами, которые кардинально определяют производительность RAID'а: количество дисков в мирроре и количество дисков в избыточных массивах, размер стрипа…
У меня ощущение, что среди всех областей «устройства компьютера», производительность в «запросах» — наименее изведанная. Или, если изведанная, то тщательно скрываемая…
Когда я решил проверить производительность нового рейда и прилагающихся к нему 72 дисков, мне казалось, что я знаю про иопсы всё. Сейчас я понимаю, что ничего не понимаю.
Итак, IOPS = i/o (operations) per second. Число операций ввода-вывода в секунду.
Померять IOPSы очень легко — достаточно запустить почти любой монитор производительности. perfmon в виндах, atop в линуксе. Сколько раз конкретный диск сумел ответить за секундну на запросы «записать»/«прочитать», столько и IOPS'ов.
Но когда говорят «иопсы», обычно подразумевают не текущий показатель, а максимальный, который способен выдать [диск|рейд|полка].
И вот тут-то нас ждёт величайшее удивление.
Не буду голословным, вот результаты измерения.
write iops =13200, write speed=550Mb/s write iops=324, write speed=1.2Mb/s
Это один и тот же диск. Один и тот же объём данных. Что же меняется, откуда эта ошеломляющая разница почти на два порядка?
Эта разница — в порядке выполнения запросов. Первое — линейная запись. Второе — произвольная, блоками по 4к. Записан строго один и тот же объём данных, но в разном порядке.
… И этот результат смотрелся бы логичнее, если бы речь шла об одном винчестере. Но это RAID60 на 22 диска!
Я меняю в свойствах рейда один параметр (размер слайса) — и получаю совсем другие цифры для произвольной записи:
write iops=4020 write speed=16Mb/s
Разумеется, это совсем не сверхзвуковые скорости линейных операций, но, разница между 320 и 4000 иопсами СЛИШОМ велика, чтобы её игнорировать.
… я чуть-чуть меняю условия теста (размер блоков) и один вариант рейда сваливается вниз, а второй взрывается вверх…
Так что же такое ИОПС? И как мы можем, хотя бы приблизительно, оценить производительность дисковой подсистемы?
Мы можем сказать «считать надо под задачу». Под какую задачу? Можете ли вы предсказать размер блоков данных, к��торые решит записать ваш (тот, который вы лучше всего знаете) sql-сервер после очередного commit'а? Или другая вами администрируемая программа: можете ли вы сказать, какими блоками она будет писать/читать?
А дальше, не зная этой информации, мы оказываемся перед параметрами, которые кардинально определяют производительность RAID'а: количество дисков в мирроре и количество дисков в избыточных массивах, размер стрипа…
У меня ощущение, что среди всех областей «устройства компьютера», производительность в «запросах» — наименее изведанная. Или, если изведанная, то тщательно скрываемая…
