On Wed, 1 Dec 2004, Michael Haardt wrote:
> If many queue runners are active on a large queue, Exim appears to get
> unfair by trying the same messages over and over, whereas others sit
> on the queue untouched.
Have you got evidence for that? How do you know the messages are
untouched? Each queue runner should process the queue[*] in a "random"
order. Every queue runner should look at every message on the queue
eventually. If you have evidence otherwise, it is evidence of a bug.
> Queue runners would get way more efficient if they tried to obtain locks
> before forking, but the unfairness issue is still there.
I have wishlisted this idea. However, I think that in practice, in most
configurations, the number of clashes will be small, and it is only when
there is a clash that this will make any difference. I don't really
think it will get "way more efficient", certainly not in most common
cases. For instance, if you have 5 queue runners, there will most likely
be 5 clashes (or maybe a few more for new messages that are being
delivered), but if you are scanning a queue of 1,000 messages that won't
be noticed.
--
Philip Hazel University of Cambridge Computing Service,
ph10@??? Cambridge, England. Phone: +44 1223 334714.
Get the Exim 4 book: http://www.uit.co.uk/exim-book