mirror of
https://github.com/deuxfleurs-org/garage.git
synced 2026-08-27 15:37:03 +00:00
Merge pull request 'Add the parameter, which replaces . This is to accommodate different storage media such as HDD and NVMe.' (#1251) from perrynzhou/garage:dev into main-v1
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/1251 Reviewed-by: Alex <lx@deuxfleurs.fr>
This commit is contained in:
@@ -25,7 +25,7 @@ db_engine = "lmdb"
|
|||||||
block_size = "1M"
|
block_size = "1M"
|
||||||
block_ram_buffer_max = "256MiB"
|
block_ram_buffer_max = "256MiB"
|
||||||
block_max_concurrent_reads = 16
|
block_max_concurrent_reads = 16
|
||||||
|
block_max_concurrent_writes_per_request =10
|
||||||
lmdb_map_size = "1T"
|
lmdb_map_size = "1T"
|
||||||
|
|
||||||
compression_level = 1
|
compression_level = 1
|
||||||
@@ -99,6 +99,7 @@ Top-level configuration options, in alphabetical order:
|
|||||||
[`allow_world_readable_secrets`](#allow_world_readable_secrets),
|
[`allow_world_readable_secrets`](#allow_world_readable_secrets),
|
||||||
[`block_max_concurrent_reads`](`block_max_concurrent_reads),
|
[`block_max_concurrent_reads`](`block_max_concurrent_reads),
|
||||||
[`block_ram_buffer_max`](#block_ram_buffer_max),
|
[`block_ram_buffer_max`](#block_ram_buffer_max),
|
||||||
|
[`block_max_concurrent_writes_per_request`](#block_max_concurrent_writes_per_request),
|
||||||
[`block_size`](#block_size),
|
[`block_size`](#block_size),
|
||||||
[`bootstrap_peers`](#bootstrap_peers),
|
[`bootstrap_peers`](#bootstrap_peers),
|
||||||
[`compression_level`](#compression_level),
|
[`compression_level`](#compression_level),
|
||||||
@@ -547,6 +548,14 @@ metric in Prometheus: a non-zero number of such events indicates an I/O
|
|||||||
bottleneck on HDD read speed.
|
bottleneck on HDD read speed.
|
||||||
|
|
||||||
|
|
||||||
|
#### `block_max_concurrent_writes_per_request` (since `v2.1.0`) {#block_max_concurrent_writes_per_request}
|
||||||
|
|
||||||
|
This parameter is designed to adapt to the concurrent write performance of
|
||||||
|
different storage media.Maximum number of parallel block writes per put request
|
||||||
|
Higher values improve throughput but increase memory usage.
|
||||||
|
|
||||||
|
Default: 3, Recommended: 10-30 for NVMe, 3-10 for HDD
|
||||||
|
|
||||||
#### `lmdb_map_size` {#lmdb_map_size}
|
#### `lmdb_map_size` {#lmdb_map_size}
|
||||||
|
|
||||||
This parameters can be used to set the map size used by LMDB,
|
This parameters can be used to set the map size used by LMDB,
|
||||||
|
|||||||
+1
-3
@@ -39,8 +39,6 @@ use crate::encryption::EncryptionParams;
|
|||||||
use crate::error::*;
|
use crate::error::*;
|
||||||
use crate::website::X_AMZ_WEBSITE_REDIRECT_LOCATION;
|
use crate::website::X_AMZ_WEBSITE_REDIRECT_LOCATION;
|
||||||
|
|
||||||
const PUT_BLOCKS_MAX_PARALLEL: usize = 3;
|
|
||||||
|
|
||||||
pub(crate) struct SaveStreamResult {
|
pub(crate) struct SaveStreamResult {
|
||||||
pub(crate) version_uuid: Uuid,
|
pub(crate) version_uuid: Uuid,
|
||||||
pub(crate) version_timestamp: u64,
|
pub(crate) version_timestamp: u64,
|
||||||
@@ -493,7 +491,7 @@ pub(crate) async fn read_and_put_blocks<S: Stream<Item = Result<Bytes, Error>> +
|
|||||||
};
|
};
|
||||||
let recv_next = async {
|
let recv_next = async {
|
||||||
// If more than a maximum number of writes are in progress, don't add more for now
|
// If more than a maximum number of writes are in progress, don't add more for now
|
||||||
if currently_running >= PUT_BLOCKS_MAX_PARALLEL {
|
if currently_running >= ctx.garage.config.block_max_concurrent_writes_per_request {
|
||||||
futures::future::pending().await
|
futures::future::pending().await
|
||||||
} else {
|
} else {
|
||||||
block_rx3.recv().await
|
block_rx3.recv().await
|
||||||
|
|||||||
@@ -45,6 +45,11 @@ pub struct Config {
|
|||||||
)]
|
)]
|
||||||
pub block_size: usize,
|
pub block_size: usize,
|
||||||
|
|
||||||
|
/// Maximum number of parallel block writes per PUT request
|
||||||
|
/// Higher values improve throughput but increase memory usage
|
||||||
|
/// Default: 3, Recommended: 10-30 for NVMe, 3-10 for HDD
|
||||||
|
#[serde(default = "default_block_max_concurrent_writes_per_request")]
|
||||||
|
pub block_max_concurrent_writes_per_request: usize,
|
||||||
/// Number of replicas. Can be any positive integer, but uneven numbers are more favorable.
|
/// Number of replicas. Can be any positive integer, but uneven numbers are more favorable.
|
||||||
/// - 1 for single-node clusters, or to disable replication
|
/// - 1 for single-node clusters, or to disable replication
|
||||||
/// - 3 is the recommended and supported setting.
|
/// - 3 is the recommended and supported setting.
|
||||||
@@ -267,6 +272,9 @@ pub struct KubernetesDiscoveryConfig {
|
|||||||
pub skip_crd: bool,
|
pub skip_crd: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn default_block_max_concurrent_writes_per_request() -> usize {
|
||||||
|
3
|
||||||
|
}
|
||||||
/// Read and parse configuration
|
/// Read and parse configuration
|
||||||
pub fn read_config(config_file: PathBuf) -> Result<Config, Error> {
|
pub fn read_config(config_file: PathBuf) -> Result<Config, Error> {
|
||||||
let config = std::fs::read_to_string(config_file)?;
|
let config = std::fs::read_to_string(config_file)?;
|
||||||
|
|||||||
Reference in New Issue
Block a user