0

我有一个具有以下属性的应用程序(基本上是 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 使用率的详细操作集的链接/文档都会非常有帮助。

编辑 1: 添加了更多
信息 有问题的操作系统是 SUSE10 Linux 服务器。
湾。CAPS - 这是您每秒可以在系统上运行的平均 CALLS。基本上是一个电信术语 - 但它可以被认为是通用的 - 假设您的应用程序提供协议实现。您每秒可以进行多少次协议调用?

4

1 回答 1

2

“100% CPU”是一个方便的工程概念,不是数学上的绝对值。它的含义没有客观的定义。例如,在 DRAM 上等待的时间通常计为 CPU 时间,但在 Flash 上等待的时间则计为 I/O 时间。戴上我的硬件帽,我会说闪存和 DRAM 都是固态单元组织存储器,可以同样对待。

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

于 2012-05-29T10:33:10.363 回答