我有一个具有以下属性的应用程序(基本上是 C++ 应用程序)
- 多线程
- 每个线程都有自己的线程属性(如堆栈大小等)。
- 多进程(即将运行多个进程)。
- 在 8 核处理器上运行。
- 使用共享内存/IPC/扩展堆管理(分配/释放)、系统睡眠等。
所以现在,我应该在最大 CPU 下找到系统 CAPS。理想的方法是将系统加载到 100% CPU,然后他们检查系统支持的 CAPS(成功)。
我知道,在复杂的系统中,CPU 将因上下文切换、页面交换、I/O 等而“死”。但我的系统最大能够以 95% 的 CPU 运行(不超过该值,与负载无关)。所以这里的想法是找出真正导致“CPU消耗”的这些点,然后看看我是否可以设计它们来减少/消除未使用的CPU。
问题
- 我们如何找出哪个 IO/上下文切换...等是不可征服的 5% CPU 的原因?有什么工具可以做到这一点吗?我知道 OProfile/Quantify 和 vmstat 报告。但他们都不会提供这些信息。
- 可能有一些我不知道的操作 - 这可能会限制 MAX CPU 利用率。任何可以帮助我理解将减少 CPU 使用率的详细操作集的链接/文档都会非常有帮助。
编辑 1:
添加了更多
信息 有问题的操作系统是 SUSE10 Linux 服务器。
湾。CAPS - 这是您每秒可以在系统上运行的平均 CALLS。基本上是一个电信术语 - 但它可以被认为是通用的 - 假设您的应用程序提供协议实现。您每秒可以进行多少次协议调用?