FC-Test 1.0 или "Компьютер перезагружен".

Автор: niknik
Дата: 21.05.2004
Все фото статьи

Введение


Два года назад в распоряжении нашей тестовой лаборатории появился новый тестовый пакет с незамысловатым названием FC-Test. К необходимости создания "своего" теста для жёстких дисков мы пришли не от хорошей жизни. Как Вы знаете, пакет Winbench99 не обновлялся уже много лет, так что используемые в нём наборы файлов различных приложений уже не отвечают реалиям наших дней. Тест IOMeter, хоть и позволяет смоделировать практически любую нагрузку на дисковую подсистему, но довольно заумен и "труден" для конечного пользователя. Перепробовав множество тестов мы пришли к выводу, что тест нужно писать самим...

После долгих и, подчас, мучительных размышлений о типе теста (синтетика/тесты в реальных приложениях) мы решили остановиться на тесте, измеряющем скорость чтения, записи и копирования файлов под операционной системой Windows. В пользу этого выбора говорили как "понятность" таких операций, как копирование файлов, так и распространённость операционных систем Microsoft. :)

Итак, тест был написан, и первая же попытка применить его при исследовании жёстких дисков показала необходимость включить FC-Test в нашу методику тестирования дисков.
С тех пор FC-test был использован нами несчётное количество раз, и стопка отчётов давно уже перестала умещаться в ящике письменного стола. Пожалуй, стоит объяснить, о каких отчётах идёт речь. Так как тест не сохранял полученные результаты в лог-файл, их приходилось записывать на бумагу и потом "вбивать" в xls-таблицы. Конечно, нарисованные в том же Excel бланки упрощали процесс (и экономили бумагу! :) ), но "несовременность" такого подхода была очевидна.
И вот, когда бланки перестали умещаться в ящике стола, мы подняли бунт! Собственно, причиной бунта послужила не усталость от заполнения бланков или переноса данных с бумаги в Excel (после двух лет тренировки все действия были доведены до автоматизма), а, в большей степени, то, что при проведении тестов нужно было неотлучно сидеть за компьютером и каждые 3-5 минут записывать результаты и запускать тест дальше. Как Вы понимаете, при таком подходе трудно было добиться высокой производительности труда. Ну невозможно сосредоточиться на тексте обзора, когда FC-Test каждые пять минут требует поменять ему пелёнки... И уж тем более трудно было обеспечить одновременное тестирование на нескольких компьютерах. К концу дня у нас болели ноги, кружились головы и т.п. :(

К счастью, вопреки словам классика "Не приведи бог видеть русский бунт бессмысленный и беспощадный", наш бунт удался! Во время его были сформулированы две основных претензии к FC-test, коими были признаны:

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

Соответственно, при работе над новой версией FC-test основное внимание уделялось решению этих проблем.

FC-test 1.0


Итак, встречаем новое воплощение FC-test.


Как видите, эта версия получилась у нас такой весенне-легкомысленной. :)

Интерфейс мы намеренно оставили "сухим" и невыразительным - как и любой рабочий инструмент, он не нуждается в украшениях. ;)
Самый глубокий элемент меню (по глубине вложенности) - пункт "NEW"


При помощи этого пункта можно создать новый паттерн (некое описание набора файлов) или файл-лист.
Файл-лист отличается от паттерна тем, что он жёстко привязан к определённому логическому диску. Он описывает набор файлов, которые реально существуют на диске, в то время как паттерн... Впрочем, скриншоты говорят сами за себя:


На левом скриншоте, как легко догадаться, открытый в notepad-е файл паттерна, а на правом - файл-лист.
В паттерне просто указано, что он содержит сто файлов по 1МБ каждый, а в файл-листе не только указано конкретное местонахождение файлов (логический диск D), но и поимённо перечислены все файлы. Если мы создавали файл-лист, сканируя определённую папку на диске, то в файл-лист попадут все файлы из указанной папки, включая файлы во вложенных папках. При этом в файл-листе будет сохранён относительный путь для каждого файла.
Для быстрого подсчёта объёма данных, описываемых файл-листом, в нём для каждого файла хранится его размер.

Претерпел изменения и пункт меню "OPEN".


