Apply this reservation to an arbitrary list of core ids. Returns the allocated cores in the order: - irq - reserved - databases - tokio_workers - rayon Left public for testing and debugging purposes.
(&self, cores: &mut Vec<CoreId>)
| 239 | /// |
| 240 | /// Left public for testing and debugging purposes. |
| 241 | pub fn apply(&self, cores: &mut Vec<CoreId>) -> [Vec<CoreId>; 5] { |
| 242 | let irq = cores.drain(..self.irq).collect_vec(); |
| 243 | let reserved = cores.drain(..self.reserved).collect_vec(); |
| 244 | |
| 245 | let total = cores.len() as f64; |
| 246 | let frac = |frac: f64| (total * frac).ceil() as usize; |
| 247 | fn claim(cores: &mut Vec<CoreId>, n: usize) -> impl Iterator<Item = CoreId> + '_ { |
| 248 | cores.drain(..n.min(cores.len())) |
| 249 | } |
| 250 | |
| 251 | let databases = claim(cores, frac(self.databases)).collect_vec(); |
| 252 | let tokio_workers = claim(cores, frac(self.tokio_workers)).collect_vec(); |
| 253 | let rayon = claim(cores, frac(self.rayon)).collect_vec(); |
| 254 | |
| 255 | [irq, reserved, databases, tokio_workers, rayon] |
| 256 | } |
| 257 | } |
| 258 | |
| 259 | /// A type holding cores divvied up into different sets. |