Commit 52190933 authored by Chao Yu's avatar Chao Yu Committed by Jaegeuk Kim
Browse files

f2fs: sysfs: introduce critical_task_priority



This patch introduces /sys/fs/f2fs/<disk>/critical_task_priority, w/
this new sysfs interface, we can tune priority of f2fs_ckpt thread and
f2fs_gc thread.

Signed-off-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent bc367775
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -987,3 +987,11 @@ Contact: "Chao Yu" <chao@kernel.org>
Description:	f2fs can tune priority of thread which has entered into critical region covered by
		f2fs rwsemphore lock. This sysfs entry can be used to control priority value, the
		range is [100,139], by default the value is 120.

What:		/sys/fs/f2fs/<disk>/critical_task_priority
Date:		February 2026
Contact:	"Chao Yu" <chao@kernel.org>
Description:	It can be used to tune priority of f2fs critical task, e.g. f2fs_ckpt, f2fs_gc
		threads, limitation as below:
		- it requires user has CAP_SYS_NICE capability.
		- the range is [100, 139], by default the value is 100.
+2 −0
Original line number Diff line number Diff line
@@ -2158,6 +2158,8 @@ int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi)
	}

	set_task_ioprio(cprc->f2fs_issue_ckpt, cprc->ckpt_thread_ioprio);
	set_user_nice(cprc->f2fs_issue_ckpt,
			PRIO_TO_NICE(sbi->critical_task_priority));

	return 0;
}
+4 −0
Original line number Diff line number Diff line
@@ -1593,6 +1593,7 @@ enum node_type {
#define MAX_LOCK_ELAPSED_TIME		500

#define F2FS_DEFAULT_TASK_PRIORITY		(DEFAULT_PRIO)
#define F2FS_CRITICAL_TASK_PRIORITY		NICE_TO_PRIO(0)

static inline int f2fs_test_bit(unsigned int nr, char *addr);
static inline void f2fs_set_bit(unsigned int nr, char *addr);
@@ -2010,6 +2011,9 @@ struct f2fs_sb_info {
	/* adjust priority for task which is in critical region covered by lock */
	unsigned int lock_duration_priority;

	/* priority for critical task, e.g. f2fs_ckpt, f2fs_gc threads */
	long critical_task_priority;

#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 */
+2 −0
Original line number Diff line number Diff line
@@ -234,6 +234,8 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi)
		return err;
	}

	set_user_nice(gc_th->f2fs_gc_task,
			PRIO_TO_NICE(sbi->critical_task_priority));
	return 0;
}

+1 −0
Original line number Diff line number Diff line
@@ -4340,6 +4340,7 @@ static void init_sb_info(struct f2fs_sb_info *sbi)
	sbi->max_lock_elapsed_time = MAX_LOCK_ELAPSED_TIME;
	sbi->adjust_lock_priority = 0;
	sbi->lock_duration_priority = F2FS_DEFAULT_TASK_PRIORITY;
	sbi->critical_task_priority = F2FS_CRITICAL_TASK_PRIORITY;

	sbi->sum_blocksize = f2fs_sb_has_packed_ssa(sbi) ?
		4096 : sbi->blocksize;
Loading