Почему производительность хранилища изменяется на разных глубинах очереди?

Я нахожусь на рынке для обновления хранилища для наших серверов. Я смотрю на тесты различных устройств PCIe SSD и в сравнении вижу, что IOPS изменяются на разных глубинах очереди. Как это может быть и почему это происходит? Насколько я понимаю, у меня есть устройство с максимальным (теоретическим) 100k IOPS. Если моя рабочая нагрузка постоянно выдает 100 001 IOPS, глубина очереди будет равна 1, я прав? Однако из того, что я вижу в тестах, некоторые устройства работают медленнее на меньших глубинах очереди, затем ускоряются на глубине 4-64 и затем снова замедляются на еще больших глубинах. Разве глубина очереди не является свойством ОС (или, возможно, контроллера хранилища), так почему это повлияет на IOPS?

1 ответ

Решение

Короткий ответ заключается в том, что жесткие диски оптимизируют извлечение данных, если имеется более одного невыполненного запроса ввода-вывода, что обычно увеличивает пропускную способность за счет задержки.

NCQ делает это, переупорядочивает запросы ввода-вывода для оптимизации пропускной способности.

SSD работают не так, как механические накопители, поскольку у них есть флэш-чипы Parallell для хранения данных. Т.е., если вы отправляете один запрос ввода-вывода за раз, задержка (поиск + время чтения) решает IOPS. Но если вы выполните 4 запроса одновременно, ssd-диск сможет получить их параллельно или другим оптимизированным способом, и вы сможете увеличить пропускную способность в 4 раза.

Чем выше глубина очереди, тем больше возможностей для оптимизации диска. Поскольку IOPS является функцией пропускной способности, это увеличивает IOPS на больших глубинах очереди.

РЕДАКТИРОВАТЬ:

Истинная очередь находится в ОС, которая выдает все запросы. При этом я бы предположил, что драйвер контроллера передает определенное количество очереди контроллеру и диску, чтобы они могли работать с оптимизированной глубиной очереди. Диск должен иметь собственную очередь для оптимизации.

Старый вопрос, но заслуживает дополнительной информации из-за того, что его видели много раз. Этот ответ основан на SSD, поскольку именно об этом и идет речь.

Глубина очереди и изменение IOPS в зависимости от глубины очереди. Рассмотрим глубину очереди 1. В этом случае данная спецификация не основана на том, что диск не успевает выполнить количество запросов, генерируемых системой, а означает, что система генерирует 1 запрос к SSD. Для запроса существует время транзакции, поэтому, если за раз отправляется только 1 запрос, SSD может обработать только 1 запрос. Это должно иметь смысл. Из-за времени транзакции отправка 1 запроса за раз происходит медленнее, чем отправка 32 запросов одновременно, что и означает спецификация, такая как QD32.

Кроме того, как указано в другом комментарии, вы можете выполнять чтение / запись параллельно с SSD, на PCIe, а не на SATA.

Например, в случае Samsung 970 Pro QD1 = 55000, а QD32 = 500000 операций ввода-вывода в секунду. Это в основном потому, что вы отправляете один запрос, а не сразу 32. Время транзакции сокращается, поэтому вы в основном имеете дело с передачей данных. Итак, минус много обработки транзакций, и фактическая функция передачи данных увеличивается.

Итак, спецификация для дисков не совсем то же самое, что определение глубины очереди. Глубина очереди по отношению к системе - это в основном количество запросов, которые не были обработаны. Спецификация основана на транзакциях, которые система отправляет на диск за раз. Однако, если вы имеете дело с SAN, глубина очереди - это в основном количество запросов в полете. Итак, я не совсем уверен в точном определении этого термина. Мне кажется, что это зависит от конкретной части системы, о которой вы говорите.

Что касается транзакций между ОС и устройством, устройство будет буферизовать определенное количество транзакций, и после этого ОС не будет отправлять больше транзакций. ДОЛЖНА быть форма квитирования, которая обеспечивает упорядоченную обработку, что означает, что ОС не может отправлять больше запросов на диск, чем она может физически удерживать. Иначе получится хаос и плохо спроектированная система.

Другими словами, вопрос типа "что происходит, когда вы получаете входящий запрос, но глубина очереди заполнена" никогда не должен происходить в отношении диска, а на диске нет "глубины очереди" для хранения запросов, он есть "очередь". Физическое количество запросов, которые будет удерживать диск, будет зависеть от типа диска. Он не может быть слишком маленьким, или диск не может хорошо оптимизировать чтение / запись, и он не может быть слишком большим по многим причинам: стоимость равна единице, невозможность оптимизации после того, как определенное количество запросов находится в очереди наверное был бы другой.

Другие вопросы по тегам