Что считать хорошей производительностью хранилищ данных?
Введение
Производительность можно рассматривать как показатель объема работы, выполненной за определенный промежуток времени. Производительность хранилищ данных часто выражается в числе операций ввода/вывода за секунду (IOPS) и/или мегабайт в секунду (MB/s). Число операций ввода/вывода за секунду (IOPS) и/или количество переданных мегабайт информации в секунду (MB/s) являются показателями производительности, но не ее синонимами, более того, они имеют обратную зависимость - большое значение показателя IOPS означает низкое MB/s, как показано на диаграмме:
Число операций ввода/вывода за секунду (IOPS) и/или количество переданных мегабайт информации в секунду (MB/s) являются показателями производительности, но не ее синонимами, более того, они имеют обратную зависимость - большое значение показателя IOPS означает низкое MB/s, как показано на диаграмме
Например, приложение требует 1 000 IOPS при размере блока в 8k, что равнозначно пропускной способности в 8 Мб/с (1 000 IOPS x блок 8k = 8 Мб/с). При использовании 200 Мб/с соединения Fibre Channel, 8 Мб/с уже не представляется слишком хорошей производительностью (8 Мб/с подразумевает использование только 4% пропускной способности шины Fibre Channel) если говорить о производительности в показателях Мб/с. Однако если приложение запрашивает 1 000 IOPS и устройство хранения данных предоставляет 1 000 IOPS без организации очереди (глубина очереди команд < 1), то можно говорить, что хранилище обслуживает приложение без задержек, что означает, что производительность на самом деле высока.
С другой стороны, если приложение видеомонтажа последовательно читает данные при размере блока 64 Мб и 3 параллельных потоках, это означает 192 Мб/сек общей производительности в 200 Мб/с соединении Fibre channel (64 Мб x 3 потока = 192 Мб/с). И, хотя нет никаких сомнений, что производительность 192 Мб/с высока (используется 96% пропускной способности шины Fibre Channel), следует отметить, что в данной среде приложения поддерживается всего лишь 3 IOPS.
Эти два простых примера наглядно иллюстрируют зависимость производительности от ситуации, т.е. производительность зависит от того, чего вы пытаетесь достичь - Мб/с или IOPS.
Все зависит от приложения
Не важно, какими возможностями обладает хранилище данных, оно не может предоставить большее число операций ввода/вывода, чем запрашивает приложение, поэтому именно приложение формирует и задает производительность. Например, предположим, что приложение генерирует запрос на 2 500 IOPS от хранилища. Существует ли какая-нибудь разница в производительности на уровне приложения между хранилищем, предоставляющим 2 500 IOPS и 10 000 IOPS? Очевидно, что ответом на вопрос является четкое "нет", поскольку любое хранилище может предоставить 2 500 IOPS по запросу. Это можно сравнить с ведением машины на автостраде с ограничением скорости: если все машины начинают движение в одно и то же время и придерживаются ограничения по скорости, то любая машина доставит вас в назначенное место в одно и то же время, вне зависимости от ее марки - будь это Chevy Lumina или Ferrari F40.
Заключение
Производительность зависит от ситуации, то есть от того, чего вы пытаетесь достичь. Слишком многие производители систем хранения данных стремятся опубликовать производительность I/O в показателях пропускной способности (Мб/с). Большинство бизнес приложений ориентированы на транзакции и наиболее важным показателем производительности для них является именно число операций ввода/вывода в секунду (IOPS). В конечном счете, производительность может считаться хорошей, если приложение не ожидает очереди в хранилище. Понимание требований к рабочим характеристикам приложения и обеспечение соответствующим хранилищем, позволяет достичь максимальной производительности и эффективности приложения. Будьте внимательны к требованиям производительности - если среда, генерирующая требования не идентична и сильно отличается от вашей, вы не сможете получить те же результаты производительности. Единственный проверенный и надежный способ увидеть реальную производительность - определить ее в вашей среде приложения.