Linux 基准测试精华

作者:Wim van Dorst

Linux 内核中的某些设备驱动程序需要定时延迟。它们要么需要非常短的延迟,要么必须非常精确地确定延迟。简单的非忙循环无法做到这一点。因此,Linus Torvalds 在启动过程中添加了一个校准,以预先确定特定的忙循环算法在一秒钟内可以计算多少次。这个预定值,称为 loops_per_second,用于设备驱动程序中,以精确测量时间延迟。

为了好玩,Linus 还添加了一个打印语句,将这个预定值(除以 500,000)作为 BogoMips 呈现出来。Linus 显然很喜欢看到数百万 Linux 用户盯着他们的电脑,被这些虚假的 MIPS 搞得一头雾水。请注意,BogoMips 与名称所暗示的每秒百万条指令没有任何关系;这就是它们是虚假的原因。

关注 Linux 启动时显示的 BogoMips 的唯一严肃理由是看看它是否在特定处理器、其时钟频率和可能存在的缓存的适当范围内。486 系统尤其容易出现 RAM 缓存、Turbo 按钮等设置错误。

期望值

人们不断在 Usenet 上询问:“我有一颗 XYZ CPU,运行频率为 clock MHz。它应该跑多少 BogoMips?” 答案可以从下表计算得出

Intel/AMD 386SX    clock * 0.14 (± 0.01)
Intel/AMD 386DX    clock * 0.18 (± 0.01)
Cyrix/IBM 486      clock * 0.33 (± 0.04)
Intel/AMD 486      clock * 0.50 (± 0.01)
Pentium            clock * 0.40 (± 0.01)
680x0              (insufficient data)
PowerPC            clock * 0.77 (± 0.02)
Mips               (insufficient data)
Alpha              clock * 0.99 (± 0.01)

从上面的计算中,我们看到几个重要的点。首先,Intel 和 AMD 486 CPU 显示的 BogoMips 与 Cyrix 和 IBM 486 CPU 不同。这并不意味着它们具有不同的感知性能;这仅仅意味着它们处理忙循环算法的方式不同。

该表还显示,奔腾处理器没有预期的外推乘法因子。这是因为特定的忙循环算法没有针对奔腾处理器的并行性进行优化。

摩托罗拉、PowerPC、Mips 和 Alpha 处理器的 BogoMips 计算与 Intel 类型处理器的计算类似。然而,由于非忙循环算法是用汇编程序编码的,因此它们不可能完全相同。它清楚地表明,CPU 之间 BogoMips 的比较确实是虚假的,即使是两个不同的 Intel 类型 CPU 之间也是如此。

最后但并非最不重要的一点是,您会看到乘法因子允许约 0.01 的变化。BogoMips 计算循环是“量化的”(Linus 的术语),因此您很可能始终获得完全相同的数字。然而,如果速度恰好在边缘,则小的变化,例如中断的不同长度,将导致您机器的 BogoMips 发生变化。

最常见的问题

“当我启动 Linux 时,我收到消息

Calibrating delay loop.. ok - 23.96 BogoMips
failed

校准延迟循环在哪里或为什么失败?”

显而易见的答案是它没有失败。如果它失败了,文本应该是

Calibrating delay loop.. failed

可能确实失败的是某些小工具的驱动程序,这些小工具可能不在机器中。关键是在计算 BogoMips 之后,所有设备驱动程序都会被初始化:首先是 SCSI 设备,然后是网络设备等。这些初始化中的任何失败都会如实报告。AHA152x 驱动器以这种故障而闻名。驱动程序故障的其他影响(而不是 BogoMips 计算失败)是系统崩溃、长时间等待和完全系统锁定。

由于 Linux 1.2 以来的许多错误消息都得到了改进,因此请升级到至少该版本以找出哪个特定驱动程序出现故障。

独立 BogoMips 程序

对于没有 Linux 系统的人,或者对于那些不想一次又一次重启系统的人,可以在标准存档中找到用于计算 BogoMips 的独立程序(例如,在 sunsite.unc.edu 的 /pub/Linux/system/Status/bogo-1.2.tar.gz 中)。在 Linux 上,默认情况下,它运行与 Linux 内核启动时使用的代码相同的代码,但作为用户程序运行。请注意,由于系统负载,使用独立程序计算的值可能低于您运行的 CPU 的预期值,并且低于启动期间报告的值。对于非 Linux 系统,可以使用可移植的 C 版本,该版本可以在任何支持 ANSI C 编译器和库的系统上运行。

完整参考表:BogoMips Mini-HOWTO

BogoMips mini-HOWTO 给出了各种系统报告的 BogoMips 的完整表格。BogoMips 参考资料超过 250 个,这些参考资料在 Usenet 上报告,或直接通过电子邮件发送给维护者,其中列出了有关 CPU 类型、时钟速度、BogoMips 以及报告者的姓名和电子邮件地址的信息。例如,当前版本的 BogoMips Mini-HOWTO 中报告的最低和最高 BogoMips 是

最低:H. Peter Anwin pa@nwu.edu 386SX/16 387 nocache 0.57 BogoMips 最高:David Mosberger-Tang davidm@cs.arizona.edu Alpha 21064A/275 273.37 BogoMips

在 BogoMips mini-HOWTO 中,列出了符合和不符合上述 BogoMips 计算方法的值。不符合要求的组被命名为“配置奇怪或错误”,因为不符合要求并不一定意味着系统配置错误。

基准测试

BogoMips 可用于查看您的系统是否比我的系统更快。当然,这是完全错误、不可靠、毫无根据且完全无用的,但所有基准测试都存在这个问题,所以为什么不使用它呢?这种固有的愚蠢性以前从未阻止人们使用基准测试,不是吗?[给幽默感不足者的提示:关于这一点,编辑不会接受愤怒的来信。—Ed]

Wim Dorst (Dorst) Isolde van Dorst 是作者美丽的女儿。她刚满一岁,现在正在花园里玩耍,走在那仍然陌生、痒痒的东西上:草。可以通过电子邮件 isolde@clifton.hobby.nl 联系到她

加载 Disqus 评论