serf: clean up auto reclaim/pack conditions, pack every 20k

This commit is contained in:
Joe Bryan 2020-05-01 21:04:16 -07:00
parent f8460cec0a
commit 3dbb13ec3a

View File

@ -364,6 +364,9 @@ u3_serf_post(u3_serf* sef_u)
static u3_noun static u3_noun
_serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir) _serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir)
{ {
c3_o rec_o = c3n;
c3_o pac_o = c3n;
// intercept |mass, observe |reset // intercept |mass, observe |reset
// //
{ {
@ -394,13 +397,13 @@ _serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir)
// reclaim memory from persistent caches on |reset // reclaim memory from persistent caches on |reset
// //
if ( c3__vega == u3h(fec) ) { if ( c3__vega == u3h(fec) ) {
sef_u->rec_o = c3y; rec_o = c3y;
} }
// pack memory on |pack // pack memory on |pack
// //
if ( c3__pack == u3h(fec) ) { if ( c3__pack == u3h(fec) ) {
sef_u->pac_o = c3y; pac_o = c3y;
} }
riv = u3t(riv); riv = u3t(riv);
@ -431,13 +434,13 @@ _serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir)
// XX set flag(s) in u3V so we don't repeat endlessly? // XX set flag(s) in u3V so we don't repeat endlessly?
// XX pack here too? // XX pack here too?
// //
sef_u->pac_o = c3y; pac_o = c3y;
sef_u->rec_o = c3y; rec_o = c3y;
pri = 1; pri = 1;
} }
else if ( (pre_w > hig_w) && !(pos_w > hig_w) ) { else if ( (pre_w > hig_w) && !(pos_w > hig_w) ) {
sef_u->pac_o = c3y; pac_o = c3y;
sef_u->rec_o = c3y; rec_o = c3y;
pri = 0; pri = 0;
} }
// reclaim memory from persistent caches periodically // reclaim memory from persistent caches periodically
@ -446,13 +449,15 @@ _serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir)
// - bytecode caches grow rapidly and can't be simply capped // - bytecode caches grow rapidly and can't be simply capped
// - we don't make very effective use of our free lists // - we don't make very effective use of our free lists
// //
else { else if ( 0 == (sef_u->dun_d % 1000ULL) ) {
sef_u->rec_o = c3o(sef_u->rec_o, _(0 == (sef_u->dun_d % 1000ULL))); rec_o = c3y;
} }
// pack every 50K events // pack every 20K events
// //
sef_u->pac_o = c3o(sef_u->pac_o, _(0 == (sef_u->dun_d % 50000ULL))); if ( 0 == (sef_u->dun_d % 20000ULL) ) {
pac_o = c3y;
}
// notify daemon of memory pressure via "fake" effect // notify daemon of memory pressure via "fake" effect
// //
@ -463,6 +468,9 @@ _serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir)
} }
} }
sef_u->rec_o = c3o(sef_u->rec_o, rec_o);
sef_u->pac_o = c3o(sef_u->pac_o, pac_o);
return vir; return vir;
} }