Patch for configurable ERTS_DE_BUSY_LIMIT
Rickard Green
rickard@REDACTED
Thu Feb 25 15:44:26 CET 2010
It seems reasonable to add a configuration parameter for this.
However:
We don't add new configuration parameters using environment variables.
All new configuration parameters should be possible to pass as command
line arguments.
Documentation of the parameter and a test case are needed.
You also need to submit the patch via git
<http://wiki.github.com/erlang/otp/submitting-patches>.
Regards,
Rickard Green, Erlang/OTP, Ericsson AB.
Scott Lystig Fritchie wrote:
> Hi, all. I sent a longer post to the erlang-questions about this.
>
> In a busy system sending large messages in quick succession, I see
> 'busy_dist_port' messages coming to my monitoring proc, sometimes 5 or
> even 15 times per second for the same process. And then there are the
> times where multiple processes are blocked due all sending to procs on
> the same destination node.
>
> Don't get me wrong, this kind of scheduler-controlled congestion
> mechanism is a good thing. But the 128KB limit feels cramped. When
> using 4MB instead, in a system with modern 64-bit multi-core CPUs and
> gigabit Ethernet, the latency jitter appears to drop significantly for
> us.
>
> Patch relative to R13B03.
>
> -Scott
>
> --- snip --- snip --- snip --- snip --- snip --- snip ---
>
> diff -ur otp_src_R13B03.orig/erts/emulator/beam/dist.c otp_src_R13B03/erts/emulator/beam/dist.c
> --- otp_src_R13B03.orig/erts/emulator/beam/dist.c 2009-11-20 05:29:24.000000000 -0800
> +++ otp_src_R13B03/erts/emulator/beam/dist.c 2010-02-14 15:06:32.000000000 -0800
> @@ -97,6 +97,9 @@
> #define PASS_THROUGH 'p' /* This code should go */
>
> int erts_is_alive; /* System must be blocked on change */
> +#define ERTS_DE_BUSY_LIMIT (128*1024)
> +int erts_de_busy_limit =RTS_DE_BUSY_LIMIT;
> +
>
> /* distribution trap functions */
> Export* dsend2_trap =ULL;
> @@ -1407,8 +1410,6 @@
> return -1;
> }
>
> -#define ERTS_DE_BUSY_LIMIT (128*1024)
> -
> static int
> dsig_send(ErtsDSigData *dsdp, Eterm ctl, Eterm msg, int force_busy)
> {
> diff -ur otp_src_R13B03.orig/erts/emulator/beam/erl_init.c otp_src_R13B03/erts/emulator/beam/erl_init.c
> --- otp_src_R13B03.orig/erts/emulator/beam/erl_init.c 2009-09-18 07:07:46.000000000 -0700
> +++ otp_src_R13B03/erts/emulator/beam/erl_init.c 2010-02-14 16:08:33.000000000 -0800
> @@ -788,6 +788,7 @@
> char envbuf[21]; /* enough for any 64-bit integer */
> size_t envbufsz;
> int async_max_threads =rts_async_max_threads;
> + extern int erts_de_busy_limit;
>
> early_init(&argc, argv);
>
> @@ -807,6 +808,9 @@
> if (erts_sys_getenv("ERL_THREAD_POOL_SIZE", envbuf, &envbufsz) =0) {
> async_max_threads =toi(envbuf);
> }
> + if (erts_sys_getenv("ERTS_DE_BUSY_LIMIT", envbuf, &envbufsz) =0) {
> + erts_de_busy_limit =toi(envbuf);
> + }
>
>
> #ifdef DEBUG
>
More information about the erlang-patches
mailing list