solana_rayon_threadlimit/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#[macro_use]
extern crate lazy_static;

use std::env;
//TODO remove this hack when rayon fixes itself

lazy_static! {
    // reduce the number of threads each pool is allowed to half the cpu core count, to avoid rayon
    // hogging cpu
    static ref MAX_RAYON_THREADS: usize =
            env::var("SOLANA_RAYON_THREADS").ok()
            .and_then(|num_threads| num_threads.parse().ok())
            .unwrap_or_else(|| num_cpus::get() / 2)
            .max(1);
}

pub fn get_thread_count() -> usize {
    *MAX_RAYON_THREADS
}

// Only used in legacy code.
// Use get_thread_count instead in all new code.
pub fn get_max_thread_count() -> usize {
    get_thread_count().saturating_mul(2)
}