Теперь он сразу предлагает список всех поддерживаемых FC-test файлов (т.е. файлов с расширениями .ptn и .fls) и содержит иконки быстрого доступа к местам возможной дислокации искомых файлов.

И, наконец, в меню появился пункт "Run Script":


При помощи этого пункта мы можем выбрать файл с заранее подготовленной "программой" работы теста и запустить его в работу.
Скрипт хранится в файлах с расширением ".spt". При использовании относительных путей в именах файлов, текущей директорией считается директория, в которой лежит скрипт. В этой же директории создаётся файл с таким же, как у скрипта, именем и расширением ".log". В этот файл ведётся запись протокола работы скрипта в CSV-формате.
А вот так выглядит скрипт "внутри"


Как видите, простейший командный процессор. :)

Каждая команда занимает одну строку скрипта. Пробелы в начале и в конце строки игнорируются. Операнды разделяются между собой пробелами. Если операнд содержит пробел, его необходимо заключить в одинарные или двойные кавычки. Операнд, содержащий одинарные кавычки, необходимо заключать в двойные, и наоборот. Пустые строки и строки, начинающиеся с символа "#" (решётка), игнорируются.

Команды скрипта



Сначала кратенько перечислим все поддерживаемые команды, а потом попробуем пофантазировать - какие возможны из них комбинации... :)

Comment - Помещает комментарий в лог-файл.

Синтаксис: comment <quoted text>

Compress - Считывает файлы по списку и создаёт один новый файл, объём которого в <compression ratio> раз меньше, чем суммарный объём файлов в списке. Может создать временный список с именем созданного файла.

Синтаксис: compress <list> <target file> <compression ratio> [<target list>]

Copy - Копирует файлы по списку в указанную директорию. Может создать временный список скопированных файлов.

Синтаксис: copy <list> <target dir> [<target list>]

Create - Создаёт файлы по шаблону в заданной директории. Может создать временный список созданных файлов.

Синтаксис: create <pattern> <target dir> [<target list>]

Clean - Удаляет файлы из временного списка и выбрасывает список из памяти. Не работает со списками, загруженными из файла, и записанными в файл.

Синтаксис: clean <file list>

Decompress - Считывает данные из исходного файла и создаёт новые файлы по шаблону в заданной директории. Объём считываемых данных в <compression ratio> раз меньше, чем суммарный объём файлов в шаблоне. Исходный файл должен быть достаточно большим, чтобы операция завершилась успешно. Команда может создать временный список созданных файлов.

Синтаксис: decompress <pattern> <source file> <target dir> <compression ratio> [<target list>]

Pause - Приостанавливает исполнение скрипта на заданное количество секунд.

Синтаксис: pause <seconds>

Read - Считывает файлы по списку.

Синтаксис: read <file list>

Reboot - Перезагружает компьютер. После перезагрузки автоматически продолжается исполнение скрипта со следующей строки.

Синтаксис: reboot

Recycle - Выбрасывает временный список файлов из памяти. Не работает со списками, загруженными из файла, и записанными в файл. Файлы, перечисленные в списке, не удаляются.

Синтаксис: recycle <file list>

Save - Сохраняет список или паттерн с заданным именем. Временный список после этого перестаёт быть временным. Старое имя временного списка освобождается для использования.

Синтаксис: save <list | pattern> <target file>

System - Исполняет произвольную команду или приложение с заданными аргументами и дожидается окончания его исполнения.

Синтаксис: system <command> [<arguments>]

Как видите, количество действий, которые теперь поддерживает тест значительно возросло.

К уже знакомым командам - Create, Read, Copy - добавились несколько команд, при помощи которых обеспечивается автоматизация процесса тестирования - Save, Recycle, Reboot. Команда Pause потребовалась для улучшения "сходимости" результатов тестов. С её помощью мы "выдерживаем" паузы после перезагрузки компьютера, чтобы дать возможность операционной системе полностью загрузиться. Конечно, на разных компьютерах время "успокоения" операционной системы будет разным, ну а мы определяли его экспериментальным путём - замеряли промежуток времени между загрузкой FC-test (в batch-режиме после перезагрузки компьютера FC-test стартует автоматически) и окончанием обращений к диску операционной системой. Ну и, конечно, к этому времени мы добавляли еще столько же. :)

