我被要求编写测试用例来实际展示信号量和读写信号量的性能,以防读者更多而作者更少,反之亦然。我已经实现了信号量(实际上是在内核空间中我们被问到的),但没有了解如何编写用例并对其进行实时实际评估(明确地)。
2 回答
你为什么不直接写你的两个版本的代码(Semaphore / R/W Semaphore)来开始。用例将取决于正在测试的实际功能。它是设备驱动程序吗?它与IO有关吗?和网络有关系吗?在不知道这一点的情况下很难提出用例。
一般来说,我会为 IO 基准测试做的事情是在一组运行的内存占用增加的情况下运行多个模拟。另一组运行可能会超过不断增加的进程负载。另一个可能超过不同的块大小。我会将每一个与聚合带宽之类的东西进行比较,看看性能(在这种情况下是聚合带宽)在这些测试中是如何变化的。
同样,如果您正在测试 USB 驱动程序之类的东西,您的用例可能会完全不同。
使用您的自定义信号量,编写以下 2 个 C 程序并编译它们
reader.c
writer.c
作为一个简单的基本测试,编写一个 shell 脚本test.sh
并添加您的命令来加载测试二进制文件,如下所示。
#!/bin/sh
./reader &
./reader &
./reader &
./reader &
./writer &
启动上述 shell 脚本./test.sh
将启动 4 个读取器和 1 个写入器。根据您的测试场景自定义它。
确保您的程序运行正常,即在尝试分析性能之前首先验证数据交换是否正确。
一旦您确定 IPC 按预期工作,请分析 CPU 使用情况。在启动之前,在另一个终端中test.sh
运行该命令。top
在测试脚本运行期间观察不同数量的读取器/写入器的 CPU 使用模式。
您还可以使用以下命令启动单个二进制文件(或在测试脚本中):
time <binary>
打印等待内核驱动程序的总生命周期和时间。perf record <binary>
并在完成后,运行perf annotate main
以获取在代码的各个部分花费的相对时间量。