mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
f2fs: sysfs: introduce max_lock_elapsed_time
This patch add a new sysfs node in /sys/fs/f2fs/<device>/max_lock_elapsed_time. This is a threshold, once a thread enters critical region that lock covers, total elapsed time exceeds this threshold, f2fs will print tracepoint to dump information of related context. This sysfs entry can be used to control the value of threshold, by default, the value is 500 ms. Signed-off-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
79b3cebc70
commit
e4b75621fc
|
|
@ -939,3 +939,11 @@ Description: Controls write priority in multi-devices setups. A value of 0 means
|
|||
allocate_section_policy = 1 Prioritize writing to section before allocate_section_hint
|
||||
allocate_section_policy = 2 Prioritize writing to section after allocate_section_hint
|
||||
=========================== ==========================================================
|
||||
|
||||
What: /sys/fs/f2fs/<disk>/max_lock_elapsed_time
|
||||
Date: December 2025
|
||||
Contact: "Chao Yu" <chao@kernel.org>
|
||||
Description: This is a threshold, once a thread enters critical region that lock covers, total
|
||||
elapsed time exceeds this threshold, f2fs will print tracepoint to dump information
|
||||
of related context. This sysfs entry can be used to control the value of threshold,
|
||||
by default, the value is 500 ms.
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ static inline void trace_lock_elapsed_time_end(struct f2fs_rwsem *sem,
|
|||
get_lock_elapsed_time(&tts);
|
||||
|
||||
total_time = div_u64(tts.total_time - lc->ts.total_time, npm);
|
||||
if (total_time <= MAX_LOCK_ELAPSED_TIME)
|
||||
if (total_time <= sem->sbi->max_lock_elapsed_time)
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
|
|
|
|||
|
|
@ -1951,6 +1951,9 @@ struct f2fs_sb_info {
|
|||
/* carve out reserved_blocks from total blocks */
|
||||
bool carve_out;
|
||||
|
||||
/* max elapsed time threshold in critical region that lock covered */
|
||||
unsigned long long max_lock_elapsed_time;
|
||||
|
||||
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||
struct kmem_cache *page_array_slab; /* page array entry */
|
||||
unsigned int page_array_slab_size; /* default page array slab size */
|
||||
|
|
|
|||
|
|
@ -4295,6 +4295,7 @@ static void init_sb_info(struct f2fs_sb_info *sbi)
|
|||
sbi->max_fragment_hole = DEF_FRAGMENT_SIZE;
|
||||
spin_lock_init(&sbi->gc_remaining_trials_lock);
|
||||
atomic64_set(&sbi->current_atomic_write, 0);
|
||||
sbi->max_lock_elapsed_time = MAX_LOCK_ELAPSED_TIME;
|
||||
|
||||
sbi->dir_level = DEF_DIR_LEVEL;
|
||||
sbi->interval_time[CP_TIME] = DEF_CP_INTERVAL;
|
||||
|
|
|
|||
|
|
@ -1219,6 +1219,7 @@ F2FS_SBI_GENERAL_RW_ATTR(blkzone_alloc_policy);
|
|||
F2FS_SBI_GENERAL_RW_ATTR(carve_out);
|
||||
F2FS_SBI_GENERAL_RW_ATTR(reserved_pin_section);
|
||||
F2FS_SBI_GENERAL_RW_ATTR(bggc_io_aware);
|
||||
F2FS_SBI_GENERAL_RW_ATTR(max_lock_elapsed_time);
|
||||
|
||||
/* STAT_INFO ATTR */
|
||||
#ifdef CONFIG_F2FS_STAT_FS
|
||||
|
|
@ -1422,6 +1423,7 @@ static struct attribute *f2fs_attrs[] = {
|
|||
ATTR_LIST(reserved_pin_section),
|
||||
ATTR_LIST(allocate_section_hint),
|
||||
ATTR_LIST(allocate_section_policy),
|
||||
ATTR_LIST(max_lock_elapsed_time),
|
||||
NULL,
|
||||
};
|
||||
ATTRIBUTE_GROUPS(f2fs);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user