From 75301ff596b5272e5f4220b868c0d3a891f35bba Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 28 Feb 2026 08:12:30 +0000 Subject: [PATCH] Add page_size() to sys limits suite. Signed-off-by: Jason Volk --- src/core/utils/sys/limits.rs | 18 ++++++++++++++++++ src/core/utils/tests.rs | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/core/utils/sys/limits.rs b/src/core/utils/sys/limits.rs index aa34a143..4278133d 100644 --- a/src/core/utils/sys/limits.rs +++ b/src/core/utils/sys/limits.rs @@ -1,5 +1,6 @@ #[cfg(unix)] use nix::sys::resource::{Resource, getrlimit}; +use nix::unistd::{SysconfVar, sysconf}; use crate::{Result, apply, debug, utils::math::usize_from_u64_truncated}; @@ -51,6 +52,7 @@ pub fn maximize_thread_limit() -> Result { pub fn maximize_thread_limit() -> Result { Ok(()) } #[cfg(unix)] +#[inline] pub fn max_file_descriptors() -> Result<(usize, usize)> { getrlimit(Resource::RLIMIT_NOFILE) .map(apply!(2, usize_from_u64_truncated)) @@ -58,9 +60,11 @@ pub fn max_file_descriptors() -> Result<(usize, usize)> { } #[cfg(not(unix))] +#[inline] pub fn max_file_descriptors() -> Result<(usize, usize)> { Ok((usize::MAX, usize::MAX)) } #[cfg(unix)] +#[inline] pub fn max_stack_size() -> Result<(usize, usize)> { getrlimit(Resource::RLIMIT_STACK) .map(apply!(2, usize_from_u64_truncated)) @@ -68,9 +72,11 @@ pub fn max_stack_size() -> Result<(usize, usize)> { } #[cfg(not(unix))] +#[inline] pub fn max_stack_size() -> Result<(usize, usize)> { Ok((usize::MAX, usize::MAX)) } #[cfg(any(linux_android, netbsdlike, target_os = "freebsd",))] +#[inline] pub fn max_memory_locked() -> Result<(usize, usize)> { getrlimit(Resource::RLIMIT_MEMLOCK) .map(apply!(2, usize_from_u64_truncated)) @@ -78,6 +84,7 @@ pub fn max_memory_locked() -> Result<(usize, usize)> { } #[cfg(not(any(linux_android, netbsdlike, target_os = "freebsd",)))] +#[inline] pub fn max_memory_locked() -> Result<(usize, usize)> { Ok((usize::MIN, usize::MIN)) } #[cfg(any( @@ -86,6 +93,7 @@ pub fn max_memory_locked() -> Result<(usize, usize)> { Ok((usize::MIN, usize::MI target_os = "aix", target_os = "freebsd", ))] +#[inline] pub fn max_threads() -> Result<(usize, usize)> { getrlimit(Resource::RLIMIT_NPROC) .map(apply!(2, usize_from_u64_truncated)) @@ -98,4 +106,14 @@ pub fn max_threads() -> Result<(usize, usize)> { target_os = "aix", target_os = "freebsd", )))] +#[inline] pub fn max_threads() -> Result<(usize, usize)> { Ok((usize::MAX, usize::MAX)) } + +/// Get the system's page size in bytes. +#[inline] +pub fn page_size() -> Result { + sysconf(SysconfVar::PAGE_SIZE)? + .unwrap_or(-1) + .try_into() + .map_err(Into::into) +} diff --git a/src/core/utils/tests.rs b/src/core/utils/tests.rs index 26e9d1a3..d59d0771 100644 --- a/src/core/utils/tests.rs +++ b/src/core/utils/tests.rs @@ -312,3 +312,13 @@ async fn set_difference_sorted_stream2() { .await; assert_eq!(r, &["aaa", "eee", "hhh"]); } + +#[test] +fn page_size() { + use crate::utils::sys::page_size; + + let val = page_size().expect("Failed to get system page size"); + println!("{val:?}"); + + assert!(val != 0, "page size was zero"); +}