in rd-agent/src/hashd.rs [67:166]
fn update_params(&mut self, knobs: &HashdKnobs, cmd: &HashdCmd, frac: f64) -> Result<()> {
self.lat_target_pct = cmd.lat_target_pct;
self.rps_max = ((knobs.rps_max as f64 * frac).round() as u32).max(1);
let rps_target = ((self.rps_max as f64 * cmd.rps_target_ratio).round() as u32).max(1);
let mem_frac = match cmd.mem_ratio {
Some(v) => v,
None => knobs.mem_frac,
};
let file_addr_stdev = match cmd.file_addr_stdev {
Some(v) => v,
None => rd_hashd_intf::Params::default().file_addr_stdev_ratio,
};
let anon_addr_stdev = match cmd.anon_addr_stdev {
Some(v) => v,
None => rd_hashd_intf::Params::default().anon_addr_stdev_ratio,
};
let mut params = match rd_hashd_intf::Params::load(&self.params_path) {
Ok(v) => v,
Err(e) => {
info!(
"hashd: Failed to load {:?} ({:?}), using default",
&self.params_path, &e
);
rd_hashd_intf::Params::default()
}
};
let mut changed = false;
if params.file_size_mean != knobs.hash_size {
params.file_size_mean = knobs.hash_size;
changed = true;
}
if params.lat_target_pct != self.lat_target_pct {
params.lat_target_pct = self.lat_target_pct;
changed = true;
}
if params.lat_target != cmd.lat_target {
params.lat_target = cmd.lat_target;
changed = true;
}
if params.rps_max != self.rps_max {
params.rps_max = self.rps_max;
changed = true;
}
if params.rps_target != rps_target {
params.rps_target = rps_target;
changed = true;
}
if params.mem_frac != mem_frac {
params.mem_frac = mem_frac;
changed = true;
}
if params.chunk_pages != knobs.chunk_pages {
params.chunk_pages = knobs.chunk_pages;
changed = true;
}
if params.file_addr_stdev_ratio != file_addr_stdev {
params.file_addr_stdev_ratio = file_addr_stdev;
changed = true;
}
if params.anon_addr_stdev_ratio != anon_addr_stdev {
params.anon_addr_stdev_ratio = anon_addr_stdev;
changed = true;
}
if params.file_frac != cmd.file_ratio {
params.file_frac = cmd.file_ratio;
changed = true;
}
if params.log_bps != cmd.log_bps {
params.log_bps = cmd.log_bps;
changed = true;
}
if params.fake_cpu_load != knobs.fake_cpu_load {
params.fake_cpu_load = knobs.fake_cpu_load;
changed = true;
}
if changed {
info!(
"hashd: Updating {:?} to lat={:.2}ms@{:.2}% rps={:.2} mem={:.2}% log={:.2}Mbps frac={:.2}",
AsRef::<Path>::as_ref(&self.params_path)
.parent()
.unwrap()
.file_name()
.unwrap(),
cmd.lat_target * TO_MSEC,
cmd.lat_target_pct * TO_PCT,
rps_target,
mem_frac * TO_PCT,
to_mb(cmd.log_bps),
frac
);
params.save(&self.params_path)?;
}
Ok(())
}