mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
dm cache: make smq background work limit configurable
The maximum number of concurrent background work items (promotions, demotions, writebacks) in the SMQ policy was hardcoded to 4096, with a FIXME comment noting it should be made configurable. This value was originally tuned down from 10240 to balance memory overhead (~128 bytes per entry, ~512KB at 4096 entries) against I/O parallelism. However, different workloads and cache sizes may benefit from different limits: - Write-heavy workloads may need more writeback concurrency - Very large caches (10+ TB) may need more promotion slots - Memory-constrained systems may want a lower limit Make this configurable via the module parameter "smq_max_background_work" (defaulting to 4096 to preserve existing behaviour). Clamp the value to at least 1 to prevent setting 0, which would block all background work. The parameter only affects newly created cache devices; existing caches retain their value from creation time. Signed-off-by: Cao Guanghui <caoguanghui@kylinos.cn> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
This commit is contained in:
parent
f9f57971da
commit
af8ce93329
|
|
@ -21,6 +21,16 @@
|
|||
|
||||
/*----------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Maximum number of concurrent background work items (promotions,
|
||||
* demotions, writebacks) that can be queued in the background tracker.
|
||||
* Tuneable via the module parameter smq_max_background_work.
|
||||
* Only affects newly created cache devices.
|
||||
*/
|
||||
static unsigned int smq_max_background_work = 4096;
|
||||
module_param(smq_max_background_work, uint, 0644);
|
||||
MODULE_PARM_DESC(smq_max_background_work, "Max concurrent background work items");
|
||||
|
||||
/*
|
||||
* Safe division functions that return zero on divide by zero.
|
||||
*/
|
||||
|
|
@ -1816,7 +1826,7 @@ __smq_create(dm_cblock_t cache_size, sector_t origin_size, sector_t cache_block_
|
|||
mq->next_hotspot_period = jiffies;
|
||||
mq->next_cache_period = jiffies;
|
||||
|
||||
mq->bg_work = btracker_create(4096); /* FIXME: hard coded value */
|
||||
mq->bg_work = btracker_create(max(1u, smq_max_background_work));
|
||||
if (!mq->bg_work)
|
||||
goto bad_btracker;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user