Как я могу узнать, сколько IOPS Мне нужно хранилище для перегруженного сервера Linux?
У меня есть сервер, и я знаю, что его узким местом является хранилище. Я бы хотел, чтобы узким местом не было хранилище, поэтому мне нужно определить производительность массива хранения. То есть купите массив, обеспечивающий больше операций ввода-вывода в секунду, чем мне нужно.
Как я могу узнать, учитывая некоторую системную статистику ввода-вывода или другую информацию, как определить размер производительности моего хранилища (что покупать), чтобы обслуживать больше, чем мне нужно (принимая в качестве справочного материала наихудший сценарий - тяжелый конфликт ввода-вывода -).
Например, iostat
Утилита может предоставить интересную статистику использования ввода-вывода. Могу ли я использовать эту информацию, чтобы узнать, какая производительность оборудования мне нужна? Как?
Это общий вопрос, фактический тип нагрузки или программное обеспечение не имеет значения (например, это может быть база данных), мне просто нужно иметь возможность принять решение на основе текущей статистики ввода-вывода и использования.
Если вы знаете, что у вас ограничено пространство, тесты на вашем сервере не смогут однозначно сказать вам, сколько вам нужно. Они могут только сказать, насколько быстро вы можете двигаться при ограниченном хранилище. Чтобы правильно получить ответ, который вы ищете, вам необходимо, если возможно, изолировать различные способы ограничения хранилища и протестировать их независимо.
IOPS - это, конечно, простой предел, о котором все говорят, потому что диски плохо ищут, а базы данных любят искать. В наши дни с кешем и SSD чтение с произвольным поиском небольших блоков ввода-вывода стало намного проще, чем раньше. Небольшой уровень SSD и большой кэш, вероятно, гарантируют, что если ваше узкое место действительно является IOPS (для небольшого блока ввода-вывода типа «поиск»), вы больше не будете подвержены этому. Однако будьте осторожны с этими тестами - вы будете читать всевозможные нереалистичные цифры, поскольку люди измеряют количество операций ввода-вывода, которые они могут выполнить, прямо в незеркальный кеш. Это не поможет вашему Linux-серверу.
Другой тип ограничения хранилища - это пропускная способность или пропускная способность. Это сложно изолировать, но если вы знаете, сколько данных вы пытаетесь прочитать или записать, и знаете, сколько времени у вас уходит сейчас, выберите новую временную цель, и это будет ваше новое число. Например: если вы наблюдаете, как ваше приложение тратит 4 часа на создание большой резервной копии или что-то в этом роде, а в конце оно перемещает 9 ТБ, это говорит вам о вашем текущем пределе пропускной способности: около 650 МБ / с. Если вы хотите переместить 18 ТБ за это время, вам потребуется 1300 МБ / с. По большей части Ethernet, оптоволокно и SAS можно настроить так, чтобы они работали быстрее, чем оборудование хранения. Способность хранилища поддерживать этот слой переноса заполненным обычно является настоящим узким местом. Вы хотите посмотреть количество внешних портов и результаты тестов с включенным зеркалированием кеша (чтобы убедиться, что нет узких мест между контроллерами, зеркалирующими кэшированные записи).
Наконец, вы можете быть ограничены плохой конфигурацией хранилища с точки зрения очередей SCSI. Это не так уж и часто, но определяется невозможностью продвигать оборудование хранения так быстро, как должно. Если вы наблюдаете задержку 500 мс при записи с хоста, но ваше хранилище сообщает о 3 мс 100% попаданий в кэш, это может быть проблемой из-за недостаточного количества очередей SCSI на целевом устройстве. Обычно инициатор SCSI ожидает до 500 мс, чтобы освободить слот в своей очереди, который он может использовать для приема запросов. Вы хотите узнать у поставщика хранилища рекомендации по настройке глубины очереди хоста и коэффициенту разветвления для этого.
Надеюсь, это поможет, я знаю, что это не такой простой ответ, как вы надеялись.
iostat
команда покажет вам нужную информацию. Просто беги:
iostat 1
Результат будет примерно таким:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 42.00 128.00 84.00 128 84
В tps
является transactions per second
что то же самое, что и ops.
Это заставит его обновляться каждую секунду.
Обычно вам нужно иметь systat
пакет, установленный в вашем дистрибутиве Linux, чтобы iostat был доступен.
Если вы можете изменить нагрузку на приложение от 1 TPS до точки, превышающей точку узкого места, вы можете построить модель взаимосвязи между TPS и скоростью операций ввода-вывода и пропускной способностью.
Допустим:
1 TPS causes 6 IOs and 2 KB of transfer, per second
10 TPS causes 16 IOs and 11 KB
100 TPS causes 106 IOs and 101 KB
but
200 TPS causes 107 IOs and 102 KB
300 TPS causes 107 IOs and 102 KB
1) Тогда у вас есть узкое место при предложении 100 TPS, плюс
2) накладные расходы составляют 5 операций ввода-вывода и 1 КБ, после чего каждая транзакция использует 1 ввод-вывод и 1 КБ передачи
Сейчас:
Если сказано, что это хорошо для
10,000 IOPs and 100 KB/S
, только последнее имеет значение для вас. Если сказано, что это хорошо для 100 IOPS and 10,000 KB/S
, имеет значение только первое. Иногда изначально это будет узким местом на IPS, пропускная способность в больших конфигурациях
Чтобы измерить это, проведите множество индивидуальных тестов с повторениями и нанесите результаты на график: ваши глаза лучше воспринимают картинки, чем таблицы с цифрами.
График пропускной способности должен начинаться с наклона, что-то вроде /
, затем резко выровняйтесь и вернитесь в горизонтальное положение, а иногда и снова вниз. Если вы построите время отклика, оно будет выглядеть так: _/
Изгибы выровняются в районе узкого места нагрузки.
И да, это будет диаграмма рассеяния точек, аппроксимирующих эти кривые, а не красивые прямые линии (;-))
--дэйв