From 0ff90fb36b547cdf9b36dfa1ea3319b1ce372446 Mon Sep 17 00:00:00 2001 From: Vitaly _Vi Shukela Date: Sun, 18 Aug 2024 15:39:58 +0200 Subject: [PATCH] Make cgroup memory pressure monitoring optional. Resolves #28. --- server/Cargo.toml | 3 ++- server/src/reactor.rs | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/server/Cargo.toml b/server/Cargo.toml index 3f2735f..720bb91 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -26,10 +26,11 @@ thiserror = "1.0.63" tracy-client = { version = "0.17.1", optional = true } [features] -default = ["systemd", "human-logs"] +default = ["systemd", "human-logs", "memory-pressure-monitoring"] systemd = ["dep:sd-notify"] human-logs = ["env_logger/default"] trace = ["dep:tracy-client"] +memory-pressure-monitoring = [] [[bin]] name = "ringboard-server" diff --git a/server/src/reactor.rs b/server/src/reactor.rs index 73e4be2..fae4706 100644 --- a/server/src/reactor.rs +++ b/server/src/reactor.rs @@ -131,6 +131,7 @@ fn setup_uring() -> Result { OwnedFd::from_raw_fd(fd) }; + #[cfg(feature="memory-pressure-monitoring")] let low_mem_listener = { let mut cgroup = String::with_capacity(160); cgroup.push_str("/sys/fs/cgroup"); @@ -164,6 +165,7 @@ fn setup_uring() -> Result { let built_ins = [ socket.as_raw_fd(), signal_handler.as_raw_fd(), + #[cfg(feature="memory-pressure-monitoring")] low_mem_listener.as_raw_fd(), ]; uring @@ -200,6 +202,7 @@ pub fn run(allocator: &mut Allocator) -> Result<(), CliError> { .allocate_file_index(true) .build() .user_data(REQ_TYPE_ACCEPT); + #[cfg(feature="memory-pressure-monitoring")] let poll_low_mem = PollAdd::new( Fixed(u32::from(MAX_NUM_CLIENTS) + 2), u32::try_from(libc::POLLPRI).unwrap(), @@ -283,7 +286,7 @@ pub fn run(allocator: &mut Allocator) -> Result<(), CliError> { let mut submission = uring.submission(); unsafe { submission - .push_multiple(&[accept.clone(), read_signals, poll_low_mem.clone()]) + .push_multiple(&[accept.clone(), read_signals, #[cfg(feature="memory-pressure-monitoring")] poll_low_mem.clone()]) .unwrap(); } } @@ -526,6 +529,7 @@ pub fn run(allocator: &mut Allocator) -> Result<(), CliError> { break 'outer; } + #[cfg(feature="memory-pressure-monitoring")] REQ_TYPE_LOW_MEM => { debug!("Handling low memory completion."); let result = result.map_io_err(|| "Failed to poll for low memory events.")?;