可抢占内核补丁的 Realfeel 测试
Linux 最初是作为通用操作系统编写的,没有考虑实时应用程序。最近,由于其低成本和开放标准,Linux 对实时社区变得有吸引力。为了使其对实时社区更实用,已经编写了补丁来影响诸如中断延迟和上下文切换之类的事情。这些补丁是公有领域,并且正在成为主线 Linux 树的一部分。
本文讨论了这些补丁之一,即可抢占内核补丁,及其对 Linux 系统中断延迟的影响。该补丁减少了系统测得的中断延迟,使其更适合实时应用程序。
当应用程序运行时,有些会到达等待中断发生的点。也就是说,必须接收到一些数据或发生一些事情,应用程序才能继续进行。中断延迟是衡量应用程序响应中断然后继续进行所需时间量的指标。如果应用程序响应许多中断,它将经历许多延迟。在实时系统中,工程师需要为最坏的情况进行设计,因此必须知道其中最大的中断。
Linux 既是多进程又是多线程操作系统。本文中提出的数字代表了两个不同进程运行的结果。因此,中断延迟数字表示响应中断和更改进程的时间。进程的更改需要存储正在运行进程的缓存数据,并重新加载被阻止进程的缓存数据。对延迟敏感和对安全性不敏感的应用程序可以用单进程多线程方式编写。这将产生更小的延迟数字,因为数据不需要移动。许多操作系统仅提供单进程多线程选项,自动提供更小的延迟时间。因为我们选择运行一个只能以多进程方式执行操作的开源基准测试,所以这些是呈现的数字。未来的工作将包括单进程多线程基准测试。
在这项工作中,中断延迟是使用名为 Realfeel 的开放基准测试来测量的,该基准测试由 Mark Hahn 编写。Realfeel 发出周期性中断并测量计算机响应这些中断所需的时间。响应时间因中断而异。Realfeel 测量这些中断,并通过将测量值放入箱中来生成直方图。关注的测量不是直方图本身,而是最大的中断延迟测量。操作系统的性能可能取决于某些应用程序的平均中断延迟,但实时应用程序更依赖于最大的中断延迟。最大的中断延迟是对最坏情况的预测。对于许多这些应用程序,如果延迟超过限制一次,将导致系统完全失败。因此,基准测试的目的是找到永远不会超过的延迟。
在实时应用程序中,当发出中断时,系统不会处于休眠状态。某种后台操作正在操作系统中发生,或者另一个应用程序正在处理中。基准测试在各种负载条件下运行,范围从处理器计算到系统和网络操作。这项工作着眼于三种负载条件下的最大值,这些负载条件作为脚本文件在系统上运行。“查找”脚本使用 UNIX find 命令在硬盘驱动器上搜索文件。“启动”脚本运行一个脚本,该脚本不断启动一个简单的可执行程序并将少量文本打印到屏幕上。“文件移动”脚本不断地在磁盘上相互复制两个大文件。为了得出真正最坏情况的数字,我们努力使它们承受尽可能最坏的负载。负载是连续运行的,并且可能比系统在实际使用中看到的任何情况都更糟。
该应用程序使用两个内核运行。一个是来自 Galileo 树的 Linux 2.4.19 内核,另一个是具有抢占补丁的相同内核。此补丁由 Robert Love 维护,并已被接受到 2.5 开发内核中。
该基准测试在运行频率为 312.5MHz 的 Power PC 系统上运行。系统控制器芯片是运行频率为 125MHz 的 Marvell Discovery。它已连接到网络,并且没有磁盘驱动器。
结果(见表 1)针对两个内核呈现,所有三个负载脚本都在后台运行。这些结果在表 1 中呈现。结果以直方图的形式存储(见图 1)。由于这项工作的目的是检查在实时环境中使用 Linux 的潜力,因此仅报告最大的中断延迟数。
结果表明,抢占式内核补丁减少了所有负载脚本的最大中断延迟。该补丁将启动脚本和文件移动脚本的最大延迟减少了约 50%。它将查找脚本的最大延迟减少了 100 倍以上。这些改进很容易意味着实时应用程序成功与失败之间的差异。最大中断延迟将始终随应用程序而变化,并且没有标准规定哪个数字将实时与非实时分隔开。

图 1. 延迟直方图
虽然重点是最坏情况下的延迟,但检查图 1 中显示的延迟直方图也很有用。该图是对数图,并且大部分延迟发生在图中带有和不带有补丁的 50 微秒内。带有补丁的数字实际上略小于不带有补丁的数字,直到图的末尾。补丁的主要作用是在图的末尾或尾部。如图所示,补丁基本上缩短了尾部并降低了最大的中断延迟时间。