跳到主要内容

使用SDKPerf工具与IPC

本节通过 Solace C 消息传递 API 基础的 SDKPerf 测试工具(sdkperf_c)提供了使用 IPC 的示例,这是一个基于 Solace C API 的性能和功能测试工具。本节假设读者已经熟悉 sdkperf_c 的使用。

无需对 sdkperf_c 进行任何修改(除了使用支持 IPC 的 C API 库版本外),即可使该工具使用 IPC。该工具可以通过命令行选项接受“额外”的上下文和会话属性,从而使其能够利用底层 C API 中的新功能。

两个SDKPerf实例之间的IPC

以下代码片段展示了两个 sdkperf_c 实例,它们希望通过事件代理进行通信。第一个实例在主题 foo 上监听消息,第二个实例向主题 foo 发布消息。

sdkperf_c -cip=192.168.160.29 -stl=foo
sdkperf_c -cip=192.168.160.29 -ptl=foo -msa=100 -mn=1000000 -mr=100000

要使两个 sdkperf_c 实例通过共享内存 IPC 通道进行通信,只需更改主机指定符,如下所示。一个实例必须监听传入的 IPC 连接,另一个实例必须进行连接。

sdkperf_c -cip=listen:127.0.0.1 -stl=foo
sdkperf_c -cip=shm:127.0.0.1 -ptl=foo -msa=100 -mn=1000000 -mr=100000

如果要使用 TCP 通道而不是共享内存进行 IPC,可以指定协议为 TCP,如下所示,或者可以省略,因为 TCP 是默认值:

sdkperf_c -cip=listen:127.0.0.1 -stl=foo
sdkperf_c -cip=127.0.0.1 -ptl=foo -msa=100 -mn=1000000 -mr=100000

如果要监听非默认端口(55555),则必须指定端口,如下所示:

sdkperf_c -cip=listen:127.0.0.1:44444 -stl=foo
sdkperf_c -cip=shm:127.0.0.1:44444 -ptl=foo -msa=100 -mn=1000000 -mr=100000

当使用共享内存通信时,可以通过忙等共享内存线程来实现最低可能的延迟。由于两个 sdkperf_c 实例都在同一主机上运行,因此必须仔细配置处理器亲和性,以实现最低可能的延迟。

在下面的代码片段中,sdkperf_c 的 -epl 选项指定了不受现有命令行选项控制的额外属性。在此示例中,-epl 选项用于忙等内部共享内存线程并控制共享内存线程的处理器亲和性。

sdkperf_c -cip=listen:127.0.0.1:44444 -l -lb=2048 -lp=3 -lg=10 -stl=foo -epl=CONTEXT_IPC_SHM_SPIN,-1,CONTEXT_IPC_SHM_THREAD_AFFINITY,4
sdkperf_c -cip=shm:127.0.0.1:44444 -l -ptl=foo -msa=100 -mn=1000000 -mr=100000 -epl=CONTEXT_IPC_SHM_SPIN,-1,CONTEXT_IPC_SHM_THREAD_AFFINITY,8

三个SDKPerf实例之间的IPC

在以下示例中,三个 sdkperf_c 实例相互通信,从而创建一个完整的网状连接,以便每个实例都可以通过 IPC 与其他实例通信。每个实例在两个不同的主题上发布消息,并订阅两个不同的主题。每个实例都监听传入的 IPC 连接,然后主动连接到另一个对等方。

sdkperf_c -cip=listen:127.0.0.1:33333;shm:127.0.0.1:44444 -ptl=a,b -stl=d,f -msa=100 -mn=100000 -mr=10000
sdkperf_c -cip=listen:127.0.0.1:44444;shm:127.0.0.1:55555 -ptl=c,d -stl=a,b,e -msa=100 -mn=100000 -mr
sdkperf_c -cip=listen:127.0.0.1:55555;shm:127.0.0.1:33333 -ptl=e,f -stl=a,b,d -msa=100 -mn=100000 -mr=10000