首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析和分析多线程应用程序

问分析和分析多线程应用程序
EN

Stack Overflow用户
提问于 2012-02-29 15:33:00
回答 4查看 5.5K关注 0票数 7

我们有一个多线程应用程序,它具有跨多个管道阶段的大量数据包处理。该应用程序在Linux下使用C语言。

整个应用程序运行良好,没有内存泄漏或线程安全问题。然而,为了分析应用程序,我们如何分析和分析线程呢?

我们特别感兴趣的是:

  1. 每个线程所做的资源使用情况。
  2. 线程获取锁的争用频率和时间
  3. 由于同步而产生的间接费用
  4. 系统中的任何瓶颈
  5. 我们能获得的最佳系统吞吐量是多少?

有什么最好的技术和工具可用于相同的?

EN

回答 4

Stack Overflow用户

发布于 2012-04-28 20:13:17

看看英特尔VTune放大器XE (以前的…)英特尔线程配置文件),看看它是否会满足您的需要。这个和其他Intel开发工具都是可用的免费非商业用途。

在视频时间线在英特尔VTune放大器XE中的应用中,演示了多线程应用程序的时间线。演示者使用图形显示来显示锁活动,以及如何深入到导致序列化的特定锁的源行。在9:20,演示者提到“使用框架API,您可以在代码中以编程方式标记某些事件或阶段,这些标记将出现在时间线上。”

票数 3
EN

Stack Overflow用户

发布于 2012-02-29 20:07:34

几年前我研究过类似的系统。我就是这样做的:

第一步:消除单个线程中不必要的时间占用者.为此,我使用了这一技术。这一点很重要,因为整个消息传递系统受到其部件速度的限制。

第二步,这一部分是艰苦的工作,但它是有回报的。对于每个线程,打印一个时间戳日志,显示每条消息发送、接收和操作的时间。然后将日志合并到一个共同的时间线中,并研究它。您正在寻找的是( a)不必要的重传,例如由于超时,b)从接收消息到执行消息之间的额外延迟。例如,如果一个线程的输入队列中有多个消息,其中一些消息可以比其他消息处理得更快,就会发生这种情况。首先处理这些问题是有意义的。

你可能需要在这两者之间交替。

别指望这会很容易。有些程序员太好了,不会被这种肮脏的工作所困扰。但是,你可能会为你能如此快地完成这一切而感到惊喜。

票数 1
EN

Stack Overflow用户

发布于 2012-02-29 15:57:01

1)不知道。linux有一些分析器可用。

2)如果是流水线,那么每个阶段都应该做足够的工作,以确保P队列上的争用最小化。您可以用一些时间来挖掘这个问题--如果一个阶段需要10ms+来处理一个包,那么您可以忘记争用/锁定问题。如果需要100 so,您应该考虑合并几个阶段,以便每个阶段做更多的工作。

3)与(2)相同,除非某些全局数据或其他数据存在单独的同步问题。

4)每秒钟卸载/记录队列计数将是有用的。排在舞台前的队伍最长,领口最窄。

5)不知道--不知道你当前的系统是如何工作的,它运行在什么硬件上等等。有一些“正常”的优化--用对象池消除内存管理器调用,用最重的CPU负载在各个阶段添加额外的线程,诸如此类,但“我们能获得的最佳系统吞吐量是多少?”--太不切实际了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9501960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档