BogoMips (от «bogus» и « MIPS» ) - это грубое измерение скорости процессора, сделанное ядром Linux при загрузке для калибровки внутреннего цикла занятости . [1] Часто цитируемое определение термина - это «количество миллионов раз в секунду, когда процессор абсолютно ничего не может сделать». [2] [3]
BogoMips - это значение, которое можно использовать для проверки того, входит ли рассматриваемый процессор в надлежащий диапазон аналогичных процессоров, т.е. BogoMips представляет тактовую частоту процессора, а также потенциально присутствующий кэш ЦП . Его нельзя использовать для сравнения производительности разных процессоров. [4]
История
В 1993 году Ларс Вирзениус опубликовал сообщение Usenet [5], объясняющее причины его внедрения в ядро Linux на comp.os.linux:
- [...]
- MIPS - это сокращение от «Миллионы инструкций в секунду». Это мера скорости вычислений процессора. Как и большинство подобных мер, им чаще злоупотребляют, чем используют должным образом (очень сложно справедливо сравнивать MIPS для разных типов компьютеров).
- BogoMips - это собственное изобретение Линуса . Ядро linux версии 0.99.11 (от 11 июля 1993 г.) нуждалось в цикле синхронизации (время слишком короткое и / или должно быть слишком точным для метода ожидания без цикла занятости), который должен быть откалиброван для процессора. скорость машины. Следовательно, ядро во время загрузки измеряет, насколько быстро на компьютере выполняется определенный вид цикла занятости. «Бого» происходит от слова «фальшивка», т. Е. Что-то, что является подделкой. Следовательно, значение BogoMips дает некоторое представление о скорости процессора, но это слишком ненаучно, чтобы называть его иначе, как BogoMips.
- Причины (их две), которые печатаются во время загрузки, заключаются в том, что а) он немного полезен для отладки и для проверки работы кешей и турбо-кнопки компьютера, и б) Линус любит посмеиваться, когда видит запутали людей в новостях.
- [...]
Правильный рейтинг BogoMips
В качестве очень приблизительного ориентира BogoMips можно предварительно рассчитать по следующей таблице. Данный рейтинг типичен для этого процессора с текущей и применимой на тот момент версией Linux . Индекс представляет собой отношение «BogoMips на тактовую частоту» для любого процессора к тому же значению для процессора Intel 386DX для целей сравнения. [6] [7]
Система | Рейтинг | Индекс |
---|---|---|
Intel 8088 | часы × 0,004 | 0,02 |
Intel / AMD 386SX | часы × 0,14 | 0,8 |
Intel / AMD 386DX | часы × 0,18 | 1 (определение) |
Motorola 68030 | часы × 0,25 | 1.4 |
Cyrix / IBM 486 | часы × 0,34 | 1,8 |
Intel Pentium | часы × 0,40 | 2.2 |
Intel 486 | часы × 0,50 | 2,8 |
AMD 5x86 | часы × 0,50 | 2,8 |
MIPS R4000 / R4400 | часы × 0,50 | 2,8 |
ARM9 | часы × 0,50 | 2,8 |
Motorola 68040 | часы × 0,67 | 3,7 |
PowerPC 603 | часы × 0,67 | 3,7 |
Intel StrongARM | часы × 0,66 | 3,7 |
NexGen Nx586 | часы × 0,75 | 4.2 |
PowerPC 601 | часы × 0,84 | 4,7 |
Альфа 21064 / 21064A | часы × 0,99 | 5.5 |
Альфа 21066 / 21066A | часы × 0,99 | 5.5 |
Альфа 21164 / 21164A | часы × 0,99 | 5.5 |
Intel Pentium Pro | часы × 0,99 | 5.5 |
Cyrix 5x86 / 6x86 | часы × 1,00 | 5,6 |
Intel Pentium II / III | часы × 1,00 | 5,6 |
AMD K7 / Athlon | часы × 1,00 | 5,6 |
Intel Celeron | часы × 1,00 | 5,6 |
Intel Itanium | часы × 1,00 | 5,6 |
R4600 | часы × 1,00 | 5,6 |
Hitachi SH-4 | часы × 1,00 | 5,6 |
Raspberry Pi (модель B) | часы × 1,00 | 5,6 |
Intel Itanium 2 | часы × 1,49 | 8,3 |
Альфа 21264 | часы × 1,99 | 11.1 |
ВИА Кентавр | часы × 1,99 | 11.1 |
AMD K5 / K6 / K6-2 / K6-III | часы × 2,00 | 11.1 |
AMD Duron / Athlon XP | часы × 2,00 | 11.1 |
AMD Sempron | часы × 2,00 | 11.1 |
UltraSparc II | часы × 2,00 | 11.1 |
Intel Pentium MMX | часы × 2,00 | 11.1 |
Intel Pentium 4 | часы × 2,00 | 11.1 |
Intel Pentium M | часы × 2,00 | 11.1 |
Intel Core Duo | часы × 2,00 | 11.1 |
Intel Core 2 Duo | часы × 2,00 | 11.1 |
Intel Atom N455 | часы × 2,00 | 11.1 |
Кентавр C6-2 | часы × 2,00 | 11.1 |
PowerPC 604 / 604e / 750 | часы × 2,00 | 11.1 |
Intel Pentium III Coppermine | часы × 2,00 | 11.1 |
Intel Pentium III Xeon | часы × 2,00 | 11.1 |
Motorola 68060 | часы × 2,00 | 11.1 |
Intel Xeon MP (32-бит) ( гиперпоточность ) | часы × 3,97 | 22,1 |
IBM S390 | недостаточно данных (пока) | |
РУКА | недостаточно данных (пока) |
В ядре Linux 2.2.14 настройка кэширования состояния ЦП была перенесена сзади на значение до вычисления BogoMips. Хотя сам алгоритм BogoMips не был изменен, начиная с этого ядра рейтинг BogoMips для текущих процессоров Pentium был вдвое выше, чем рейтинг до изменения. Измененный результат BogoMips не повлиял на реальную производительность процессора. [ необходима цитата ]
В Linux BogoMips можно легко получить, выполнив поиск в файле cpuinfo : [7]
$ grep -i bogomips / proc / cpuinfo
Расчет BogoMIPS
В ядре 2.6.x BogoMIPS реализован в /usr/src/linux/init/calibrate.c
исходном файле ядра. Он вычисляет значение параметра времени ядра Linux loops_per_jiffy
(см. Jiffy ). Объяснение из исходного кода:
/ * * Простой цикл вроде * в то время как (jiffies* start = read_current_timer (); * не пойдет. Поскольку мы действительно не знаем, является ли переключатель jiffy * произошло первым, или значение timer_value было прочитано первым. И некоторые асинхронные * событие может произойти между этими двумя событиями, что приведет к ошибкам в lpj. * * Итак, делаем * 1. pre_start <- Когда мы уверены, что мгновенного переключения не произошло * 2. проверьте переключатель jiffy * 3. start <- значение таймера до или после быстрого переключения * 4. post_start <- Когда мы уверены, что произошло мгновенное переключение * * Обратите внимание, мы ничего не знаем о порядке 2 и 3. * Теперь, глядя на разницу post_start и pre_start, мы можем * проверить, произошло ли какое-либо асинхронное событие или нет * /
loops_per_jiffy
используется для реализации функций udelay
(задержка в микросекундах) и ndelay
(задержка в наносекундах). Эти функции необходимы некоторым драйверам для ожидания оборудования. Обратите внимание, что используется метод ожидания при занятости , поэтому ядро эффективно блокируется при выполнении ndelay
/ udelay
functions. Для i386 архитектура delay_loop
реализована в /usr/src/linux/arch/i386/lib/delay.c
виде:
/ * задержка на основе простого цикла: * / static void delay_loop ( беззнаковые длинные циклы ) { int d0 ; __asm__ __volatile__ ( " \ t jmp 1f \ n " ".align 16 \ n " "1: \ t jmp 2f \ n " ".align 16 \ n " "2: \ t decl% 0 \ n \ t jns 2b" : "= & a" ( d0 ) : "0" ( циклы )); }
эквивалентно следующему коду ассемблера
; ввод: eax = d0 ; вывод: eax = 0 jmp start .align 16 start: jmp body .align 16 body: decl eax jns body
который можно переписать в C-псевдокод
static void delay_loop ( длинные циклы ) { длинные d0 = циклы ; do { - d0 ; } while ( d0 > = 0 ); }
Полную и полную информацию и подробности о BogoMips, а также сотни справочных статей можно найти в (устаревшем) мини-руководстве BogoMips. [4]
Задержки по таймеру
В 2012 году ARM представила новую udelay
реализацию, позволяющую использовать системный таймер, встроенный во многие процессоры ARMv7, вместо цикла «занято-ожидание». Эта реализация была выпущена в версии 3.6 ядра Linux . [8] Задержки на основе таймера более устойчивы в системах, которые используют масштабирование частоты для динамической регулировки скорости процессора во время выполнения, поскольку loops_per_jiffies
значения не обязательно могут масштабироваться линейно. Кроме того, поскольку частота таймера известна заранее, калибровка во время загрузки не требуется.
Одним из побочных эффектов этого изменения является то, что значение BogoMIPS будет отражать частоту таймера, а не частоту ядра процессора. Обычно частота таймера намного ниже максимальной частоты процессора, и некоторые пользователи могут быть удивлены, увидев необычно низкое значение BogoMIPS при сравнении с системами, которые используют традиционные циклы «занято-ожидание».
Смотрите также
- Кнопка Turbo
Рекомендации
- ↑ Ван Дорст, Вим (январь 1996 г.). «Наиболее существенный тест Linux» . Linux Journal . Проверено 22 августа 2008 .
- ↑ Eric S Raymond и Geoff Mackenzie , опубликованные в Интернете в начале 1990-х годов, происхождение неизвестно.
- ^ Раймонд, Эрик С. "Файл жаргона хакеров" .
- ^ а б Ван Дорст, Вим (2 марта 2006 г.). "BogoMips Mini-Howto" (изд. V38) . Проверено 22 августа 2008 .
- ^ Вирзениус, Ларс. «Re: печать и BogoMips» .
- ^ Бекман, Стас. "Что такое BogoMip?" .
- ^ а б «Мини-Howto БогоМипс» .
- ^ Дьякон, Уилл. «ARM: 7452/1: delay: позволяет выбрать реализацию задержки на основе таймера» .
Внешние ссылки
- BogoMips Mini-Howto, V38
- Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.
- Источники классического автономного теста