aquatic_udp: set core affinities

This commit is contained in:
Joakim Frostegård 2021-10-21 20:41:24 +02:00
parent 2f07ba9898
commit 2c4f4a32da
5 changed files with 82 additions and 6 deletions

View file

@ -17,6 +17,12 @@ pub mod network;
pub const SHARED_CHANNEL_SIZE: usize = 4096;
pub fn run(config: Config) -> anyhow::Result<()> {
if config.core_affinity.set_affinities {
core_affinity::set_for_current(
core_affinity::CoreId { id: config.core_affinity.offset }
);
}
let num_peers = config.socket_workers + config.request_workers;
let request_mesh_builder = MeshBuilder::partial(num_peers, SHARED_CHANNEL_SIZE);
@ -26,13 +32,19 @@ pub fn run(config: Config) -> anyhow::Result<()> {
let mut executors = Vec::new();
for _ in 0..(config.socket_workers) {
for i in 0..(config.socket_workers) {
let config = config.clone();
let request_mesh_builder = request_mesh_builder.clone();
let response_mesh_builder = response_mesh_builder.clone();
let num_bound_sockets = num_bound_sockets.clone();
let executor = LocalExecutorBuilder::default().spawn(|| async move {
let mut builder = LocalExecutorBuilder::default();
if config.core_affinity.set_affinities {
builder = builder.pin_to_cpu(config.core_affinity.offset + 1 + i);
}
let executor = builder.spawn(|| async move {
network::run_socket_worker(
config,
request_mesh_builder,
@ -50,7 +62,13 @@ pub fn run(config: Config) -> anyhow::Result<()> {
let request_mesh_builder = request_mesh_builder.clone();
let response_mesh_builder = response_mesh_builder.clone();
let executor = LocalExecutorBuilder::default().spawn(|| async move {
let mut builder = LocalExecutorBuilder::default();
if config.core_affinity.set_affinities {
builder = builder.pin_to_cpu(config.core_affinity.offset + 1 + config.socket_workers + i);
}
let executor = builder.spawn(|| async move {
handlers::run_request_worker(config, request_mesh_builder, response_mesh_builder).await
});