Загадочные BogoMIPS’ы
Давно хотел сделать статейку о том, что такое BogoMIPS’ы. Наконец руки дошли и до этого
Когда-то в юнлсти я обратил внимание на то, что при начальной загрузке ядра Linux выдаётся сообщение примерно такого вида:
Calibrating delay loop… 1699 BogoMIPS
Оказывается, в ядре Линукс — это способ измерения оценки скорости исполнения процессорных инструкций на компьютере, он предназначен для калибровки внутренних циклов ядра.
Теория: Показать
BogoMIPS’ы можно определить как «число миллионов раз в секунду, когда процессор может ничего не делать» («the number of million times per second a processor can do absolutely nothing»).
Это собственное изобретение Линуса. В версии ядра 0.99.11 от 11 июля 1993 года была нужда в цикле синхронизации для калибровки скорости процессора компа. Поэтому во время загрузки ядро измеряет, насколько быстро на компьютере выполняется определенный цикл. Приставка «Bogo» происходит от слова «bogus» (англ. «фальшивка», «подделка»). Поэтому значение BogoMIPS’ов даёт некоторое представление о скорости процессора, но при этом это значение очень ненаучно. Вывод этого значения был немного полезен для отладки и проверки работоспособности кэшей компьютеров и работы кнопки «Турбо» (когда она ещё была на системниках).
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’ов для процессоров с не Intel-архитектурой похож, но не всегда, так как он пишется на другой реализации языкя ассемблера.
Методов определения богомипсов три:
- (самый предпочтительный) просмотр в /proc/cpuinfo (например так:
cat /proc/cpuinfo | grep -i bogomips
- просмотр вывода системного журнала для контроля, что было напечатано во время загрузки (с помощью dmesg или syslogk). Иногда информация всё ещё может находиться на загрузочной консоли.
- (рекомендуется только для не Linux-систем) используя отдельную программу bogomips..
Теперь практика. Действующие, гм..., лица и устройства: Показать
Тип | Сетевое имя | Бренд, Модель /Аппаратная ревизия |
ОС (прошивка) |
Процессор | ОЗУ |
Компьютер | soulhome | — | Debian 10 | Intel Celeron G1610@2.6ГГц | 16Гб |
VPS-сервер | gor | QEMU/KVM | Debian 9 | Intel Celeron@2.1ГГц | 1Гб |
Нетбук | asus4g | Asus Eee PC 4G (701) | Debian 9 | Intel Celeron M ULV 353@900МГц, работает на частоте 630МГц |
2Гб |
Маршрутизатор | hive | D-Link DIR-320/A2E | DebWRT | Broadcom BCM3302 v2.9@240МГц | 32Мб |
IPTV STB-приставка | x96mini | DQiDianZ X96 mini | armbian 5.67 | Amlogic S905W, 4xARM Cortex-A53@1,5ГГц | 2Гб |
Маршрутизатор | linksys | Linksys WRT300N/1.1 | DD-WRT v24-sp2 mega v1.51.2 | Broadcom BCM4705L@300МГц | 32Мб |
Маршрутизатор | midge | Edimax BR-6104KP/1.3.r510 | flyrouter3-office_usb | ADMtek 5120P@170МГц | 16Мб |
Маршрутизатор | tplink | TP-Link TL-WR841ND/8.1 | OpenWRT Attitude Adjustment 12.09, r36088 | Atheros AR9341@535МГц | 32Мб |
IPTV STB-приставка | mag250 | TeleTec MAG-250 Micro | 0.2.18-r22-250 | STMicroelectronics STi7105@450МГц | 256Мб |
Смартфон | k3note | Lenovo K3 Note | Android 5.1 | MediaTek MT6752, 8xARM Cortex-A53@1,7ГГц | 2Гб |
Маршрутизатор | gw | D-Link DIR-300/A/C1E | 2.5.7 | Realtek RTL8196C@390МГц | 32Мб |
На всех (почти) подконтрольных мне домашних железках с ОСью/прошивкой на ядре Linux настроил авторизацию по ключу по протоколу SSH. Кое-где из-за старости и ущербности и отстуствия сорременных алгоритмов обмена ключей прищлось в /~.ssh/config прописать
Host <узел> KexAlgorithms +diffie-hellman-group1-sha1
чтобы не писать в командной строке конструкцию вида:
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 <узел> 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version'
На железках, в которых dropbear кроме motd выдавал ещё и login banner — пришлось пойти на крайние меры путём убийства процесса dropbear и старта его без указания файла с банером, т. е. вместо процесса
dropbear -b /tmp/loginprompt -r /tmp/root/.ssh/ssh_host_rsa_key -d /tmp/root/.ssh/ssh_host_dss_key -p 22
делаю
killall dropbear
и стартую процесс
dropbear -r /tmp/root/.ssh/ssh_host_rsa_key -d /tmp/root/.ssh/ssh_host_dss_key -p 22
Авторизацию по ключу сделал так:
cat ~/.ssh/id_rsa.pub | ssh <узел> 'cat >> .ssh/authorized_keys'
Затем на всех узлах выполнял код
ssh <узел> 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version'
Полученный результат я свёл на скрин с инфой (1920x1080): Показать
Текстовая расшифровка изображения (вдруг кому пригодится): Показать
soul@soulhome:~$ cat /proc/cpuinfo | grep -i bogomips && cat /proc/version bogomips : 5188.12 bogomips : 5188.12 Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u5 (2019-08-11) soul@soulhome:~$ ssh gor 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' bogomips : 4199.99 Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) soul@soulhome:~$ ssh asus4g 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' bogomips : 1260.10 Linux version 4.9.0-6-686-pae (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) soul@soulhome:~$ ssh hive 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' BogoMIPS : 239.10 Linux version 2.6.34.5 (amain@amain-laptop) (gcc version 4.3.3 (GCC) ) #1 Sun Sep 26 18:20:27 CEST 2010 soul@soulhome:~$ ssh x96mini 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' BogoMIPS : 48.00 BogoMIPS : 48.00 BogoMIPS : 48.00 BogoMIPS : 48.00 Linux version 5.1.0-rc5-next-20190416-aml-s905-gde3c659c8-dirty (root@vbox) (gcc version 7.4.1 20181213 [linaro-7.4-2019.02 revision 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02)) #5.78 SMP PREEMPT Tue Apr 16 13:56:07 MSK 2019 soul@soulhome:~$ ssh linksys 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' BogoMIPS : 299.82 Linux version 2.4.36 (root@dd-wrt) (gcc version 3.4.6 (OpenWrt-2.0)) #2827 Thu Jun 19 08:30:07 CEST 2008 soul@soulhome:~$ ssh midge 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' BogoMIPS : 174.48 Linux version 2.4.32 (builder@work) (gcc version 3.4.5 (ZFT Lab. and FlyRouter Team)) #2 Вто Мар 24 21:44:31 EET 2009 soul@soulhome:~$ ssh tplink 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' BogoMIPS : 266.64 Linux version 3.3.8 (blogic@Debian-60-squeeze-64-minimal) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #1 Sat Mar 23 16:49:30 UTC 2013 soul@soulhome:~$ ssh k3note 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' BogoMIPS : 26.00 BogoMIPS : 26.00 BogoMIPS : 26.00 Linux version 3.10.65+ (buildslave@shws40) (gcc version 4.9 20140514 (mtk-20150408) (GCC) ) #1 SMP PREEMPT Wed Oct 28 14:17:24 CST 2015 soul@soulhome:~$ ssh mag250 'cat /proc/cpuinfo | grep -i bogomips && cat /proc/version' bogomips : 444.41 Linux version 2.6.32.59_stm24_0211-MAG250_7105 (dmgrib@Server01.localdomain) (gcc version 4.6.3 20120313 (STMicroelectronics/Linux Base 4.6.3-106) (GCC) ) #41 PREEMPT Thu Jun 8 13:01:38 EEST 2017 soul@soulhome:~$ telnet -E dlink Trying 10.9.1.1... Connected to dlink. Escape character is 'off'. Dlink-Router login: soul Password: Welcome to _______ ___ __ ____ _ _ ___ | ___ \ | | |__|| \ | || | / / | | | || ___ | |__ __ | \| || |/ / | |___| || |___| | || || |\ || \ |_______/ |______||__||_| \____||_|\___\ = Building Networks for People = BusyBox v1.19.2 (2016-10-19 16:25:25 MSK) built-in shell (ash) Enter 'help' for a list of built-in commands. soul@dlink:$ cat /proc/cpuinfo | grep -i bogomips BogoMIPS : 389.12 soul@dlink:$ cat /proc/version Linux version 2.6.30.9 (builder@rd) (gcc version 4.4.5-1.5.5p2 (GCC) ) #1 Wed Oct 19 16:21:12 MSK 2016 soul@dlink:$ exit Connection closed by foreign host. soul@soulhome:~$
Источники:
http://tldp.org/HOWTO/BogoMips/index.html
http://www.clifton.nl/bogo-faq.html
https://ru.wikipedia.org/wiki/BogoMIPS