Skip to content

Commit

Permalink
Remove sender punishment
Browse files Browse the repository at this point in the history
The reduction cost of sending messages is now constant and will no
longer scale according to the length of the receiving process'
message queue.
  • Loading branch information
jhogberg committed Jan 8, 2018
1 parent 68a0f56 commit 2e601a2
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 31 deletions.
29 changes: 6 additions & 23 deletions erts/emulator/beam/bif.c
Expand Up @@ -2244,20 +2244,15 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext *ctx)

send_message: {
ErtsProcLocks rp_locks = 0;
Sint res;
if (p == rp)
rp_locks |= ERTS_PROC_LOCK_MAIN;
/* send to local process */
res = erts_send_message(p, rp, &rp_locks, msg, 0);
if (erts_use_sender_punish)
res *= 4;
else
res = 0;
erts_send_message(p, rp, &rp_locks, msg, 0);
erts_proc_unlock(rp,
p == rp
? (rp_locks & ~ERTS_PROC_LOCK_MAIN)
: rp_locks);
return res;
return 0;
}
}

Expand Down Expand Up @@ -2312,21 +2307,15 @@ BIF_RETTYPE send_3(BIF_ALIST_3)
result = do_send(p, to, msg, &ref, ctx);
ERTS_MSACC_POP_STATE_M_X();

if (result > 0) {
ERTS_VBUMP_REDS(p, result);
if (result >= 0) {
ERTS_VBUMP_REDS(p, 4);
if (ERTS_IS_PROC_OUT_OF_REDS(p))
goto yield_return;
ERTS_BIF_PREP_RET(retval, am_ok);
goto done;
}

switch (result) {
case 0:
/* May need to yield even though we do not bump reds here... */
if (ERTS_IS_PROC_OUT_OF_REDS(p))
goto yield_return;
ERTS_BIF_PREP_RET(retval, am_ok);
break;
case SEND_NOCONNECT:
if (ctx->connect) {
ERTS_BIF_PREP_RET(retval, am_ok);
Expand Down Expand Up @@ -2443,21 +2432,15 @@ Eterm erl_send(Process *p, Eterm to, Eterm msg)

ERTS_MSACC_POP_STATE_M_X();

if (result > 0) {
ERTS_VBUMP_REDS(p, result);
if (result >= 0) {
ERTS_VBUMP_REDS(p, 4);
if (ERTS_IS_PROC_OUT_OF_REDS(p))
goto yield_return;
ERTS_BIF_PREP_RET(retval, msg);
goto done;
}

switch (result) {
case 0:
/* May need to yield even though we do not bump reds here... */
if (ERTS_IS_PROC_OUT_OF_REDS(p))
goto yield_return;
ERTS_BIF_PREP_RET(retval, msg);
break;
case SEND_NOCONNECT:
ERTS_BIF_PREP_RET(retval, msg);
break;
Expand Down
7 changes: 0 additions & 7 deletions erts/emulator/beam/erl_init.c
Expand Up @@ -155,9 +155,6 @@ erts_atomic32_t erts_writing_erl_crash_dump;
erts_tsd_key_t erts_is_crash_dumping_key;
int erts_initialized = 0;


int erts_use_sender_punish;

/*
* Configurable parameters.
*/
Expand Down Expand Up @@ -758,8 +755,6 @@ early_init(int *argc, char **argv) /*

erts_initialized = 0;

erts_use_sender_punish = 1;

erts_pre_early_init_cpu_topology(&max_reader_groups,
&ncpu,
&ncpuonln,
Expand Down Expand Up @@ -1765,8 +1760,6 @@ erl_start(int argc, char **argv)
erts_usage();
}
}
else if (sys_strcmp("nsp", sub_param) == 0)
erts_use_sender_punish = 0;
else if (has_prefix("tbt", sub_param)) {
arg = get_arg(sub_param+3, argv[i+1], &i);
res = erts_init_scheduler_bind_type_string(arg);
Expand Down
1 change: 0 additions & 1 deletion erts/emulator/beam/global.h
Expand Up @@ -1122,7 +1122,6 @@ extern int erts_no_line_info;
extern Eterm erts_error_logger_warnings;
extern int erts_initialized;
extern int erts_compat_rel;
extern int erts_use_sender_punish;
void erl_start(int, char**);
void erts_usage(void);
Eterm erts_preloaded(Process* p);
Expand Down

0 comments on commit 2e601a2

Please sign in to comment.