我在扩展多进程/多线程 C++ 应用程序时遇到奇怪的行为。该应用程序包含 10 个独立的进程,通过Unix 域套接字进行通信,每个进程都有大约 100 个执行 IO 的线程以及该 IO 上的多个进程。该系统是OLTP,事务处理时间至关重要。IPC IO 基于在 unix 域套接字上使用 zmq 的 boost 序列化(在我们的本地服务器(两个具有 24 核的旧 xeon)上的所有基准测试中,它足够快)。现在,我们在具有更多内核的系统上观察到极其低的性能!
\n1x Intel\xc2\xae Xeon\xc2\xae X5650 - 虚拟 - 6 核 - TPS 约为 150(预期)
\n1x Intel\xc2\xae Xeon\xc2\xae E5-4669 v4 - 专用 - 32 核 - TPS 约为 150(预期) 700(预期)
\n2x Intel\xc2\xae Xeon\xc2\xae E5-2699 v4 - 专用 - 88 个核心 - TPS 约为 90(应该约为 2000)
在第三台服务器上运行多个基准测试显示处理器能力完全正常。内存带宽和延迟看起来正常。
\nhtop 在内核上显示非常高的时间(红色部分)。所以我们的第一个猜测是某些系统调用需要很长时间才能完成,或者我们在多线程代码中做错了什么。(见下图)perf top报告一个特定的系统调用/内核例程 ( native_queued_spin_lock_slowpath …