0

我被要求编写测试用例以实际显示信号量的性能,并在有更多读者和更少编写者的情况下读取写入信号量,反之亦然。 我已经实现了信号量(在内核空间中我们被问到了实际情况),但没有得到如何编写用例,并做了相同的实际实际评估(分类)。信号量和R/W信号量之间的性能评估

+0

它实际上是一个设备驱动程序(一个IPC设备驱动程序)。因此,我们必须实际在两个用例信号和R/W信号的性能:1)更多的读者,少写2)少读,更使写入如何..should我写20生成交流计划这些使用情况-30相同的c程序并通过打开许多终端来运行paralley,或者也可以使用其他方式。之后,我们可以真正看到并观察性能之间的差异。 –

回答

1

为什么不直接写两个版本的代码(Semaphore/R/W Semaphore)来开始。用例将取决于正在测试的实际功能。它是一个设备驱动程序吗?它是否与IO有关?它与网络有关吗?如果不知道这一点,很难想出用例。

一般来说,我会做一些类似于IO基准测试的测试,将会针对一组运行的增加的内存占用情况进行多次模拟。另一组运行可能会越过处理负载。另一个可能会在不同的块大小。我会比较每一个与总带宽之类的东西,看看性能(在这种情况下聚合带宽)是如何在这些测试中发生变化的。

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

+0

它实际上是一个设备驱动程序(一个IPC设备驱动程序)。因此,我们必须实际显示信号和R/W信号的两个用例的表现: 1)更多的读者,少写 2)少读取和写入更多的那么 如何从交流程序..should这些用例我写了20-30个相同的c程序,并通过打开许多终端来运行paralley,或者也有其他方法。 经过上面的介绍,我们可以真正看到和观察性能之间的差异。 –

0

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

  • reader.c
  • writer.c

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

#!/bin/sh 

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

启动上述外壳脚本./test.sh将推出4个读卡器和1个写操作。将其自定义到您的测试场景。

确保您的程序正常运行,即先验证数据是否正确交换,然后再尝试分析性能。

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

您也可以启动单独的二进制文件(或测试脚本)有:

  • time <binary>
    要打印总寿命时间花在等待上的内核驱动程序

  • perf record <binary>
    和完成后,运行perf annotate main
    要获得的代码中的的各部分所花费的时间的相对量。