libzmq在inproc:模式下性能测试

    xiaoxiao2021-12-14  22

    测试环境:

    CPU:Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz * 2 内存:64GB 1333 MHz OS:CentOS release 6.7

    Libzmq: https://github.com/zeromq/libzmq master分支最新代码,版本号 4.2.1

    测试准备:

    测试代码perf/inproc_thr.cpp 主要改动(具体改动见附录diff)pull、push分别绑定不同的core(2,3) 测试数据量message count为 200000000

    结果展示

    TablesNo zero memZero mem644152871 [msg/s] 2126.270 [Mb/s]3697188 [msg/s] 1892.960 [Mb/s]1282525915 [msg/s] 2586.537 [Mb/s]2317762 [msg/s] 2373.388 [Mb/s]2562594865 [msg/s] 5314.284 [Mb/s]2445809 [msg/s] 5009.017 [Mb/s]4002325507 [msg/s] 7441.622 [Mb/s]2100720 [msg/s] 6722.304 [Mb/s]5002510163 [msg/s] 10040.652 [Mb/s]2158671 [msg/s] 8634.684 [Mb/s]7002411668 [msg/s] 13505.341 [Mb/s]2147783 [msg/s] 12027.585 [Mb/s]

    附录:

    diff --git a/perf/inproc_thr.cpp b/perf/inproc_thr.cpp index e16d5b3..008a30f 100644 --- a/perf/inproc_thr.cpp +++ b/perf/inproc_thr.cpp @@ -46,6 +46,21 @@ static int message_count; static size_t message_size; +static int message_clear; + +void mybind_cpu(int cpu_id) +{ + cpu_set_t mask; + CPU_ZERO(&mask); + CPU_SET(cpu_id, &mask); + if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) < 0) { + printf("Error: cpu id %d sched_setaffinity\n", cpu_id); + printf("Warning: performance may be impacted \n"); + } + return; +} + #if defined ZMQ_HAVE_WINDOWS static unsigned int __stdcall worker (void *ctx_) @@ -58,6 +73,8 @@ static void *worker (void *ctx_) int i; zmq_msg_t msg; + mybind_cpu(2); + s = zmq_socket (ctx_, ZMQ_PUSH); if (!s) { printf ("error in zmq_socket: %s\n", zmq_strerror (errno)); @@ -77,9 +94,9 @@ static void *worker (void *ctx_) printf ("error in zmq_msg_init_size: %s\n", zmq_strerror (errno)); exit (1); } -#if defined ZMQ_MAKE_VALGRIND_HAPPY - memset (zmq_msg_data (&msg), 0, message_size); -#endif + if (message_clear == 1) { + memset (zmq_msg_data (&msg), 0, message_size); + } rc = zmq_sendmsg (s, &msg, 0); if (rc < 0) { @@ -123,13 +140,14 @@ int main (int argc, char *argv []) unsigned long throughput; double megabits; - if (argc != 3) { - printf ("usage: inproc_thr <message-size> <message-count>\n"); + if (argc != 4) { + printf ("usage: inproc_thr <message-size> <message-count> <message-clear>\n"); return 1; } message_size = atoi (argv [1]); message_count = atoi (argv [2]); + message_clear = atoi (argv [3]); ctx = zmq_init (1); if (!ctx) { @@ -164,6 +182,8 @@ int main (int argc, char *argv []) } #endif + mybind_cpu(3); + rc = zmq_msg_init (&msg); if (rc != 0) { printf ("error in zmq_msg_init: %s\n", zmq_strerror (errno)); @@ -172,6 +192,7 @@ int main (int argc, char *argv []) printf ("message size: %d [B]\n", (int) message_size); printf ("message count: %d\n", (int) message_count); + printf ("message clear: %d\n", (int) message_clear); rc = zmq_recvmsg (s, &msg, 0); if (rc < 0) {
    转载请注明原文地址: https://ju.6miu.com/read-965118.html

    最新回复(0)