Наличие команды System позволяет "расширить границы сознания" теста практически до невообразимых пределов. Так как при помощи этой команды мы можем вызвать любую внешнюю программу, то возможности FC-Test-а будут расти по мере потребности. В настоящий же момент мы используем команду System для форматирования дисков.

Команды Compress и Decompress позволяют задействовать тесты на скорость упаковки/распаковки файлов. На самом деле сам процесс сжатия/распаковки лишь имитируется - процессор не занимается никакими вычислениями, так как наша цель - создать определённую нагрузку на дисковую систему.
А чем же нагрузка на диск при архивации файлов отличается от нагрузки при их копировании?
- Ассимметричностью!

Когда мы копируем файлы, то на винчестер пишется столько же данных, сколько и считывается, а при архивации на диск пишется меньше данных, чем читается с него (при условии, что данные удалось упаковать). Соотношение объёма исходных данных и объёма данных после сжатия называют коэффициентом сжатия.
Таким образом, можно предположить, что в режиме с ассимметричной нагрузкой на чтение и запись быстродействие жёстких дисков может отличаться от того, что мы измеряли в тестах на скорость копирования файлов. Насколько велика эта разница, и почему она возникает - мы обсудим чуть позже...
А пока стоит упомянуть, что команда Decompress позволяет имитировать процесс разархивации файла - то есть жёсткий диск будет читать один большой файл, а писать - много маленьких...

Ну и, наконец, самая главная команда, которая помогает, даже спустя большое время, открыв файл результатов, понять "что там, собственно, натестировано" - команда Comment.
Одним из полезных её свойств является то, что она добавляется в csv-файл c переводом строки, а это позволяет упорядочивать результаты к такому виду:


Это результат тестирования карточки SD, и для неё мы измеряли скорость записи и чтения трёх наборов файлов - один файл объёмом 100МБ, 10 файлов объёмом 10МБ каждый и 100 файлов по 1МБ.
В отчёте теста мы можем видеть уже готовую табличку с данными, где в одной строке содержатся скорости записи и чтения для каждого набора файлов.
Таким образом, моя мечта о тесте, который сам пишет обзоры, близка к осуществлению. Осталось только научить тест строить диаграммы. :)

Возможные способы применения


Что же, давайте подумаем, для тестов какого оборудования мы можем использовать FC-Test.

Тестируем жёсткие диски

Собственно, мы используем FC-Test для тестов жёстких дисков достаточно давно, и, что характерно, это единственный тест, в котором быстродействие различных жёстких дисков отличается больше, чем на погрешность измерения (подробно о погрешности измерения мы поговорим чуть позже).
На всякий случай напомню, что тесты жёстких дисков мы проводим на пяти наборах файлов:

Install - 414 файлов общим объёмом 575МБ;
ISO - 3 файла общим объёмом 1600МБ;
MP3 - 271 файл общим объёмом 990МБ;
Programs - 8504 файл общим объёмом 1380МБ;
Windows - 9006 файлов общим объёмом 1060МБ.

Для каждого набора файлов мы измеряем скорость записи всего набора файлов на диск, скорость чтения этих файлов с диска, скорость копирования набора файлов внутри одного логического диска объёмом 32ГБ и скорость копирования набора файлов на второй логический диск объёмом 32ГБ.
Между каждым измерением скорости производится перезагрузка компьютера, что позволяет избежать погрешности измерения скорости, которое вносит операционная система, кэшируя файлы в оперативной памяти.
Для дисков, объём которых меньше 64ГБ, разбиение на логические диски производится по-другому - мы делим их на два логических диска равной ёмкости.

Тестируем RAID-контроллеры

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

Тестируем flash-диски

Flash-диски, как правило, имеют меньший объём, чем жёсткие диски и, поэтому, нет смысла измерять скорость их работы с большими по объёму паттернами (ISO, Windows, Programs). К тому же нет никакого смысла измерять скорость копирования внутри flash-драйвов, так как это, на наш взгляд, редко кто делает.
Посему, мы для тестов таких дисков ограничиваемся измерением скорости записи файлов на диск и скорости их чтения с диска. Что касается размера файлов, то мы используем следующую схему - для flash-дисков объёмом 128МБ мы используем три набора файлов:

