信号量与R / W信号量之间的性能评估

时间:2013-07-30 14:35:49

标签: linux linux-kernel operating-system linux-device-driver semaphore

我被要求编写测试用例来实际显示信号量的性能,并在更多读者和更少写入者的情况下读取写信号量,反之亦然。 我已经实现了信号量(在内核空间中我们实际上被问到)但没有得到如何编写用例并进行实际的实际评估(明确地)。

2 个答案:

答案 0 :(得分:1)

为什么不开始编写两个版本的代码(Semaphore / R / W Semaphore)。用例取决于所测试的实际功能。它是设备驱动程序吗?它与IO有关吗?与网络有关吗?在不知情的情况下很难提出用例。

一般来说,我会为IO基准测试做的事情是在一组运行的内存占用增加的情况下运行多个模拟。另一组运行可能是在增加的过程负载上。另一种可能是不同的块大小。我会将这些内容与聚合带宽等内容进行比较,看看性能(本例中的总带宽)如何随着这些测试而改变。

同样,如果您正在测试USB驱动程序,那么您的用例可能会完全不同。

答案 1 :(得分:0)

使用自定义信号量,编写以下2个C程序并编译它们

  • reader.c
  • writer.c

作为一个简单的基本测试,编写一个shell脚本test.sh并添加命令以加载测试二进制文件,如下所示。

#!/bin/sh

./reader &
./reader &
./reader &
./reader &
./writer &

./test.sh方式启动上述shell脚本将启动4位读者和1位作者。根据您的测试场景自定义此项。

确保程序正常运行,即在尝试分析性能之前先验证数据是否正确交换。

一旦确定IPC按预期工作,请分析cpu使用情况。在启动test.sh之前,请在另一个终端中运行 top 命令。在测试脚本的运行时间内观察不同数量的读/写器的cpu使用模式。

您还可以使用以下命令启动单个二进制文件(或在测试脚本中)

  • <强> time <binary>
    打印总生命周期等待内核驱动程序的时间

  • <强> perf record <binary>
    完成后,运行perf annotate main
    获取在代码的各个部分中花费的相对时间