Hi,

I agree, I am not aware of any promise in the documentation about
alignment of receive buffers (happy to be disproved of course). Proof of
this is the fact that there was no explicit alignment set, and it was
left to chance.

IMHO any application that relied on this internal undocumented side
effect should be fixed. I'm sorry if this causes troubles for the
involved developers/maintainers, but we had no way to know.

On Tue, 2016-11-15 at 09:32 +0000, Auer, Jens wrote:
> Hi,
> 
> I don’t think there was an explicit description or guarantee of alignment of 
> the message buffer. The implementation guaranteed this because every payload 
> was malloced for large messages and thus aligned. However, for me a void* 
> indicates that it is binary blob of n bytes with unknown alignment.
> 
> Cheers,
> Jens
> 
> --
> Dr. Jens Auer | CGI | Software Engineer
> CGI Deutschland Ltd. & Co. KG
> Rheinstraße 95 | 64295 Darmstadt | Germany
> T: +49 6151 36860 154
> [email protected]<mailto:[email protected]>
> Unsere Pflichtangaben gemäß § 35a GmbHG / §§ 161, 125a HGB finden Sie unter 
> de.cgi.com/pflichtangaben<http://de.cgi.com/pflichtangaben>.
> 
> CONFIDENTIALITY NOTICE: Proprietary/Confidential information belonging to CGI 
> Group Inc. and its affiliates may be contained in this message. If you are 
> not a recipient indicated or intended in this message (or responsible for 
> delivery of this message to such person), or you think for any reason that 
> this message may have been addressed to you in error, you may not use or copy 
> or deliver this message to anyone else. In such case, you should destroy this 
> message and are asked to notify the sender by reply e-mail.
> 
> From: zeromq-dev [mailto:[email protected]] On Behalf Of 
> KIU Shueng Chuan
> Sent: 15 November 2016 03:57
> To: ZeroMQ development list
> Subject: Re: [zeromq-dev] Zmq 4.2.0 aligned memory
> 
> 
> A common use case for me is sending an array of floats.
> 
> First message part is some small metadata. Second message part is the float 
> array.
> 
> On reception, zmq_msg_data is cast to float* and accessed directly.
> 
> This non-alignment would be problematic.
> Or perhaps there never was any alignment guarantee?
> 
> On 15 Nov 2016 3:34 a.m., "Jens Auer" 
> <[email protected]<mailto:[email protected]>> wrote:
> Hi,
> 
> I think I have an idea why you are seeing unaligned messages, but this only 
> applies to messages where the payload is not stored in the msg_t object 
> itself. I think the threshold for this is 64 bytes. In ZeroMQ 4.1, receiving 
> messages was done by first receiving from the socket into a static 8kb 
> buffer, and then a new message object was created that allocated memory 
> externally by calling malloc.  The payload was then copied from the receive 
> buffer to the message buffer. The malloced message buffer was aligned 
> probably.
> 
> In ZeroMQ 4.2, this is changed to reduce the number of malloc calls and copy 
> operations. The receive buffer is now dynamically allocated as a 8kb block, 
> and messages are constructed as zero-copy messages using the part of the 
> receive buffer containing the payload. This saves malloc calls and copy 
> operations and increases performance. However, the payload may now start at 
> basically arbitrary addresses. As an example, let's assume that we receive a 
> small message of 10 bytes and a large message of 1kb, both received in a 
> single call to recv on the socket. The engine allocates a new buffer of 8kb, 
> calls recv(socket, buffer) and the data is written to the buffer. A small 
> message is then created which contains the data from byte 2-11 in the msg_t, 
> byte 1 contains the header. At byte 12 starts the header of the next message, 
> and at byte 22(?) starts the payload. The large message is created as a 
> zero-copy message using the pointer to byte 22 as storage. This is not 
> aligned to a 4-byte address.
> 
> Could you provide some more information about the sizes of the messages that 
> you receive? How do you decode the buffer content?
> 
> Best wishes,
> Jens
> 
> -----Ursprüngliche Nachricht-----
> Von: zeromq-dev 
> [mailto:[email protected]<mailto:[email protected]>]
>  Im Auftrag von Emmanuel Taurel
> Gesendet: Montag, 14. November 2016 16:49
> An: [email protected]<mailto:[email protected]>
> Betreff: [zeromq-dev] Zmq 4.2.0 aligned memory
> 
> Hello all,
> 
> We are using zeromq since years now without troubles. We have recently tried 
> our software using Zmq 4.2.0 (on linux hosts).
> For our application, we are using multipart messages with 4 parts in 
> publish/subscribe mode.
> With Zmq 4.0.5, on the subscriber side, when we get the last message part, 
> the received buffer was memory aligned (at least on 0x4 border). 
> Unfortunately, with Zmq 4.2.0, the buffer is not aligned any more.
>  For instance with Zmq 4.0.5, the buffer was at address xxx08 while with Zmq 
> 4.2.0, it is at address xxx23.
> 
> I don't know if it is relevant but our messages are relatively small messages 
> (few tens of bytes) This is a problem for us in decoding the buffer content.
> 
> Is there something to be done to have memory aligned buffers?
> 
> Thank's in advance for your answers
> 
>  Emmanuel
> _______________________________________________
> zeromq-dev mailing list
> [email protected]<mailto:[email protected]>
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> 
> 
> ---
> Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
> https://www.avast.com/antivirus
> 
> _______________________________________________
> zeromq-dev mailing list
> [email protected]<mailto:[email protected]>
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev


Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to