Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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