один файл объёмом 100МБ;
10 файлов объёмом 10МБ каждый;
100 файлов по 1МБ.

Как Вы понимате, при помощи FC-test можно тестировать и USB-диски и CF-карты и т.п.

Тестируем приводы CD-ROM/DVD-ROM

А, действительно, почему бы нам не применить FC-Test для измерения скорости работы CD-дисков? Конечно, на CD-ROM-диски не очень-то попишешь. :) Но, на CD-RW, при желании, можно и писать (в UDF-формат). Но мы этого делать не будем. В конце-концов есть масса бенчмарков, которые измеряют скорость записи на CD-R/RW, etc.
Вместо этого мы будем ЧИТАТЬ с дисков! Наверное, многие из Вас знают тест CD Winbench - суть его в измерении скорости чтения с диска неких наборов файлов. Каждый набор файлов, насколько я помню - файлы различных игр, находится в отдельной папке и при выполнении теста эти файлы читаются с диска.
Но дело в том, что тест CD-Bench обновлялся уже довольно давно и наборы файлов на его тестовом диске успели порядочно устареть... Не будем расстраиваться, ведь у нас есть Тайд, тьфу, FC-Test!
При помощи FC-Test мы сами можем сделать свой собственный CD Bench и, что немаловажно, можно будет оперативно менять тестовые наборы файлов.

Как сделать тест для CD-приводов? - Очень просто!
Берём некий диск, на котором записаны файлы, например, диск с лицензионной копией Windows 2000 Professional. Устанавливаем его в интересующий нас привод и загружаем FC-Test. После чего из меню выбираем пункт меню "NEW", затем указываем, что нас интересует "File List" и указываем на CD-диск (или на одну из папок на этом диске).
Через несколько секунд мы получаем список файлов, находящихся внутри запрошенной нами директории.


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

После чего мы нажимаем кнопку "Read Files" и FC-Test считывает все файлы, указанные в файл-листе с диска и подсчитывает среднюю скорость чтения.


Для диска, который я взял в качестве примера, время чтения с него всех файлов общим объёмом 354.71МБ составило 94.3 секунды, что, по гамбургскому счёту, составляет среднюю скорость в 3.76МБ/сек. В переводе на более привычные для CD единицы "X" это составит 25.077 X.

Почему "правильнее" измерять скорость чтения файлов? - Да потому что никогда CD-диски не читаются линейно (ну может быть только в случае "граббления" с них аудио-треков). В реальных приложениях с CD-дисков всегда запрашиваются файлы и, потому, важно измерять не просто скорость линейного чтения с дисков, но и скорость чтения файлов. Она, как легко догадаться, будет зависеть и от access time привода и от алгоритмов работы его кэш-буфера.

Тестируем сетевые карты

И это также возможно. Соединяем компьютеры по сети, расшариваем диск на "сервере" и подключаем этот диск на "клиенте" как сетевой диск и... можно тестировать скорость работы с сетевым диском. На всякий случай, стоит увеличить паузу между перезагрузками компьютера. Если Вы, вдруг, захотите тестировать гигабитные карточки, то стоит позаботиться о том, чтобы дисковая подсистема сервера могла выдать больше, чем 125МБ/сек. В таком случае можно быть уверенным в том, что узким местом будет сетевая карта.

Повторяемость результатов


Сразу хочу сказать, что повторяемость результатов превзошла наши ожидания. :)
Конечно, она сильно зависит от "стабильности" тестируемого объекта. Например, на flash-диске повторяемость результатов близка к абсолюту... На жёстких дисках мы получили точно такие же дисперсии, как и при испытаниях теста PCMark04, так что копирование файлов ничуть не менее точно, чем проигрывание трасс дисковой активности.
Конечно, для получения корректных результатов необходимо повторить тест не один раз, ну а количество повторов каждый тестер пусть выбирает сам...

Программа бета-тестирования


В настоящий момент новая версия теста FC-Test 1.0 находится на стадии бета-тестирования, так что пока мы не выкладываем её в свободный доступ. Небольшие косметические изменения будут внесены в интерфейс и реализацию лог-файла. Также мы запланировали еще несколько "фич", которые позволят использовать FC-Test более эффективно.

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