Одна из наших рекомендаций по выполнению бенчмарок накопителей всех типов с помощью утилиты NIOBench, предписывает по возможности минимизировать количество фоновых процессов и пользовательских приложений, работающих во время измерения, особенно, если такие процессы обращаются к диску или создают существенный трафик на шинах ввода-вывода платформы. Казалось бы, здесь все очевидно.
Как ни странно, для некоторых платформ, практикующих агрессивный Power Management, существует вероятность получения обратного эффекта. Если отсутствует нагрузка на процессор, подсистема ACPI, стремясь минимизировать потребляемую мощность и нагрев компонентов, переводит ряд ресурсов платформы в энергосберегающие состояния. Особенно это касается мобильных платформ с аккумуляторным питанием.
Как известно, набор Power Management состояний построен на основе компромисса между минимизацией потребляемой мощности и временем возврата в рабочий режим. Здесь все как в жизни: чем глубже сон, тем дольше будет длится процесс пробуждения. Это касается не только реакции на кнопку Power, когда время исчисляется секундами, но и быстропротекающих процессов в работающей системе, здесь речь о микросекундах.
Если конкретнее, для бенчмарок дисковых устройств, в первую очередь имеют значение два параметра:
- Время реакции (латентность) центрального процессора при обработке запроса на прерывание, сформированного, в данном примере, контроллером AHCI. Напомним, сигнал запроса на прерывание (IRQ) используется контроллером дисков, чтобы сообщить о завершении выполнения ранее принятого задания и получить следующее. В данном примере, если быть точным, контроллер AHCI использует прерывание MSI (Message Signaled Interrupt), передаваемое сообщениями.
- Пропускная способность и латентность подсистемы оперативной памяти. Контроллер DRAM в современных платформах входит в состав процессора.
Исследование вопроса начнем с трех простых опытов. Исследуем результаты утилиты NIOBench v0.42, оценивающей скорость чтения, записи и копирования файлов методами фреймворка Java NIO и их зависимость от наличия параллельно работающей утилиты NCRB.EXE, создающей стрессовую нагрузку на кэш-память первого уровня посредством 256-битных AVX-инструкций.
Параметры исследуемой платформы видны на первом скрин-шоте. Плата Gigabyte GA-F2A88XM-DS2. Жесткий диск Hitachi HTS542512K9A300 (SATA2, 5400RPM, 120 GB). Выводы сделаем несколько позже, набрав и обработав массив информации. Предложенный сценарий не оптимизирован для максимального выявления описанного эффекта.
Видимо, наилучшим будет вариант, при котором подобрана минимальная степень загрузки процессора, достаточная для того, чтобы не позволить подсистеме ACPI включать энергосберегающие состояния. С одной стороны CPU не должен быть перегружен, с другой стороны не должен переходить в энергосберегающие состояния. Отклонение от оптимального значения как в большую, так и в меньшую сторону приведет к пониженным результатам бенчмарок.
А пока только факты.
Это, для последующих сравнений, результаты бенчмарок диска при отсутствии фонового процесса, работающего с кэш-памятью CPU.
А это результаты при параллельной работе процесса, работающего с кэш-памятью CPU в одном потоке. Различия весьма незначительны.
Это результаты при параллельной работе процесса, работающего с кэш-памятью CPU в четырех потоках. Различия весьма незначительны.
Резюме
В этом опыте, производительность контроллера AHCI, снабженного локальным интеллектом, практически не зависит от загрузки центрального процессора, хотя, даже если судить по звуку процессорного вентилятора, динамически изменяющего обороты, нагрузка на процессор действительно изменялась.
Это хорошая новость с точки зрения качества платформы, оптимизации ОС Windows и виртуальной машины Java. А парадокс, о котором написано в начале статьи, возможно характерен для платформ, применяющих более агрессивные сценарии управления электропитанием. Такой эффект пока не зафиксирован, исследования в процессе...