系统未达到100%CPU如何排除故障

时间:2012-05-29 09:29:36

标签: c++ performance architecture profiling

我有一个应用程序(基本上是C ++应用程序),它具有以下属性

  • 多线程
  • 每个线程都有自己的线程属性(如堆栈大小等)。
  • 多个过程(即将运行多个过程)。
  • 使用8核处理器运行。
  • 使用共享内存/ IPC /扩展堆管理(分配/释放),系统睡眠等。

所以现在,我应该在最大CPU处找到系统CAPS。理想的方法是将系统加载到100%CPU,然后检查系统支持的CAPS(成功)。

我知道,在复杂的系统中,CPU对于上下文切换,页面交换,I / O等都是“死的”。 但我的系统最大能够以95%的CPU运行(不论负载如何都不超过这个)。所以这里的想法是找出这些真正有助于“CPU吃”的点,然后看看我是否可以设计它们来减少/消除未使用的CPU。

问题

  1. 我们如何找出哪个IO /上下文切换...等是不可征服的5%CPU的原因?这有什么工具吗?我知道OProfile / Quantify和vmstat报告。但他们都不会提供这些信息。
  2. 可能有一些我不知道的操作 - 这可能会限制MAX CPU利用率。任何链接/文档可以帮助我理解一组将减少CPU使用量的详细操作,这将非常有帮助。
  3. 编辑1: 添加了更多信息 一个。所讨论的操作系统是SUSE10 Linux服务器 湾CAPS - 它是您每秒可以在系统上运行的平均CALLS。基本上是电信术语 - 但它可以被认为是通用的 - 假设您的应用程序提供协议实现。你每秒可以进行多少协议调用?

1 个答案:

答案 0 :(得分:2)

“100%CPU”是一个方便的工程概念,而不是数学绝对。它没有客观的定义。例如,等待DRAM的时间通常被视为CPU时间,但等待Flash的时间计为I / O时间。随着我的硬件开启,我会说闪存和DRAM都是固态单元格组织的存储器,并且可以对待它们。

因此,在这种情况下,您的系统以“100%CPU”运行以用于工程目的。负载是CPU限制的,您可以在此状态下测量每秒呼叫数。