From 20018b6170083591f196f8b537902c8f2b7c6bca Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Fri, 28 Jun 2024 23:21:40 -0700 Subject: [PATCH] feat(power-management-core): implement GetHostCpuTopology RPC Signed-off-by: Ariadne Conill --- crates/daemon/src/control.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/crates/daemon/src/control.rs b/crates/daemon/src/control.rs index a14d779..da179e1 100644 --- a/crates/daemon/src/control.rs +++ b/crates/daemon/src/control.rs @@ -15,7 +15,8 @@ use krata::{ ListDevicesReply, ListDevicesRequest, ListGuestsReply, ListGuestsRequest, PullImageReply, PullImageRequest, ReadGuestMetricsReply, ReadGuestMetricsRequest, ResolveGuestReply, ResolveGuestRequest, SnoopIdmReply, SnoopIdmRequest, - WatchEventsReply, WatchEventsRequest, + WatchEventsReply, WatchEventsRequest, HostCpuTopologyRequest, HostCpuTopologyReply, + HostCpuTopologyInfo, }, }, }; @@ -552,4 +553,26 @@ impl ControlService for DaemonControlService { } Ok(Response::new(ListDevicesReply { devices })) } + + async fn get_host_cpu_topology( + &self, + request: Request, + ) -> Result, Status> { + let _ = request.into_inner(); + let power = self.runtime.power_management_context().await.map_err(ApiError::from)?; + let cputopo = power.cpu_topology().await.map_err(ApiError::from)?; + let mut cpus = vec![]; + + for cpu in cputopo { + cpus.push(HostCpuTopologyInfo { + core: cpu.core, + socket: cpu.socket, + node: cpu.node, + thread: cpu.thread, + class: cpu.class as i32, + }) + } + + Ok(Response::new(HostCpuTopologyReply { cpus })) + } }