Server mass storage: бенчмарки между прошлым и будущим

15 Сен 2016

Server mass storage: бенчмарки между прошлым и будущим

Серверные устройства хранения данных с момента их появления неиз­менно демонстрируют единство и борьбу двух противоположностей: гру­бой силы и интеллекта. В итоге пользователь получает рост про­пуск­ной способности интерфейсов, плотности записи, скорости вращения маг­нит­ных дисков с одной стороны и развитие технологий кэширо­ва­ния, упреж­дающего чтения, отложенной записи, сортировки очереди команд с дру­гой.

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

 

Кэширование, упреждающее чтение и отложенная запись

Вкратце вспомним эти три важных фактора производительности а заодно утилиту SMARTDRIVE и 16-битную систему MS-DOS.

  • Кэширование чтения (Read caching) подразумевает, что при чтении некоторых данных из медленного устройства (в данном примере жесткого диска), копия прочитанных данных создается в быстром устройстве (в данном примере оперативной памяти). При повторном чтении тех же данных, можно обратиться к их «быстрой» копии, существенно сократив время выполнения запроса.
  • Упреждающее чтение (Read ahead) основано на анализе операций доступа к данным и том факте, что операции эти часто носят последовательный и регулярный характер. В этом случае, дисковый контроллер или ОС, может с высокой вероятностью предсказать, какие данные понадобятся приложению в дальнейшем и заранее загрузить их с накопителя, уменьшая время ожидания.
  • Отложенная запись (Write back) устраняет необходимость ожидания завершения записи. Приложение, сохраняющее файл, мгновенно уведомляется об успешном завершении записи и может продолжать выполнение полезной работы. Дисковая операция происходит в фоновом режиме. Любопытно, что внезапное отключение питания или ошибка при записи файла, об успешном сохранении которого уже было отрапортовано, ставит систему в «неловкое положение».

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

Как это реализовано?

Три перечисленные стратегии (кэширование, упреждающее чтение и отложенная запись), должны опираться на грамотную тактику или методы реализации. При обсуждении кэширования, выполняемого операционной системой, в качестве физического носителя, в первую очередь подразумевается оперативная память, в которой расположены транзитные буферы. Такой кэш классифицируется как программный. Имеется и аппаратный кэш, располагаемый на плате электроники жесткого диска, обычно на основе микросхем DRAM.

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

Для высокоуровневых RAID-контроллеров, снабженных процессорами ввода-вывода, выполняемых в виде плат расширения PCI Express, характерно наличие от сотен мегабайт до единиц гигабайт бортовой памяти. Несомненно, это также «компьютеры в компьютере» с собственными ОС.

И наконец, самым экзотическим примером может служить технология DCA (Direct Cache Access), характерная для высокоуровневых систем и позволяющая использовать кэш-память процессора в качестве получателя данных, передаваемых bus-master устройством.

Настройка режима Direct Cache Access в Setup сервера Intel R2208
Рис 1. Настройка режима Direct Cache Access в Setup сервера Intel R2208

Технология DCA, как и любая другая, может приносить как пользу, так и вред. Поясним сказанное. Если кэшированным оказался выполняемый файл приложения, предназначенный для запуска, то время старта этого приложения будет сокращено. При операции копирования файла с диска на диск, транзитный буфер в оперативной памяти требуется только для работы bus-master контроллеров, ассоциированных с источником и получателем. Размещение такого буфера в кэш-памяти процессора не только бесполезно но и вредно, так как приведет к вытеснению более актуальных данных.

Практика как критерий истины

Разработка бенчмарок подсистем хранения данных — дело весьма необычное: вместо максимизации производительности всеми доступными средствами, разработчик стремится объективно оценить параметры устройства, минимизируя участие операционной системы, в частности, — буферизацию и кэширование, существенно влияющие на результат.

Пример тому — процесс разработки и отладки утилиты NIOBench, одного из проектов тестовой лаборатории IC Book Labs, создаваемого на основе популярного фреймворка Java.NIO. Если отложенная запись эффективно подавляется атрибутом синхронизации DSYNC при открытии файла, то для запрета кэширования чтения, применяется запуск параллельной нагрузки, в том числе нескольких копий приложения, загружающих оперативную память.

Обратимся к эксперименту: тест накопителя USB 3.0 Flash Drive, модель DataTraveler 100 G3, производства Kingston, на сервере ASUS P10S-I, платформа на основе CPU Intel Xeon E3-1230 v5 3.40GHz с объемом установленной памяти 16GB (системный диск HGST Ultrastar A7K2000).

Тест USB Flash Drive работает как один поток, результат некорректен: скорость чтения завышена из-за влияния кэширования
Рис.2 Тест USB Flash Drive работает как один поток, результат некорректен:
скорость чтения завышена из-за влияния кэширования

Тест USB Flash Drive работает на фоне серьезного потребителя оперативной памяти — теста системного жесткого диска; целевая задача показывает результаты, близкие к физическим параметрам DataTraveler 100 G3
Рис. 3 Тест USB Flash Drive работает на фоне серьезного потребителя оперативной памяти — теста системного жесткого диска; целевая задача показывает результаты, близкие к физическим параметрам DataTraveler 100 G3

Аргументировано предположим, что критическим ресурсом является именно оперативная память, используемая ОС для кэширования содержимого накопителей. Если используется другой фоновый процесс, создающий нагруз­ку на процессор, близкую к 100 процентам, но занимающий менее 1 гигабайта памяти, результат дисковых бенчмарок практически не изменяется.

Эпилог в виде пролога

Итак, сформулируем задачи обеспечения достоверности бенчмарок NIOBench:

  • Программа максимум: выработать наиболее изящный метод отключения кэширования чтения, причем решить за­дачу надо не только для JVM, но и операционной системы, от которой нас отделяют Java-абстракции.
  • Программа-минимум: избавиться хотя бы от необходимости ручного запуска нескольких копий приложения, ор­ганизовав методы моделирования нагрузки в удобном меню, совместив возможность тонкой настройки лю­бо­го параметра с удобством запуска предопределенных сценариев «одним кликом».
Теги: