[erlang-questions] Configuring Messaging Back Pressure

Andy Till <>
Fri Nov 21 23:44:22 CET 2014


I don't think you can rely on the scheduler alone if there are, say ten 
producers giving work to one consumer asynchronously.  Using 
gen_server:call from the producer to the consumer could help here?

Cheers

Andy

On 21/11/2014 12:23, Olivier BOUDEVILLE wrote:
> Hi,
>
> The reciprocal case (M producers and N consumers, with M >> N) may 
> also be a problem.
>
> I can share a simple program which seems to show that the retaliation 
> upon the producers is at least in some cases (where M is the number of 
> cores of the machine minus 1, and N=1) insufficient: the program will 
> crash and burn, exhausting the memory because of the mailbox of the 
> consumer becoming too large. Ideally the back-pressure would increase 
> steadily until the mailbox of the producer decreases below reasonable 
> limits. Currently, I think that the developer has either to tune M by 
> hand (which would depend on the hardware resources...), or to perform 
> some explicit yielding (with timer:sleep(1) on the producers). Neither 
> of them is very satisfactory.
>
> More generally, couldn't we hope that the scheduling logic could cope 
> with at least most of the M producers-N consumers scenarios, without 
> resorting to hints from the developer like specifying a process flag 
> or performing explicit yielding? Maybe (for the M >> N case) it is 
> just a matter of heavier punishing (ex: ultimately exponential) 
> whenever the receiving mailbox becomes too large.
>
> Best,
>
> Olivier.
> ---------------------------
> Olivier Boudeville
>
> EDF R&D : 1, avenue du Général de Gaulle, 92140 Clamart, France
> Département SINETICS, groupe ASICS (I2A), bureau B-226
> Office : +33 1 47 65 59 58 / Mobile : +33 6 16 83 37 22 / Fax : +33 1 
> 47 65 27 13
>
>
> **
> Envoyé par : 
>
> 21/11/2014 11:27
>
> 	
> A
> 	
> cc
> 	
> Objet
> 	Re: [erlang-questions] Configuring Messaging Back Pressure
>
>
>
> 	
>
>
>
>
>
> +1
>
> On 21 Nov 2014 04:53, "Andy Till" < 
> <mailto:>> wrote:
> Short outline of how erts_use_sender_punish works, please comment if 
> there are any errors in the description.
>
> erts_use_sender_punish is a flag hard coded to 1 (true), when it is 
> true a process sending messages to another process will have its 
> reduction count reduced by the number of messages in the receivers 
> message queue multiplied by four.  Sending messages to processes with 
> zero messages in the queue is free in terms of reductions, but sending 
> messages to load queues is very expensive and will lead the scheduler 
> to context switch to another process more often.
>
> In the case where the the relationship between of producers and 
> consumers is one to one, this makes sense.  It provides back pressure 
> when part of the system is loaded.
>
> In the case where there is one producer to many consumers, if one 
> consumer gets a flood of messages and the producer is punished then 
> the punishment is not only on the producer but on all other consumers 
> because the producer cannot create enough work for them as it used all 
> of its reductions.
>
> This makes performance unpredictable when work cannot be spread evenly.
>
> Could this be made to be configurable using a process flag?
>
> Cheers
>
> Andy
>
> Code:
> _
> __https://github.com/erlang/otp/blob/a70f0ce9b34e4db61dacb8db24f9ab5671ed4c8a/erts/emulator/beam/erl_init.c#L694__
> __https://github.com/erlang/otp/blob/682a6082159568f40615f03d12d44ee70edd14c6/erts/emulator/beam/bif.c#L2058__
> __https://github.com/erlang/otp/blob/a8e12f7168c14cc765a63a51c838d065412795d7/erts/emulator/beam/erl_message.c#L504_
>
> Previous mentions and issues with this feature:
> _
> __http://erlang.org/pipermail/erlang-questions/2011-July/060314.html__
> __http://erlang.org/pipermail/erlang-questions/2011-July/060042.html_
>
> _______________________________________________
> erlang-questions mailing list_
>  <mailto:>_
> __http://erlang.org/mailman/listinfo/erlang-questions________________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
> Ce message et toutes les pièces jointes (ci-après le 'Message') sont 
> établis à l'intention exclusive des destinataires et les informations 
> qui y figurent sont strictement confidentielles. Toute utilisation de 
> ce Message non conforme à sa destination, toute diffusion ou toute 
> publication totale ou partielle, est interdite sauf autorisation expresse.
>
> Si vous n'êtes pas le destinataire de ce Message, il vous est interdit 
> de le copier, de le faire suivre, de le divulguer ou d'en utiliser 
> tout ou partie. Si vous avez reçu ce Message par erreur, merci de le 
> supprimer de votre système, ainsi que toutes ses copies, et de n'en 
> garder aucune trace sur quelque support que ce soit. Nous vous 
> remercions également d'en avertir immédiatement l'expéditeur par 
> retour du message.
>
> Il est impossible de garantir que les communications par messagerie 
> électronique arrivent en temps utile, sont sécurisées ou dénuées de 
> toute erreur ou virus.
> ____________________________________________________
>
> This message and any attachments (the 'Message') are intended solely 
> for the addressees. The information contained in this Message is 
> confidential. Any use of information contained in this Message not in 
> accord with its purpose, any dissemination or disclosure, either whole 
> or partial, is prohibited except formal approval.
>
> If you are not the addressee, you may not copy, forward, disclose or 
> use any part of it. If you have received this message in error, please 
> delete it and all copies from your system and notify the sender 
> immediately by return message.
>
> E-mail communication cannot be guaranteed to be timely secure, error 
> or virus-free.
>
>
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20141121/4bda5be2/attachment.html>


More information about the erlang-questions mailing list