解释mutrace输出

时间:2019-01-09 11:30:37

标签: c multithreading pthreads mutex

我已经实现了多线程软件应用程序,该应用程序捕获低级以太网数据包数据(使用pcap)并将这些数据包放入环形缓冲区。在单独的线程中,将数据包从环形缓冲区中删除并进行处理。

即我有一个LIFO队列,其中一个线程添加数据,另一个线程取出数据。

性能分析表明,环形缓冲区会很快填满,即,无法像添加数据包一样快地删除数据包。即使在我注释掉接收数据包的线程中的所有处理时,也就是将应用程序简化为仅添加和接收数据包,而不执行其他处理。

我认为可能导致该问题的一件事是队列上的互斥锁争用。

我用mutrace运行了该应用程序,并得到以下输出:

mutrace: Showing 2 most contended mutexes:

Mutex #   Locked  Changed    Cont. tot.Time[ms] avg.Time[ms] max.Time[ms]  Flags
   6    27740      209       35       75.672        0.003       59.944 M-.--.
   5       19       13        0        0.021        0.001        0.004 M-.--.

这似乎表明用于添加/获取数据包的互斥锁(互斥锁6)的争用还算不错,只有0.1%的锁有争执。似乎唯一脱颖而出的是平均值之间的巨大差异。锁定时间和最大锁定时间。其他人是否注意到锁定时间上的巨大差异?可能只是异常现象而已,无需关注吗?

0 个答案:

没有答案