IOmeter — решение «проблемы 2 ГГц»
естовая утилита IOmeter, разработанная специалистами компании Intel, получила широкое признание среди профессионалов, занимающихся экспертной оценкой различной компьютерной техники и комплектующих. Подход, реализованный при создании этой тестовой программы, делает ее поистине универсальным инструментом, позволяющим оценивать производительность любых устройств, принцип работы которых основан на разного рода манипуляциях с пакетами данных (будь то запись или чтение — как у дисковых накопителей, или запросы ввода-вывода — как у сетевых устройств и т.п.). При этом IOmeter позволяет оценить скорость обработки сетевых пакетов, предоставляя возможность задавать процентное отношение количества пакетов с разным направлением продвижения (ввод-вывод), позволяя тем самым имитировать разные режимы работы или же, говоря другими словами, режимы работы различных устройств (например, при тестировании сетевых устройств можно имитировать работу типичной рабочей станции или файлового сервера). Не углубляясь в подробное описание самой тестовой утилиты и методики ее использования (данной теме посвящен целый ряд статей, которые без особого труда можно найти среди ресурсов Всемирной паутины, остановимся на проблеме, которая возникла с появлением новых процессоров, тактовая частота которых превысила 2 ГГц. Если точнее, то речь идет о частоте 1,6 ГГц, но согласитесь, 2 ГГц звучит куда более весомо, да и созвучнее раздутой в конце прошлого века «проблеме 2000 года».
Дело в том, что при использовании новых процессоров с тактовой частотой свыше 1,6 ГГц утилита выдает некорректные результаты. Этот эффект получил даже свое название — «проблема 2 ГГц». Проблема заключается даже не в том, что тестовая утилита IOmeter не могла корректно определять частоту процессора (максимальное значение тактовой частоты процессора застыло на отметке 1,59 ГГц). Главным препятствием в проведении корректных тестовых испытаний стало то, что результирующие значения, получаемые с помощью этой утилиты в случае использования в тестовом стенде станции на процессоре с тактовой частотой выше 2 ГГц, оказывались отрицательными. Корни этой проблемы, на наш взгляд, таятся в том, что с недавнего времени корпорация Intel перестала поддерживать этот довольно успешный продукт, вероятно по причине того, что он является бесплатным, и отпустила эту, столь полюбившуюся многим тестерам-экспертам утилиту в «свободное плавание». Ныне поддержкой данного продукта занимается группа энтузиастов, так что всю интересующую информацию относительного этого проекта можно найти на сайте sourceforge.net (http://sourceforge.net/projects/iometer/). Именно из указанного ресурса можно почерпнуть информацию практически обо всем, что необходимо знать для работы с тестовой утилитой IOmeter, а в форуме обсудить все насущные вопросы. На основе материалов этого сайта каждый желающий может попробовать решить для себя пресловутую «проблему 2 ГГц». В этой статье мы расскажем о методике корректировки исходного кода и последующей компиляции, которая бы позволила получить тестовую утилиту, позволяющую так же успешно, как и ранее, проводить различные тестовые испытания без оглядки на тактовую частоту используемого центрального процессора. С самого начала оговоримся, что автор данных строк, как и его коллеги — эксперты тестовой лаборатории «КомпьютерПресс», — не является профессиональным программистом, а имеет лишь базовые знания некоторых распространенных языков программирования, поэтому, возможно, несколько дилетантский подход к вопросу вызовет нарекания программистов-профессионалов, но в данном материале нам хотелось бы прежде всего привести методику решения вышеописанной проблемы, основываясь на собранных и систематизированных сведениях и собственном опыте.
Итак, перейдем к делу. Прежде всего, необходимо получить код самой тестовой утилиты IOmeter. Исходный код программы является открытым, найти и скачать его можно на уже упомянутом нами сайте (http://prdownloads.sourceforge.net/iometer/iometertar.gz?download) или найти на нашем CD-Rom. Для корректной работы программы с компьютерными системами, тактовая частота центрального процессора которых превышает 2 ГГц, в полученный код исходных файлов IOCQAIO.cpp, IOCommon.h, IOManager.cpp, IOPerformance.cpp, Pulsar.cpp, Pulsar.rc, Galileo.r, Network.c, AccessDialog.cpp, PageAccess.cpp, PageNetwork.cpp, WorkerView.cpp нужно внести исправления.
В этих исходных файлах необходимо найти приведенные ниже фрагменты кода и строки, отмеченные знаком «-», заменить на строки, отмеченные знаком «+» (см. листинг 1).
Прежде чем перейти непосредственно к компиляции исходного кода, давайте обратим внимание на наш исходный материал. В первую очередь в глаза бросается наличие двух файлов с расширением *.rc. Отсюда напрашивается вывод, что мы имеем дело с «исходниками» для двух приложений. Нетрудно догадаться, что одно из них — это сама IOmeter, а второе — dynamo. Для того чтобы определить «кто есть who», можно открыть каждый из исходных файлов с расширениями *.cpp и *.h и найти ответ на этот риторический вопрос в комментариях. Но чтобы облегчить задачу, можно воспользоваться нижеприведенным списком (при этом следует отметить, что файл Galileo.rc является файлом ресурсов для приложения IOmeter, а Pulsar.rc — для dynamo; см. табл. 1 и 2).
Определившись с исходными файлами, можно перейти непосредственно к созданию тестового приложения. Начать лучше с более простого и компактного dynamo. Для дальнейшей работы нам необходимо установить пакет Microsoft Visual C++ (мы использовали Microsoft Visual C++ 6.0 SP4), а для более качественной оптимизации выходного файла можно использовать внешний компилятор, например Intel C++ Compiler 7.0, интегрируемый в установленный пакет Microsoft Visual C++. В этом случае компилятором исходного кода будет служить более «продвинутый» продукт компании Intel взамен встроенного компилятора. Итак, первым шагом должно быть создание в Microsoft Visual C++ проекта Win32 Consol Application. Назовем наш проект Dynamo. В созданный проект экспортируем вышеперечисленные исходные файлы, для чего на вкладке FileView выбираем в контекстном меню Dynamo files пункт Add Files to Project… и в окне навигации выбираем необходимые файлы. После этого в меню Project выбираем пункт Settings, а в открывшемся окне установок проекта в раскрывающемся меню Settings For — пункт All Configurations, затем, перейдя на вкладку Link в окне Object/library modules, нужно, в дополнение к уже перечисленным по умолчанию, добавить следующие библиотеки: Version.lib Ws2_32.lib Mswsock.lib (обратите внимание: названия библиотек разделяются пробелом, а не запятой!). Внеся эти изменения, вновь обращаемся к раскрывающемуся меню Settings For и выбираем пункт Win32 Debug, открываем вкладку С/С++, после чего в раскрывающемся меню Category выбираем пункт Code Generation. Выполненные манипуляции позволяют получить доступ к раскрывающемуся меню User run-time library, в котором необходимо выбрать пункт Debug Multithreaded. Теперь снова вернемся к раскрывающемуся меню Settings For, но на этот раз выберем пункт Win32 Release, а на вкладке С/С++ в раскрывающемся меню Category укажем пункт Code Generation. Как и в предыдущем случае, следует обратиться к раскрывающемуся меню User run-time library, в котором необходимо выбрать пункт Multithreaded. Выполнив все вышеперечисленные подготовительные действия, можно смело переходить к компиляции. Но все же вначале лучше попробовать сделать это в режиме отладки (Debug), для чего убедитесь, что в качестве активной выбрана конфигурация Win32 Debug (это можно сделать выбрав в меню Build пункт Set Active Configuration, а затем в открывшемся окне выбрать нужную конфигурацию). Если компиляция прошла успешно и на выходе получился файл dynamo.exe (имя файла по умолчанию соответствует имени проекта, но его можно и переопределить), который автоматически будет запущен после компиляции, то можно перейти к финальной компиляции. Для создания конечного ехе-файла необходимо выбрать в качестве активной конфигурацию Win32 Release, после чего активизировать компиляцию, получив на выходе файл dynamo.exe (его можно найти в папке Release, которая находится в каталоге созданного проекта).
Для того чтобы на основе имеющихся исходных кодов создать файл IOmeter, нужно проделать в точности те же действия, что и при компиляции dynamo.exe, с той лишь разницей, что в этом случае нужно создавать проект Win32 Application, а при экспорте исходных файлов нужно руководствоваться вышеприведенным списком. Единственный момент, на который хотелось бы обратить внимание, — это то, что в случае успешной компиляции при автоматическом запуске приложения IOmeter будет выдано сообщение об ошибке, которое известит пользователя о том, что запущенное приложение не может найти в своем корневом каталоге файл dynamo.exe, что в общем-то вполне естественно, так как никто там его и не оставлял.
Завершающим штрихом в получении исправленной версии тестовой утилиты IOmeter будет создание нового каталога, куда и следует поместить откомпилированные ехе-файлы, после чего IOmeter полностью готова к применению. Вот и все решение «проблемы 2 ГГц».
В заключение отметим, что на нашем CD-Rom вы сможете найти как исходные исправленные коды программы, так и откомпилированную новую версию тестового пакета IOmeter.