Skip to content

Commit 5391478

Browse files
committed
bundle: sleep while disconnected
Saves power when disconnected from the bundle server
1 parent 6e6577e commit 5391478

File tree

3 files changed

+33
-24
lines changed

3 files changed

+33
-24
lines changed

src/disco/bundle/fd_bundle_client.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,12 @@ fd_bundle_client_step1( fd_bundle_tile_t * ctx,
339339

340340
/* gRPC conn died? */
341341
if( FD_UNLIKELY( !ctx->grpc_client ) ) {
342+
long sleep_start;
342343
reconnect:
343-
if( FD_UNLIKELY( fd_bundle_tile_should_stall( ctx, fd_bundle_now() ) ) ) {
344+
sleep_start = fd_bundle_now();
345+
if( FD_UNLIKELY( fd_bundle_tile_should_stall( ctx, sleep_start ) ) ) {
346+
long wait_dur = ctx->backoff_until - sleep_start;
347+
fd_log_sleep( fd_long_min( wait_dur, 1e6 ) );
344348
return;
345349
}
346350
fd_bundle_client_create_conn( ctx );

src/disco/bundle/fd_bundle_tile.seccomppolicy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,6 @@ lseek: (and (or (eq (arg 0) etc_resolv_conf)
119119
(eq (arg 0) etc_hosts_fd))
120120
(eq (arg 1) 0)
121121
(eq (arg 2) "SEEK_SET"))
122+
123+
# bundle: yield to scheduler to save power
124+
clock_nanosleep

src/disco/bundle/generated/fd_bundle_tile_seccomp.h

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,54 +21,56 @@
2121
#else
2222
# error "Target architecture is unsupported by seccomp."
2323
#endif
24-
static const unsigned int sock_filter_policy_fd_bundle_tile_instr_cnt = 95;
24+
static const unsigned int sock_filter_policy_fd_bundle_tile_instr_cnt = 96;
2525

2626
static void populate_sock_filter_policy_fd_bundle_tile( ulong out_cnt, struct sock_filter * out, uint logfile_fd, uint keylog_fd, uint etc_hosts_fd, uint etc_resolv_conf ) {
27-
FD_TEST( out_cnt >= 95 );
28-
struct sock_filter filter[95] = {
27+
FD_TEST( out_cnt >= 96 );
28+
struct sock_filter filter[96] = {
2929
/* Check: Jump to RET_KILL_PROCESS if the script's arch != the runtime arch */
3030
BPF_STMT( BPF_LD | BPF_W | BPF_ABS, ( offsetof( struct seccomp_data, arch ) ) ),
31-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, ARCH_NR, 0, /* RET_KILL_PROCESS */ 91 ),
31+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, ARCH_NR, 0, /* RET_KILL_PROCESS */ 92 ),
3232
/* loading syscall number in accumulator */
3333
BPF_STMT( BPF_LD | BPF_W | BPF_ABS, ( offsetof( struct seccomp_data, nr ) ) ),
3434
/* simply allow read */
35-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_read, /* RET_ALLOW */ 90, 0 ),
35+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_read, /* RET_ALLOW */ 91, 0 ),
3636
/* allow recvmsg based on expression */
37-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_recvmsg, /* check_recvmsg */ 18, 0 ),
37+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_recvmsg, /* check_recvmsg */ 19, 0 ),
3838
/* simply allow write */
39-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_write, /* RET_ALLOW */ 88, 0 ),
39+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_write, /* RET_ALLOW */ 89, 0 ),
4040
/* allow writev based on expression */
41-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_writev, /* check_writev */ 20, 0 ),
41+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_writev, /* check_writev */ 21, 0 ),
4242
/* allow sendmsg based on expression */
43-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_sendmsg, /* check_sendmsg */ 23, 0 ),
43+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_sendmsg, /* check_sendmsg */ 24, 0 ),
4444
/* allow sendto based on expression */
45-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_sendto, /* check_sendto */ 28, 0 ),
45+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_sendto, /* check_sendto */ 29, 0 ),
4646
/* allow fsync based on expression */
47-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_fsync, /* check_fsync */ 29, 0 ),
47+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_fsync, /* check_fsync */ 30, 0 ),
4848
/* allow socket based on expression */
49-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_socket, /* check_socket */ 30, 0 ),
49+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_socket, /* check_socket */ 31, 0 ),
5050
/* simply allow connect */
51-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_connect, /* RET_ALLOW */ 82, 0 ),
51+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_connect, /* RET_ALLOW */ 83, 0 ),
5252
/* allow shutdown based on expression */
53-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_shutdown, /* check_shutdown */ 46, 0 ),
53+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_shutdown, /* check_shutdown */ 47, 0 ),
5454
/* simply allow close */
55-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_close, /* RET_ALLOW */ 80, 0 ),
55+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_close, /* RET_ALLOW */ 81, 0 ),
5656
/* allow fcntl based on expression */
57-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_fcntl, /* check_fcntl */ 46, 0 ),
57+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_fcntl, /* check_fcntl */ 47, 0 ),
5858
/* allow bind based on expression */
59-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_bind, /* check_bind */ 49, 0 ),
59+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_bind, /* check_bind */ 50, 0 ),
6060
/* simply allow ppoll */
61-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_ppoll, /* RET_ALLOW */ 77, 0 ),
61+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_ppoll, /* RET_ALLOW */ 78, 0 ),
6262
/* allow setsockopt based on expression */
63-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_setsockopt, /* check_setsockopt */ 51, 0 ),
63+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_setsockopt, /* check_setsockopt */ 52, 0 ),
6464
/* simply allow getsockname */
65-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_getsockname, /* RET_ALLOW */ 75, 0 ),
65+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_getsockname, /* RET_ALLOW */ 76, 0 ),
6666
/* simply allow getpid */
67-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_getpid, /* RET_ALLOW */ 74, 0 ),
67+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_getpid, /* RET_ALLOW */ 75, 0 ),
6868
/* simply allow getrandom */
69-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_getrandom, /* RET_ALLOW */ 73, 0 ),
69+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_getrandom, /* RET_ALLOW */ 74, 0 ),
7070
/* allow lseek based on expression */
71-
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_lseek, /* check_lseek */ 63, 0 ),
71+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_lseek, /* check_lseek */ 64, 0 ),
72+
/* simply allow clock_nanosleep */
73+
BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, SYS_clock_nanosleep, /* RET_ALLOW */ 72, 0 ),
7274
/* none of the syscalls matched */
7375
{ BPF_JMP | BPF_JA, 0, 0, /* RET_KILL_PROCESS */ 70 },
7476
// check_recvmsg:

0 commit comments

Comments
 (0)