Skip to content

Commit 388d2ea

Browse files
authored
perf(base): sent low memory notification when worker switches to retired state (#450)
1 parent 13ee2a2 commit 388d2ea

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

crates/base/src/rt_worker/supervisor/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use tokio::sync::{
1414
oneshot,
1515
};
1616
use tokio_util::sync::CancellationToken;
17+
use tracing::{debug, instrument};
1718
use uuid::Uuid;
1819

1920
use crate::{
@@ -182,3 +183,9 @@ extern "C" fn v8_handle_wall_clock_beforeunload(
182183
);
183184
}
184185
}
186+
187+
#[instrument(level = "debug", skip_all)]
188+
extern "C" fn v8_handle_early_retire(isolate: &mut v8::Isolate, _data: *mut std::ffi::c_void) {
189+
isolate.low_memory_notification();
190+
debug!("sent low mem notification");
191+
}

crates/base/src/rt_worker/supervisor/strategy_per_request.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ use sb_workers::context::{Timing, TimingStatus, UserWorkerMsgs};
99
use tokio::time::Instant;
1010

1111
use crate::rt_worker::supervisor::{
12-
create_wall_clock_beforeunload_alert, v8_handle_termination, v8_handle_wall_clock_beforeunload,
13-
wait_cpu_alarm, CPUUsage, CPUUsageMetrics, Tokens, V8HandleTerminationData,
12+
create_wall_clock_beforeunload_alert, v8_handle_early_retire, v8_handle_termination,
13+
v8_handle_wall_clock_beforeunload, wait_cpu_alarm, CPUUsage, CPUUsageMetrics, Tokens,
14+
V8HandleTerminationData,
1415
};
1516

1617
use super::Arguments;
@@ -46,6 +47,10 @@ pub async fn supervise(args: Arguments, oneshot: bool) -> (ShutdownReason, i64)
4647
let (_, hard_limit_ms) = cpu_timer_param.limits();
4748

4849
let _guard = scopeguard::guard(is_retired, |v| {
50+
if thread_safe_handle.request_interrupt(v8_handle_early_retire, std::ptr::null_mut()) {
51+
waker.wake();
52+
}
53+
4954
v.raise();
5055
});
5156

crates/base/src/rt_worker/supervisor/strategy_per_worker.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ use log::error;
88
use sb_workers::context::{Timing, TimingStatus, UserWorkerMsgs};
99

1010
use crate::rt_worker::supervisor::{
11-
create_wall_clock_beforeunload_alert, v8_handle_wall_clock_beforeunload, wait_cpu_alarm,
12-
CPUUsage, Tokens,
11+
create_wall_clock_beforeunload_alert, v8_handle_early_retire,
12+
v8_handle_wall_clock_beforeunload, wait_cpu_alarm, CPUUsage, Tokens,
1313
};
1414

1515
use super::{v8_handle_termination, Arguments, CPUUsageMetrics, V8HandleTerminationData};
@@ -85,6 +85,10 @@ pub async fn supervise(args: Arguments) -> (ShutdownReason, i64) {
8585
);
8686

8787
let early_retire_fn = || {
88+
if thread_safe_handle.request_interrupt(v8_handle_early_retire, std::ptr::null_mut()) {
89+
waker.wake();
90+
}
91+
8892
// we should raise a retire signal because subsequent incoming requests are unlikely to get
8993
// enough wall clock time or cpu time
9094
guard.raise();

0 commit comments

Comments
 (0)