В отличие от SSD-накопителей NAND SSD-накопители Intel® Optane™ обеспечивают пиковые показатели производительности при глубине очереди, присущей реальным приложениям, а не искусственным тестам.
Вам нужен SSD-накопитель, который обеспечит максимальную скорость работы и максимальную производительность. Раз уж вы читаете эту статью, вы наверняка хотите изучить спецификации производительности SSD-накопителей, прежде чем выбирать SSD-накопитель для своей системы. В спецификациях вы увидите расчетную пропускную способность (также известную как ширина полосы пропускания) для чтения и записи. Вы также увидите расчетное максимальное количество операций доступа в секунду (обычно это называется количеством операций ввода-вывода в секунду [IOPS]). Возможно вы удивитесь, но эти спецификации отражают в высокой степени идеализированные сценарии использования. Эти сценарии могут не соответствовать реальным приложениям, которые вы хотите ускорить.
В этой статье мы рассмотрим роль, которую играет количество отложенных возможностей доступа (обычно именуемое «глубиной очереди [QD] рабочих задач») в условиях обеспечения производительности SSD-накопителей. Мы также изучим типы QD, часто наблюдаемые в реальных приложениях.
Проще говоря, большинство приложений имеют относительно небольшую глубину очереди, а SSD-накопителям NAND для достижения полной производительности требуется большая глубина очереди. SSD-накопители Intel® Optane™ обеспечивают высокую производительность при малой глубине очереди и низкой задержке. SSD-накопители Intel® Optane™ обеспечивают высокую производительность для гораздо более широкого набора приложений.
Преобладание приложений с малой глубиной очереди
Глубина очереди — это не то, о чем часто задумываются. Для иллюстрации глубины очереди можно провести аналогию и продемонстрировать соотношение с задержкой и пропускной способностью, что поможет объяснить, почему малая глубина очереди имеет наибольшее значение.
Представьте, что у вас пожар в амбаре. У вас нет шланга, но есть ведро, а вода находится на другой стороне небольшого поля. Вы открываете кран, наполняете ведро, выключаете кран, бегом пересекаете поле и заливаете пламя водой. Затем вы бежите обратно к крану и повторяете эту последовательность действий.
В этом примере (рис. 1) глубина очереди (QD) равна единице (QD=1), потому что у нас есть только один человек и одно ведро. Пропускная способность равна средней скорости набора воды из крана и выливания ее в огонь (например, 12 раз в час). Задержка в этом примере является временем с момента завершения опорожнения одного ведра до подачи следующего ведра к месту пожара (например, пять минут).
Как видите, между задержкой и пропускной способностью при подаче воды к месту пожара существует взаимосвязь. Если поле больше, то время на доставку воды увеличивается, то есть увеличивается задержка при получении каждого ведра воды, при этом скорость подачи воды (пропускная способность) уменьшается.
Рис. 1. Пропускная способность определяется задержкой (временем круга) и глубиной очереди (количеством ведер).
Если мы сможем сократить размер поля (рис. 2), переместив кран ближе к амбару, мы сможем быстрее пересекать поле и получать воду для тушения пожара быстрее и в большем количестве. В этом случае мы сокращаем задержку и, даже в случае с QD=1, мы все равно повышаем эффективность и пропускную способность при тушении пожара.
Рисунок 2. Если сократить расстояние, задержка сократится, а пропускная способность увеличится.
Сокращение задержки выгладит как магия. Но есть ли другой способ? Возьмем, к примеру, случай с QD=2. Для этого нам нужно второе ведро и помощь друга. Теперь по полю перемещаются два пожарных: один бежит к пожару, другой — к крану. Время задержки не изменилось, поскольку размер поля тот же, но с QD=2 мы получаем удвоенную пропускную способность при доставке воды к месту пожара (рис. 3).
Рис. 3. Другим способом увеличения пропускной способности является увеличение глубины очереди (QD).
Пока у нас не закончатся ведра и друзья, мы можем увеличивать пропускную способность при подаче воды путем увеличения объемов ресурсов. По мере увеличения количества пожарных, бегающих по полю, они начнут все чаще сталкиваться друг с другом (рис. 4). Это снижает эффективность. Каждый новый помощник уже не будет помогать в той мере, как это делал первый. В какой-то момент обнаружится, что кран уже даже не выключают, так как кто-то постоянно наполняет ведро. Это означает, что достигнута точка насыщения (максимальная пропускная способность для крана), и добавление ведер (увеличение глубины очереди) уже не поможет.
Рис. 4. В конце концов, увеличение глубины очереди достигает точки нерентабельности, так как перенасыщение приводит к затвору.
Системы хранения работают именно так, как описано выше. Приложение, выполняющееся на процессоре, — это горящий амбар. Для вычислений ему нужны «ведра с данными». Приложение или операционная система, работающие на процессоре, отправляют отдельные запросы данных к SSD-накопителю, и возвращаемые данные используются для выполнения вычислений. Количество элементов данных, которые приложение может запросить одновременно (глубина очереди или «количество ведер»), зависит от параллелизма данных при вычислениях, а также от возможностей приложения. Задержка при каждом доступе зависит от задержки SSD-накопителя и пути к этому SSD-накопителю в системе. Поэтому пропускная способность зависит как от приложения, так и от используемого SSD-накопителя.
Приложение и эталонная глубина очереди
Производительность SSD-накопителей обычно измеряется с помощью эталонных тестов, таких как FIO (Linux) или CrystalDiskMark (Windows). Эти эталонные тесты способны испытывать очереди большой глубины. FIO полностью настраивается в плане глубины очереди — просто достаточно указать требуемую величину. Тесты FIO с глубинами очереди до 128 или 256 часто используются при оценке производительности SSD-накопителей. CrystalDiskMark включает тест с 16 вычислительными потоками, каждый из которых имеет глубину очереди величиной 32, а суммарная глубина составляет 512. Такие большие значения глубины очереди имеют смысл с точки зрения полного использования SSD-накопителя и демонстрации максимально возможной производительности в плане операций ввода-вывода и пропускной способности.
Однако эти высокие показатели и их зависимость от большой глубины очереди просто не отражают реалии большинства центров обработки данных и пользовательских ПК. В реальных условиях большая глубина очереди достигается и поддерживается редко. Внутренние испытания Intel для реальных рабочих нагрузок ЦОД показали, что большинство приложений используют очереди глубиной в пределах от 1 до 9 (рис. 5).1 На самом деле только транзакционный эталонный тест (например, TPC-H) позволяет достичь действительно больших глубин очереди.
Рис. 5. Многие рабочие задачи предприятий обрабатываются при малой глубине очереди.1
Рис. 6. Различные рабочие задачи клиентов и их показатели QD. Все измеренные рабочие задачи работают главным образом при низкой глубине очереди. 2
Ситуация еще более остро ощущается в приложениях для ПК. Согласно нашим собственным измерениям, многие приложения для настольных ПК поддерживают глубину очереди величиной 1, 2 или 4. Как показано на рис. 6, реальные рабочие задачи самых популярных приложений выполняются при глубине очереди менее чем QD=3.
Рисунки 5 и 6 наглядно иллюстрирует разрыв между измеренными большими величинами глубины очереди, используемыми в спецификациях SSD-накопителей, и потребностями реальных приложений. Эталонные харауктеристики SSD-накопителей предполагают множество «ведер» для перемещения данных, вто время как приложения обеспечивают только несколько. На этом фоне давайте рассмотрим SSD-накопители NAND и Intel® Optane™ в сравнении с точки зрения глубины очереди.
Производительность SSD-накопителей NAND
Неудивительно, что SSD-накопители NAND были созданы на основе памяти NAND. Один SSD-накопитель NAND содержит множество интегральных микросхем NAND. Задержки при чтении данных из интегральной микросхемы NAND доминируют в системе SSD-накопителя на фоне остальных задержек на последующих этапах.3 Из-за этой задержки, присущей NAND, современные SSD-накопители NAND, как правило, характеризуются средней продолжительностью простоя около 80 мкс.4 Для одного процессора 3 ГГц это означает 240 000 инструкций — большое поле для бега с ведром в руках.
Из-за этой относительно большой задержки производительность при малой глубине очереди — это вызов для SSD-накопителя NAND. Немного математики: 4096 байт x (1/80 мкс) = 50 МБ/с, то есть довольно низкая пропускная способность. Конечно, передача больших объемов данных («большие ведра») позволят увеличить пропускную способность. Именно поэтому в эталонных тестах SSD-накопителей для измерения пропускной способности используются большие объемы данных. Следует заметить, что лишь некоторые приложения могут использовать большие объемы данных при передаче.
Еще немного математики: (1/80 мкс) = 12 тыс. операций ввода-вывода. Это показывает, насколько низкая пропускная способность будет при глубине очереди QD=1. Увеличение глубины очереди приведет к увеличению и скорости работы. Именно поэтому в сводках характеристик используются результаты измерений при большой глубине очереди. При передаче более крупных объемов данных пропускная способность увеличивается, и именно поэтому в характеристиках SSD-накопителей вы видите большие значения количества операций ввода-вывода в секунду.
Существует множество вторичных факторов, негативно влияющих на производительность SSD-накопителей NAND, которые также требуют увеличения глубины очереди для достижения максимальной производительности SSD-накопителей NAND. Здесь стоит упомянуть только один из них — «эффект попадания в яблочко» (название придумал сотрудник Intel Кнут Гримсруд (Knut Grimsrud)). Каждая интегральная микросхема NAND обеспечивает реализацию лишь одной операции чтения за все время суммарной задержки. Поэтому для достижения более высокой производительности SSD-накопитель NAND должен иметь множество интегральных микросхем, и каждая операция чтения должна выполняться с отдельной микросхемой. Однако данные хранятся в конкретных микросхемах и возможны совпадения при последовательном обращении к одной и той же интегральной микросхеме и, следовательно, задержки, вызванные ожиданием, даже при простое других микросхем. Это как будто у нас несколько кранов, вода из всех течет медленно, и каждое ведро можно наполнять только из какого-то конкретного крана. По мере увеличения глубины очереди увеличивается вероятность совпадений обращений к одной и той же интегральной микросхеме, что приводит к замедлению роста производительности в сравнении с темпом роста глубины очереди. Именно поэтому спецификации SSD-накопителей содержат такие большие значения глубины очереди для демонстрации высокой производительности операций ввода-вывода. SSD-накопители Intel® Optane™ не страдают от «эффекта попадания в яблочко», поскольку в них используется более эффективная память и архитектура SSD-накопителей.
Как SSD-накопители Intel® Optane™ превосходят SSD-накопители NAND по количеству операций ввода-вывода в секунду в реальных условиях ЦОД
В отличие от SSD-накопителей NAND SSD-накопители Intel® Optane™ разработаны для обеспечения максимальной производительности в условиях реальной глубины очереди благодаря использованию революционной памяти и архитектуры SSD-накопителей, обеспечивающим стабильно малую задержку. Малая задержка памяти Intel® Optane™ позволяет SSD-накопителю достигать чрезвычайно малых задержек (на уровне SSD-накопителя) порядка 8 мкс (это очень маленькое «поле для бега с ведром»). Кроме того, в отличие от SSD-накопителей NAND задержка у SSD-накопителей Intel® Optane™ не зависит от задержки памяти и не подвержена влиянию «эффекта попадания в яблочко». SSD-накопитель Intel® Optane™ способен выполнять чтение одного блока данных объемом 4 КБ из нескольких интегральных микросхем модуля памяти Intel® Optane™, и эти микросхемы очень скоро будут готовы к очередной операции. SSD-накопители Intel® Optane™ способны избегать конфликтов при обращении к местоположениям и адресам, присущим SSD-накопителям NAND. Использование SSD-накопителей Intel® Optane™ аналогично использованию нескольких кранов одновременно для наполнения одного ведра с быстрой готовностью к наполнению следующего ведра. Это означает, что носитель памяти Intel® Optane™ будет готов к следующей операции чтения гораздо раньше по сравнению с SSD-накопителем NAND, поэтому для достижения высокой производительности операций ввода-вывода ему не нужная высокая степень параллелизма.
Проще говоря, SSD-накопители Intel® Optane™ обеспечивают пиковую производительность при малой глубине очереди, присущей большинству приложений. Для обеспечения пиковой производительности SSD-накопители NAND обычно требуют глубины очереди порядка 128 и более, а SSD-накопители Intel® Optane™ способны достигать полной производительности при значительно меньшей глубине очереди, присущей реальным приложениям (см. рис. 7).5 На диаграмме также подчеркивается разница в производительности между SSD-накопителем NAND (Intel® SSD P4610) и SSD-накопителем Intel® Optane™ (Intel® Optane™ SSD P4800X). Результаты свидетельствуют о скорости работы SSD-накопителей Intel® Optane™ в реальных условиях, в 4–5 раз превосходящей скорость испытанных SSD-накопителей Intel® NAND.
Рис. 7,. SSD-накопители Intel® Optane™ обеспечивают пиковую производительность при малой глубине очереди, присущей большинству приложений; SSD-накопители NAND обычно требуют большей глубины очереди — от 128 или более — для обеспечения пиковой производительности.6
Хотя это важная схема, она отражает лишь часть проблемы. На рис. 8 показана та же рабочая задача, но показано рабочее состояние системы с точки зрения как пропускной способности (ось X), так и итоговой задержки на операцию ввода-вывода (ось Y). Глубина очереди (QD) показана количеством линий для SSD-накопителей Intel® Optane™ и NAND. Предположим, что у нас есть приложение, способное работать при глубине очереди QD=4. SSD-накопитель Intel® Optane™ позволяет приложению работать с пропускной способностью более 1,2 ГБ/с при задержке всего лишь около 10 мкс для одной операции ввода-вывода. С другой стороны, SSD-накопитель NAND обеспечивает приложению обычную пропускную способность менее 0,3 ГБ/с, а задержка операций чтения-записи составляет порядка 100 мкс. Это очень разные характеристики, которые, в свою очередь, приведут к существенным отличиям производительности приложения.
Рисунок 8. SSD-накопители Intel® Optane™ обеспечивают большую пропускную способность при меньшей глубине очереди и меньшей задержке по сравнению с SSD-накопителями NAND.6
Также на рис. 8 следует обратить внимание на то, что SSD-накопитель NAND для достижения полной производительности требует глубину очереди 128 или даже 256. Даже если приложение может продемонстрировать высокие рабочие показатели, это будет достигнуто за счет больших задержек при чтении. Теперь вы понимаете, почему максимальная производительность SSD-накопителя NAND указывается для таких больших значений глубины очереди и почему необходимо уточнять задержки в операциях чтения при такой производительности. По этой причине некоторые эталонные тесты, такие как CrystalDiskMark, включают измерение при QD=1 в качестве части набора тестов. SSD-накопители Intel® Optane™ развивают полную производительность при глубине очереди немного более 8 и при этом сохраняют малую задержку в операциях чтения. В условиях реальной глубины очереди у приложений SSD-накопитель Intel® Optane™ демонстрирует как высокую пропускную способность, так и малую задержку. Если придется «тушить пожар», то я бы предпочел иметь в своей системе SSD-накопитель Intel® Optane™.
Дополнительное преимущество SSD-накопителей Intel® Optane™: упрощение программирования
Дэвид Кларк (David Clark) из Массачусетского технологического института однажды сказал: «Проблемы с пропускной способностью можно решить с помощью денег. Проблемы с задержками решить сложнее, потом что скорость света неизменна. Вы не можете подкупить Бога».7 Кларк говорил о сетевых взаимодействиях, но это так же верно и для хранения данных; низкое время задержки — это важный фактор, имеющий далеко идущие последствия. Работая с операционной системой и разработчиками приложений над интеграцией в системы SSD-накопителей Intel® Optane™ с низким временем задержки, мы столкнулись с постоянно встречающейся темой. У разработчиков возникали дополнительные затраты ресурсов в форме времени разработки, написания дополнительного кода и дополнительных вычислительных циклов для преодоления больших задержек в работе систем хранения. В течение многих лет разработчики операционных систем и ключевых приложений для ЦОД прилагали большие усилия для увеличения пропускной способности приложений несмотря на большие задержки SSD-накопителей NAND (и даже накопителей на жестких дисках). В попытке сократить время ожидания при передаче данных в хранилище и из него были разработаны специальный код и сложные эвристические алгоритмы. С SSD-накопителями Intel® Optane™ этот код и эти алгоритмы больше не нужны. Малые задержки, присущие SSD-накопителям Intel® Optane™, решили проблему в корне, обеспечив быстрый доступ к данным.
Для иллюстрации этой концепции рассмотрим тест TPC-C — важный эталонный тест баз данных корпоративного уровня. Специалист из Intel Джефф Смитс (Jeff Smits) провел обширные эксперименты, сравнив производительность SSD-накопителей NAND с производительностью SSD-накопителей Intel® Optane™. Тест TPC-C оценивает пропускную способность — количество транзакций в секунду. Реализации теста TPC-C для баз данных в высокой степени оптимизированы на уровне кода и системы. Джефф обнаружил, что простое встраивание SSD-накопителя Intel® Optane™ в систему не обеспечивает преимущества в полной мере. Ему пришлось сократить количество отложенных операций, создаваемых этой в высокой степени оптимизированной системой. Сделав это, он обнаружил высокую производительность на уровне приложений. Система получила хранилище данных с большой задержкой в работе, и поэтому включала сложный код, позволяющий генерировать множество одновременных транзакций. Интересно, что уменьшение количества отложенных транзакций даже привело к увеличению эффективности работы кэш-памяти процессора, поскольку при этом уменьшился размер наборов данных приложения. Мы наблюдали аналогичные возможности упрощения ради производительности при разбиении виртуальной памяти ОС на страницы.
То есть, дополнительным преимуществом использования SSD-накопителей Intel® Optane™ является упрощение кода и уменьшение количества рабочих наборов. Благодаря этому упрощению и происходит прирост производительности системы. Если вы разрабатываете приложение, подумайте, как его упростить для достижения большей производительности и продуктивности, используя SSD-накопители Intel® Optane™.
Производительность в «реальных условиях» — это единственное, что имеет значение
Термин «реальный» употребляется в этой статье довольно часто. Именно так и должно быть. В конце концов, опубликованные показатели производительности, какими бы впечатляющими они ни были, мало влияют на что-либо, если заявленные результаты не достигаются на практике. Хотя рабочие показатели SSD-накопителей NAND и могут удивить при просмотре рекламных брошюр, производительность SSD-накопителей Intel® Optane™ в условиях реальной работы ЦОД и приложений для ПК будет поражать изо дня в день.8 9 10 11 12 13