Add validator option to change niceness of snapshot packager thread
This commit is contained in:
committed by
Trent Nelson
parent
18b1baa3c1
commit
c78f474373
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -4558,6 +4558,7 @@ dependencies = [
|
||||
"chrono",
|
||||
"clap 2.33.3",
|
||||
"rpassword",
|
||||
"solana-perf",
|
||||
"solana-remote-wallet",
|
||||
"solana-sdk",
|
||||
"tempfile",
|
||||
|
@ -12,6 +12,7 @@ edition = "2018"
|
||||
[dependencies]
|
||||
clap = "2.33.0"
|
||||
rpassword = "5.0"
|
||||
solana-perf = { path = "../perf", version = "=1.9.0" }
|
||||
solana-remote-wallet = { path = "../remote-wallet", version = "=1.9.0" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.9.0" }
|
||||
thiserror = "1.0.30"
|
||||
|
@ -370,6 +370,27 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_niceness_adjustment_valid<T>(value: T) -> Result<(), String>
|
||||
where
|
||||
T: AsRef<str> + Display,
|
||||
{
|
||||
let adjustment = value.as_ref().parse::<i8>().map_err(|err| {
|
||||
format!(
|
||||
"error parsing niceness adjustment value '{}': {}",
|
||||
value, err
|
||||
)
|
||||
})?;
|
||||
if solana_perf::thread::is_renice_allowed(adjustment) {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(String::from(
|
||||
"niceness adjustment supported only on Linux; negative adjustment \
|
||||
(priority increase) requires root or CAP_SYS_NICE (see `man 7 capabilities` \
|
||||
for details)",
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@ -386,4 +407,11 @@ mod tests {
|
||||
assert!(is_derivation("a/b").is_err());
|
||||
assert!(is_derivation("0/4294967296").is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_niceness_adjustment_valid() {
|
||||
assert_eq!(is_niceness_adjustment_valid("0"), Ok(()));
|
||||
assert!(is_niceness_adjustment_valid("128").is_err());
|
||||
assert!(is_niceness_adjustment_valid("-129").is_err());
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
use solana_gossip::cluster_info::{
|
||||
ClusterInfo, MAX_INCREMENTAL_SNAPSHOT_HASHES, MAX_SNAPSHOT_HASHES,
|
||||
};
|
||||
use solana_perf::thread::renice_this_thread;
|
||||
use solana_runtime::{
|
||||
snapshot_archive_info::SnapshotArchiveInfoGetter,
|
||||
snapshot_config::SnapshotConfig,
|
||||
@ -48,6 +49,7 @@ impl SnapshotPackagerService {
|
||||
let t_snapshot_packager = Builder::new()
|
||||
.name("snapshot-packager".to_string())
|
||||
.spawn(move || {
|
||||
renice_this_thread(snapshot_config.packager_thread_niceness_adj).unwrap();
|
||||
let mut snapshot_gossip_manager = if enable_gossip_push {
|
||||
Some(SnapshotGossipManager {
|
||||
cluster_info,
|
||||
|
@ -35,6 +35,9 @@ pub struct SnapshotConfig {
|
||||
|
||||
/// This is the `debug_verify` parameter to use when calling `update_accounts_hash()`
|
||||
pub accounts_hash_debug_verify: bool,
|
||||
|
||||
// Thread niceness adjustment for snapshot packager service
|
||||
pub packager_thread_niceness_adj: i8,
|
||||
}
|
||||
|
||||
impl Default for SnapshotConfig {
|
||||
@ -54,6 +57,7 @@ impl Default for SnapshotConfig {
|
||||
snapshot_utils::DEFAULT_MAX_INCREMENTAL_SNAPSHOT_ARCHIVES_TO_RETAIN,
|
||||
accounts_hash_use_index: false,
|
||||
accounts_hash_debug_verify: false,
|
||||
packager_thread_niceness_adj: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,8 +10,8 @@ use {
|
||||
solana_clap_utils::{
|
||||
input_parsers::{keypair_of, keypairs_of, pubkey_of, value_of},
|
||||
input_validators::{
|
||||
is_keypair, is_keypair_or_ask_keyword, is_parsable, is_pow2, is_pubkey,
|
||||
is_pubkey_or_keypair, is_slot, is_valid_percentage,
|
||||
is_keypair, is_keypair_or_ask_keyword, is_niceness_adjustment_valid, is_parsable,
|
||||
is_pow2, is_pubkey, is_pubkey_or_keypair, is_slot, is_valid_percentage,
|
||||
},
|
||||
keypair::SKIP_SEED_PHRASE_VALIDATION_ARG,
|
||||
},
|
||||
@ -910,6 +910,16 @@ pub fn main() {
|
||||
.default_value(default_maximum_incremental_snapshot_archives_to_retain)
|
||||
.help("The maximum number of incremental snapshot archives to hold on to when purging older snapshots.")
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("snapshot_packager_niceness_adj")
|
||||
.long("snapshot-packager-niceness-adjustment")
|
||||
.value_name("ADJUSTMENT")
|
||||
.takes_value(true)
|
||||
.validator(is_niceness_adjustment_valid)
|
||||
.default_value("0")
|
||||
.help("Add this value to niceness of snapshot packager thread. Negative value \
|
||||
increases priority, positive value decreases priority.")
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("minimal_snapshot_download_speed")
|
||||
.long("minimal-snapshot-download-speed")
|
||||
@ -2328,6 +2338,8 @@ pub fn main() {
|
||||
value_t_or_exit!(matches, "maximum_full_snapshots_to_retain", usize);
|
||||
let maximum_incremental_snapshot_archives_to_retain =
|
||||
value_t_or_exit!(matches, "maximum_incremental_snapshots_to_retain", usize);
|
||||
let snapshot_packager_niceness_adj =
|
||||
value_t_or_exit!(matches, "snapshot_packager_niceness_adj", i8);
|
||||
let minimal_snapshot_download_speed =
|
||||
value_t_or_exit!(matches, "minimal_snapshot_download_speed", f32);
|
||||
let maximum_snapshot_download_abort =
|
||||
@ -2395,6 +2407,7 @@ pub fn main() {
|
||||
maximum_incremental_snapshot_archives_to_retain,
|
||||
accounts_hash_use_index: validator_config.accounts_db_use_index_hash_calculation,
|
||||
accounts_hash_debug_verify: validator_config.accounts_db_test_hash_calculation,
|
||||
packager_thread_niceness_adj: snapshot_packager_niceness_adj,
|
||||
});
|
||||
|
||||
validator_config.accounts_hash_interval_slots =
|
||||
|
Reference in New Issue
Block a user