From 5c9ba5e5b40928243837c1cd0c418455205dcf14 Mon Sep 17 00:00:00 2001 From: Alexey Rybalchenko Date: Thu, 24 Jun 2021 10:51:39 +0200 Subject: [PATCH] shm: avoid meta data copy on recv and fix its alignment --- fairmq/shmem/Socket.h | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/fairmq/shmem/Socket.h b/fairmq/shmem/Socket.h index 53297fa0..fce828b2 100644 --- a/fairmq/shmem/Socket.h +++ b/fairmq/shmem/Socket.h @@ -161,11 +161,9 @@ class Socket final : public fair::mq::Socket int elapsed = 0; Message* shmMsg = static_cast(msg.get()); - ZMsg zmqMsg(sizeof(MetaHeader)); - std::memcpy(zmqMsg.Data(), &(shmMsg->fMeta), sizeof(MetaHeader)); while (true) { - int nbytes = zmq_msg_send(zmqMsg.Msg(), fSocket, flags); + int nbytes = zmq_send(fSocket, &(shmMsg->fMeta), sizeof(MetaHeader), flags); if (nbytes > 0) { shmMsg->fQueued = true; ++fMessagesTx; @@ -196,11 +194,9 @@ class Socket final : public fair::mq::Socket } int elapsed = 0; - ZMsg zmqMsg; - while (true) { Message* shmMsg = static_cast(msg.get()); - int nbytes = zmq_msg_recv(zmqMsg.Msg(), fSocket, flags); + int nbytes = zmq_recv(fSocket, &(shmMsg->fMeta), sizeof(MetaHeader), flags); if (nbytes > 0) { // check for number of received messages. must be 1 if (nbytes != sizeof(MetaHeader)) { @@ -210,10 +206,7 @@ class Socket final : public fair::mq::Socket "Expected size of ", sizeof(MetaHeader), " bytes, received ", nbytes)); } - MetaHeader* hdr = static_cast(zmqMsg.Data()); - size_t size = hdr->fSize; - shmMsg->fMeta = *hdr; - + size_t size = shmMsg->GetSize(); fBytesRx += size; ++fMessagesRx; return size;