Наиболее часто задаваемые вопросы по BogoMips
Несколько респондентов способствовали моему изучению BogoMips. В этой главе мне хочется их отблагодарить.
Что такое BogoMips
Это цитата из Internet, автор неизвестен, но оттуда вытащили ее Eric S
Raymond esr@thyrsus.com, и Geoff Mackenzie freon@dialstart.net, далее
следует юмористическое определение BogoMips, ''сколько миллионов раз в
cекунду, процессор может ничего не делать.''
Более серьезное определение, написанное Lars Wirzenius'
wirzeniu@kruuna.Helsinki.FI от 9 Сентября 1993, с добавлениями Alessandro
Rubini, rubini@norgana.systemy.it, и моими:
"`MIPS - это аббревиатура, миллионы операций в секунду (Millions of Instructions Per Second). Это измерение скорости выполнения программы. Как и большинство таких мер, ей больше злоупотребляют, чем правильно используют (очень трудно сравнивать MIPS различных типов компьютеров).
BogoMips - это изобретение Linus Torvalds. Ядру требуются (или это драйвер устройства?) временные задержки состоящие, из пустых циклов, которые должны быть отрегулированы по отношению к скорости процессора. Так как
ядро вычисляет при загрузке, сколько времени занимает каждый тип цикла.
"Bogo" происходит от "bogus" (фальшивый, поддельный).
Так как величина BogoMips дает представление о скорости процессора, но
она настолько антинаучна, что ее назвали не иначе, как BogoMips.
Причины (а их две), почему это выводится во время загрузки, являются:
a) удобство для отладки и проверки работы кэша и режима турбо, и
b) потому что Linus любит посмеиваться над растерянными людьми в новостях. "
BogoMips определяются в /usr/src/linux/init/main.c (простой алгоритм на
C), и записывает ее в переменную ядра loops_per_sec,
которая используется
некоторыми драйверами для более серьезных нужд. Реальная функция задержки
udelay() написана на ассемблере, и поэтому каждый порт имеет свое
собственное определение /include/asm/delay.h. Переменные loops_per_sec и
функция udelay() используются многими драйверами:
cd /usr/src/linux # или где еще у вас там лежат исходники
find . -name '*.[hcS]' -exec fgrep loops_per_sec {} /dev/null \;
find . -name '*.[hcS]' -exec fgrep udelay {} /dev/null \; |
Как определить, какой рейтинг BogoMips должен быть
По инициативе Ian Jackson, ijackson@nyx.cs.du.edu, и Przemek Klosowski,
дополненной и расширенной мной.
Как весьма приближенный ориентир, BogoMips могут быть рассчитаны так:
Система BogoMips Сравнение
Intel 8088 clock * 0.004 0.02
Intel/AMD 386SX clock * 0.14 0.8
Intel/AMD 386DX clock * 0.18 1 (по определению)
Motorola 68030 clock * 0.25 1.4
Cyrix/IBM 486 clock * 0.34 1.8
Intel Pentium clock * 0.40 2.2
Intel 486 clock * 0.50 2.8
AMD 5x86 clock * 0.50 2.8
Mips R4000/R4400 clock * 0.50 2.8
Nexgen Nx586 clock * 0.75 4.2
PowerPC 601 clock * 0.84 4.7
Alpha 21064/21064A clock * 0.99 5.5
Alpha 21066/21066A clock * 0.99 5.5
Alpha 21164/21164A clock * 0.99 5.5
Intel Pentium Pro clock * 0.99 5.5
Cyrix 5x86/6x86 clock * 1.00 5.6
Intel Pentium II/III clock * 1.00 5.6
Intel Celeron clock * 1.00 5.6
AMD K7/Athlon clock * 1.00 5.6
Mips R4600 clock * 1.00 5.6
Alpha 21264 clock * 1.99 11.1
AMD K5/K6/K6-2/K6-III clock * 2.00 11.1
UltraSparc II clock * 2.00 11.1
Pentium MMX clock * 2.00 11.1
PowerPC 604/604e/750 clock * 2.00 11.1
Motorola 68060 clock * 2.01 11.2
Motorola 68040 недостаточно информации
IBM S390 недостаточно информации |
Примечание: данный способ вычисления BogoMips не является актуальным для параллельных систем, таких как Intel Pentium и Alpha 21164.
Примечание: способ вычисления BogoMips для процессоров, несовместимых с Intel, похож, но не такой же.
Как определить текущий рейтинг BogoMips
Существует три метода для определения BogoMips:
Посмотрите в /proc/cpuinfo, напр., при помощи `cat /proc/cpuinfo`. Этот метод предпочтительнее других.
Просмотрите то, что было написано во время загрузки в файле syslog (если потребуется, загляните в файлы dmesg или syslogk). В этих файлах указана точная информация.
При помощи программы bogomips. Это рекомендуется для не-Linux систем, по причинам описанным ниже.
Программу BogoMips можно использовать для систем не-Linux, таких как Cray и
т.д. Выдержка из файла readme, написанного Jeff Tranter,
jeff_tranter@mitel.com:
"Устав перезагружать свою систему, вы можете посмотреть, сколько BogoMIPS
она сегодня выдает [...] "Bogomips" - это отдельная программа,
которая показывает быстродействие вышей системы, используя самый
известный алгоритм. Программа использует тот же код, что и ядро Linux при
загрузке, но работает как, пользовательская программа. [...] Версия 1.3 BogoMIPs может быть установлена и запущена на любой системе, которая поддерживает компилятор и библиотеку ANSI C."
Примечание: из-за загрузки системы Linux значение, вычисляемое этой программой,
может быть ниже, чем на самом деле. На самом деле, любая пользовательская программа
не может дать более точную информацию, чем BogoMips, вычисленное при
загрузке системы. Поэтому ниже приводятся только значения вычисленные, при загрузке.
Удостоверьтесь, что файл
sunsite.unc.edu:/pub/Linux/system/status/bogo-1.2.tar.gz/ содержит
последнюю версию 1.3 (на текущий момент). Но благодаря своей высокой
совместимости, она должна откомпилироваться почти на любой системе с
компилятором C.
Разница в рейтингах BogoMips
Linus Torvalds, torvalds@cc.helsinki.fi объясняет,
почему бывают различия в рейтингах BogoMips, в c.o.l.development, от 28 апреля 1994:
"BogoMips дает числовой результат, и вы хотите чтобы, он был одинаковым все время.
Но обычно вы будете получать разные числа, если скорость работы близка к предельной."
Также, если вы не скомпилировали ядро специально для своего процессора, то
может получиться несовпадение рейтинга BogoMips.
Эта проблема присуща различным x86 процессорам (Intel и его клоны).
Но, к счастью, она решается просто: откомпилируйте ядро специально для своего процессора.
Примечание: на алгоритм BogoMips, вопреки распространенному мнению, версия ядра НЕ влияет .
BogoMips ... failed
Эта глава родилась из огромного числа вопросов появившихся в новостях и
полученных мною по почте, напр., Lily, lbliao@alumni.caltech.edu, и Pierre
Frenkiel, frenkiel@cdfap2.in2p3.fr. в марте 1995 они спрашивали:
"Когда я загружаю Linux, то я получаю следующее сообщение:
Calibrating delay loop.. ok - 23.96 BogoMips
failed.
Где/почему возникает ошибка в цикле настройки задержки?' "
Ошибки не было. Если бы она произошла, то вы бы получили сообщение
"Calibrating delay loop.. failed"
Скорее всего, это случилось из-за драйвера какого-нибудь устройства, если у вас не
подключено это устройство. Сразу после подсчета рейтинга BogoMips
инициализируются все драйверы. Первыми идут устройства SCSI, затем сетевые устройства,
и т.д. О любой неисправности сразу сообщается. Из-за частых отказов, достопримечательностью является драйвер AHA152x. Другими причинами, по которым произошел сбой драйверов (а не подсчета рейтинга BogoMips), являются - сбои системы, большие задержки, зависание системы, произошедшие близко по времени (немного до или сразу после) к выводу "ok - xx.xx BogoMips".
Так как в версии Linux 1.2 многие сообщения об ошибках доработаны,
то установите эту версию или выше для того, чтобы узнать, какой именно драйвер
является причиной неудач. А так же откомпилируйте машину, чтобы она содержала только нужные драйвера.
Похожие процессоры (Cyrix, NexGen, AMD)
Процессорам, типа Cyrix 486 необходима специальная программа,
включающая кэш (эту программу иногда называют - BogoBoost). Рейтинг BogoMips у Cyrix 5x86 и 6x86 CPU резко увеличивается, если в BIOS включить опцию branch-prediction. Заметьте, что увеличение скорости работы имеет свой предел. Есть несколько пакетов для настройки процессоров Cyrix: bogoboost, cx5x86mod, set6x86. Их архивы можно найти на известных сайтах. Еще говорят, что Cyrix 6x86 показывает лучшие результаты с ядром, собранным для 486, а не для Pentium.
Информация о машине на основе процессора NexGen 386-enhanced (Nx586), приведена в одном разделе с 386. Несмотря на то, что они работают как Pentium, по рейтингу BogoMips они относятся именно к 386
AMD 5x86, так же называемые AMD 486DX5 - это учетверенные машины 486/33,
поэтому они находятся в одном разделе с другими 486 CPU. Процессоры AMD K5 и K6 являются Pentium-совместимыми CPU.
Почему надо обращать внимание на рейтинг BogoMips
Разрешите объяснить мне две причины, по которым надо уделять внимание рейтингу BogoMips,
получившемуся при загрузке Linux:
Для того чтобы увидеть, на сколько отклоняется рейтинг от присущего машине по типу процессора, частоте и кэшу. С точки зрения рейтинга, самыми уязвимыми местами у систем являются:
настройки кэша основной памяти (отложенная запись отрицательно влияет на рейтинг BogoMips, часто он бывает ниже 5; лучше использовать прямую запись)
кнопка turbo (должна быть включена)
программно эмулированный BIOS псевдо-кэш (включите настоящий кэш)
и другие подобные настройки кэша и рабочих частот, также иногда относящиеся к BIOS
Вы хотите узнать, быстрее ли ваша система по сравнению с моей? Конечно, это абсолютно
некорректно, ненадежно и ненужно, но это общая "болезнь" всех программ тестирования
производительности. Поэтому, почему бы и нет? Эта глупость никогда никого не останавливала? :-)
Замечание: более серьезно эта тема затронута в Linux Benchmarking Howto, написанном Andru D. Balsa.