0

请指点我监控哪个tad在毫秒级别运行的工具或方法?谢谢。

假设我有 3 个线程正在运行,我想要如下信息:

 0 - 20ms  thread1 
20 - 40ms  thread2 
40 - 50ms  thread1 
50 - 70ms  thread3 

注意:我更喜欢在不侵入内核的情况下解决这个问题。

编辑 :

  1. 在具有 2.6.21 Linux 内核的 MIPS 平台中

  2. 命令 TOP 可以提供一些关于线程的信息,但不能提供太多信息。

4

4 回答 4

3

您可以使用LTTng通过适当配置的内核来跟踪调度活动(以及许多其他事情!)。

也就是说,我查看了您的 nabble 链接-您真正的问题似乎是您的写入线程阻塞了读取线程,对吗?要考虑尝试的一件事是使用支持并发读写的数据库。或者在读线程处于活动状态时使用锁定协议来阻塞写线程。

例如,您可以有一个 mutex、condvar 和一个 want_read 值。在每次写入之前,写入线程获取互斥体并检查 Wants_read 值。如果它不为零,它会阻塞在 condvar 上。同时,读线程开始时会在互斥锁下增加 Wants_read,完成后,减少它并在 condvar 上广播。当读取线程想要进入时,这应该会导致写入线程在安全时立即阻塞。

于 2009-07-29T02:35:48.213 回答
1

对于您在评论中提到的特定问题,没有 usleep 的线程将使线程忙,这将占用大量处理器资源。然后你会得到一个缓慢的数据库搜索响应。

对于一般情况,如果您想检查线程调度顺序,并且不想麻烦安装 lttng,您可以使用我使用的技巧。我在线程的关键路径中添加了一些简单的系统调用,如打开、关闭、时间和无效参数(与 printf 相比开销较低,并且 printf 有时涉及线程锁定),然后您可以使用 strace 工具跟踪所有这些线程。查看 strace 日志,你可以看到它们是在什么时候调度的,什么时候其他线程被调度进来的。然后你就会大致了解哪个线程花费了最多的时间,以及哪个线程占用了系统的大部分时间。

Lttng 绝对是解决此类问题的最佳工具,前提是您可以使其正常工作。

于 2009-07-29T12:03:04.973 回答
1

Intel Concurrency Checker可以在 windows 和 linux 上运行。没用过,所以不知道很多细节,但是听说会做性能测量。可能值得一试。

于 2009-07-29T16:31:17.590 回答
0

查看性能检查器工具。

于 2009-07-29T02:50:40.203 回答