Hi all,
sorry to revive this old thread, but now I should have some free time to
work on a PR to allow to set affinity on ZMQ background threads.
Before I get my hands on that, I would like to know if the following idea
seems right to you:


>> Could we add a ZMQ_THREAD_AFFINITY option to zmq_ctx_set() ?
>Sure, feel free to send a PR to libzmq.
>Should be pretty easy to implement simply copying what it's being done
>for the other two options.

The context option name will be "ZMQ_THREAD_AFFINITY" as suggested in
previous emails.

>...
>You will probably find adding ZMQ_THREAD_AFFINITY to have the same problem
>I had with ZMQ_CTX_NAME.  A cpu_set_t is not an int but that's the only
type for
>context options.
>...

Any suggestion on how to work around this limitation? On my 64bit linux it
turns out that sizeof(cpu_set_t)=128...
Maybe we could define that the "int" that zmq_ctx_set() takes is a simple
bitmask and then ZMQ does the following:

cpu_set_t cpuset;
CPU_ZERO(&cpuset);
        for (unsigned int i=0; i<sizeof(int)*8; i++)
             if ( (optVal & (1 << i)) )
          CPU_SET(  i , &cpuset );

Of course this limits the possibility of affinity-setting to the number of
bits in an "int" (I'm not sure but I guess ZMQ can be used also on 32bit
systems; there you would have a limit of 32 CPUs)...

Thanks,
Francesco




2017-05-20 9:52 GMT+02:00 Trent Piepho <tpie...@kymetacorp.com>:

> > On Fri, 2017-05-19 at 11:58 +0200, Francesco wrote:
> > > I'm using ZeroMQ in an applications with several threads (up to 40).
> > > I noticed that in the "master" branch of ZeroMQ the background
> > > threads
> > > it creates are given a name. That's VERY useful, thanks!
>
> > No problem. Had the same issue myself. One day I'd like to further
> > improve it to have more specific names (I/O, reaper, shutdown), but it
> > would require a lot more refactoring so for now all threads have the
> > same name.
>
> I did exactly that, my software also has a lot of threads.  I have names
> like:
>
> 0MQ:Reaper
> 0MQ:IO 1
> 0MQ:IO 2
>
> I also made a patch to allow specifying a context name as an option too,
> so that
> applications with multiple contexts, like mine, can tell the threads
> apart.  That
> patch is ugly since an option is just an int.  Since my system is 32-bit,
> I can cast
> a char* to int and back to the same char*, but that wouldn't work on a
> 64-bit system.
> It's too bad something like union { long l; void *p } wasn't used for an
> option value, to
> allow options to be complex than just an int.
>
> > However my question is: my application sets the affinity and the
> > priority of all threads it creates explicitly. Of course it  cannot
> > set the affinity/priority of ZMQ background threads.
>
> You will probably find adding ZMQ_THREAD_AFFINITY to have the same problem
> I had with ZMQ_CTX_NAME.  A cpu_set_t is not an int but that's the only
> type for
> context options.
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev@lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to