Skip to content
This repository was archived by the owner on Jul 17, 2025. It is now read-only.

Commit 197e5ae

Browse files
committed
Add compile flag for affinity shmem, fix build + clippy errors
1 parent 6d8dd58 commit 197e5ae

File tree

5 files changed

+50
-24
lines changed

5 files changed

+50
-24
lines changed

kernel/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ integration-test = ["shmem", "ethernet"]
113113
smoke = []
114114
# For rackscale tests, runs baseline NrOS. This causes the tests to take longer.
115115
baseline = []
116+
# For rackscale tests, use shmem allocated with numa affinity. This requires pre-configuring the host.
117+
affinity-shmem = []
116118
# baremetal: Compile benchmarks for running on bare-metal.
117119
baremetal = []
118120
# pre-alloc guest memory: For benchmark sensitive to VM exits.

kernel/src/arch/x86_64/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,11 @@ fn _start(argc: isize, _argv: *const *const u8) -> isize {
307307
// form by klogger::init above, but now we do it for more ports)
308308
debug::init();
309309

310-
use crate::transport::shmem::SHMEM_INITIALIZED;
311-
lazy_static::initialize(&SHMEM_INITIALIZED);
310+
#[cfg(feature = "rackscale")]
311+
{
312+
use crate::transport::shmem::SHMEM_INITIALIZED;
313+
lazy_static::initialize(&SHMEM_INITIALIZED);
314+
}
312315

313316
// Parse memory map provided by UEFI, create an initial emergency memory
314317
// manager with a little bit of memory so we can do some early allocations.

kernel/src/pci.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ pub(crate) fn claim_devices(vendor_id: u16, device_id: u16) -> Vec<PciDevice> {
5959
}
6060
}
6161
}
62-
return devices;
62+
devices
6363
}
6464

6565
pub(crate) fn init() {

kernel/tests/s11_rackscale_benchmarks.rs

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,13 @@ fn rackscale_fxmark_benchmark(is_shmem: bool) {
141141
);
142142

143143
let (shmem_socket, shmem_file) = get_shmem_names(None);
144+
let shmem_affinity = if cfg!(feature = "affinity-shmem") {
145+
Some(0)
146+
} else {
147+
None
148+
};
144149
let mut shmem_server =
145-
spawn_shmem_server(&shmem_socket, &shmem_file, shmem_size, Some(0))
150+
spawn_shmem_server(&shmem_socket, &shmem_file, shmem_size, shmem_affinity)
146151
.expect("Failed to start shmem server");
147152

148153
let mut cmdline_baseline =
@@ -250,14 +255,15 @@ fn rackscale_fxmark_benchmark(is_shmem: bool) {
250255
let mut shmem_sockets = Vec::new();
251256
let mut shmem_servers = Vec::new();
252257
for i in 0..(num_clients + 1) {
258+
let shmem_affinity = if cfg!(feature = "affinity-shmem") {
259+
Some(placement_cores[i].0)
260+
} else {
261+
None
262+
};
253263
let (shmem_socket, shmem_file) = get_shmem_names(Some(i));
254-
let shmem_server = spawn_shmem_server(
255-
&shmem_socket,
256-
&shmem_file,
257-
shmem_size,
258-
Some(placement_cores[i].0),
259-
)
260-
.expect("Failed to start shmem server");
264+
let shmem_server =
265+
spawn_shmem_server(&shmem_socket, &shmem_file, shmem_size, shmem_affinity)
266+
.expect("Failed to start shmem server");
261267
shmem_sockets.push(shmem_socket);
262268
shmem_servers.push(shmem_server);
263269
}
@@ -570,9 +576,18 @@ fn rackscale_vmops_benchmark(is_shmem: bool, benchtype: VMOpsBench) {
570576
);
571577

572578
let (shmem_socket, shmem_file) = get_shmem_names(None);
573-
let mut shmem_server =
574-
spawn_shmem_server(&shmem_socket, &shmem_file, baseline_shmem_size, Some(0))
575-
.expect("Failed to start shmem server");
579+
let shmem_affinity = if cfg!(feature = "affinity-shmem") {
580+
Some(0)
581+
} else {
582+
None
583+
};
584+
let mut shmem_server = spawn_shmem_server(
585+
&shmem_socket,
586+
&shmem_file,
587+
baseline_shmem_size,
588+
shmem_affinity,
589+
)
590+
.expect("Failed to start shmem server");
576591

577592
let baseline_cmdline = format!("initargs={}", cores);
578593
let baseline_file_name = file_name.clone();
@@ -693,14 +708,15 @@ fn rackscale_vmops_benchmark(is_shmem: bool, benchtype: VMOpsBench) {
693708
let mut shmem_sockets = Vec::new();
694709
let mut shmem_servers = Vec::new();
695710
for i in 0..(num_clients + 1) {
711+
let shmem_affinity = if cfg!(feature = "affinity-shmem") {
712+
Some(placement_cores[i].0)
713+
} else {
714+
None
715+
};
696716
let (shmem_socket, shmem_file) = get_shmem_names(Some(i));
697-
let shmem_server = spawn_shmem_server(
698-
&shmem_socket,
699-
&shmem_file,
700-
shmem_size,
701-
Some(placement_cores[i].0),
702-
)
703-
.expect("Failed to start shmem server");
717+
let shmem_server =
718+
spawn_shmem_server(&shmem_socket, &shmem_file, shmem_size, shmem_affinity)
719+
.expect("Failed to start shmem server");
704720
shmem_sockets.push(shmem_socket);
705721
shmem_servers.push(shmem_server);
706722
}

kernel/testutils/src/helpers.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ pub const DHCP_ACK_MATCH_NRK2: &'static str = "DHCPACK on 172.31.0.11 to 56:b4:4
2626
/// Default shmem region size (in MB)
2727
pub const SHMEM_SIZE: usize = 1024;
2828
/// Created by `hugeadm --create-global-mounts`
29-
const SHMEM_PATH: &'static str = "/var/lib/hugetlbfs/global/pagesize-2MB";
29+
const SHMEM_AFFINITY_PATH: &'static str = "/var/lib/hugetlbfs/global/pagesize-2MB";
3030

3131
/// Delay between invoking version of nrk in rackscale tests
3232
pub const CLIENT_BUILD_DELAY: u64 = 5_000;
@@ -52,15 +52,20 @@ pub fn setup_network(num_nodes: usize) {
5252
}
5353

5454
pub fn get_shmem_names(id: Option<usize>) -> (String, String) {
55+
let shmem_path = if cfg!(feature = "affinity-shmem") {
56+
SHMEM_AFFINITY_PATH
57+
} else {
58+
"."
59+
};
5560
if let Some(shmemid) = id {
5661
(
5762
format!("ivshmem-socket{}", shmemid),
58-
format!("{}/ivshmem-file{}", SHMEM_PATH, shmemid),
63+
format!("{}/ivshmem-file{}", shmem_path, shmemid),
5964
)
6065
} else {
6166
(
6267
format!("ivshmem-socket{}", ""),
63-
format!("{}/ivshmem-file{}", SHMEM_PATH, ""),
68+
format!("{}/ivshmem-file{}", shmem_path, ""),
6469
)
6570
}
6671
}

0 commit comments

Comments
 (0)