2

如何测量互斥体给操作系统的时间量?主要目标是检测一个互斥体,它会在最长时间内阻塞线程。

PS:我试过oprofile。它报告 30% 的时间花在 vmlinux/.poll_idle 中。这是出乎意料的,因为该应用程序旨在占用其核心的 100%。因此,我怀疑在等待某个互斥锁时将时间返回给操作系统,并且 oprofile 将其报告为空闲时间。

4

4 回答 4

3

轮廓。

每当问题是“什么真正需要 [最| 最少] 时间?”时,答案总是“找出概况。”。

于 2009-08-06T12:57:59.933 回答
1

正如建议的那样 - 配置文件,但在您要测量什么之前决定 - 已用时间(线程被阻塞的时间)或用户/内核时间(执行同步所花费的时间)。在不同的情况下,您可能想要测量一个或另一个,或两者兼而有之。

于 2009-08-06T13:04:02.357 回答
0

您可以使用linux 上的OProfile来分析您的程序。然后过滤掉您的结果以查看pthread_mutex_lock()每个互斥锁或执行锁定的更高级别函数所花费的时间。由于程序将在锁定函数调用内部阻塞,直到获取互斥体,分析在该函数中花费的时间应该让您了解哪些互斥体是最昂贵的。

于 2009-08-06T13:39:33.857 回答
0
start = GetTime();
Mutex.Lock();
stop = GetTime();

elapsedTime = stop - start;

elaspedTime 是获取互斥锁所花费的时间。如果它大于某个小的值,那是因为另一个线程具有互斥锁。这不会显示操作系统拥有互斥锁多长时间,只会显示另一个线程拥有它。

于 2009-08-06T15:06:30.377 回答