负载生成
当给定的计算机系统处于空闲状态,即什么都不做时,它通常会非常迅速地对外部事件做出反应。当负载加重时,系统将对外部事件做出响应(stress-ng 未被调用)。 但是,在许多系统上,当应用负载时,这种行为可能会带来巨大的变化。因此,在没有任何负载的情况下测量实时平台的延迟结果通常不具有代表性。理想情况下,运行实际的应用程序软件将允许度量实际系统经历的实际延迟。然而,该软件并不总是可用,或者由于某种原因,运行该软件将不实用。此外,如果程序很少执行某些特定的操作,那么捕获最长的延迟可能需要大量的时间。对于这些情况,通常最好在延迟测量期间运行一些人工负载。
现在有许多工具可用于此目的,但本次测试选择了stress-ng(版本0.13.0),因为它是最灵活的实用程序之一,并且已经在行业中广泛使用。它专门设计来用于测试各种操作系统接口和计算机平台的物理子系统。stress-ng的最初目的是发现硬件问题,如热过载。目前,该工具可以用于产生多种压力源以实施广泛的压力测试,例如,检测内核错误并执行基准测试。但最重要的是,它还可以用来发现来自实时系统的意外延迟。
总的来说,stress-ng实现了超过220种不同的压力源,这使得设计一套全面的测试成为可能。本研究应用了所有类别的压力源以便对系统不同部分施加压力,尽可能的模拟实际使用情况。为了获得关于系统行为的广泛信息,我们总共选择了五种不同的压力类别进行进一步的检查。一旦执行了某个类别,四个进程都会启动,每个核一个进程。这就确保了所有的核都有相同数量的负载。
- Idle:系统没有任何后台工作程序执行计算。系统将能够尽快做出响应(未调用stress-ng )。
- CPU:创建可执行各种浮点算术运算负载工作线程。这将增加CPU和缓存的压力(stress-ng --matrix 4)。
- OS:创建能够执行各种set*()系统调用的负载。这将增强内核操作和数据结构的压力(stress-ng --set 4)。
- Memory:创建连续调用mmap()操作并写入已分配的内存的工作线程。这将增加内存处理压力(stress-ng --vm 4)。
- storage:创建可重复创建和删除目录的工作线程。这将增强文件系统和I/O压力(stress-ng --dir 4)。
我们遵循了一个简单的原则,为每个类别选择最合适的压力源。首先,对所有可用的压力源进行简要测试,并记录测量的延迟。然后,根据观察到的最大延迟对结果进行排序,从这个列表中,可以选择最合适的压力源。最后的选择是为了让每个类别都代表嵌入式实时系统中的典型工作负载,但其方式可以发现一些有趣的结果。因此,通过一些精心设计的论点,本可以找到产生更长延迟的压力源,但由于它们不能代表实际情况,这些选择就被忽视了。