f2fs: introduce discard_io_aware_gran sysfs node
The current discard_io_aware_gran is a fixed value, change it to be configurable through the sys node. Signed-off-by: Yangtao Li <frank.li@vivo.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
c5f9db2548
commit
120e0ea12d
@ -708,3 +708,12 @@ Description: Support configuring fault injection type, should be
|
|||||||
FAULT_LOCK_OP 0x000020000
|
FAULT_LOCK_OP 0x000020000
|
||||||
FAULT_BLKADDR 0x000040000
|
FAULT_BLKADDR 0x000040000
|
||||||
=================== ===========
|
=================== ===========
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/discard_io_aware_gran
|
||||||
|
Date: January 2023
|
||||||
|
Contact: "Yangtao Li" <frank.li@vivo.com>
|
||||||
|
Description: Controls background discard granularity of inner discard thread
|
||||||
|
when is not in idle. Inner thread will not issue discards with size that
|
||||||
|
is smaller than granularity. The unit size is one block(4KB), now only
|
||||||
|
support configuring in range of [0, 512].
|
||||||
|
Default: 512
|
||||||
|
@ -409,6 +409,7 @@ struct discard_cmd_control {
|
|||||||
unsigned int min_discard_issue_time; /* min. interval between discard issue */
|
unsigned int min_discard_issue_time; /* min. interval between discard issue */
|
||||||
unsigned int mid_discard_issue_time; /* mid. interval between discard issue */
|
unsigned int mid_discard_issue_time; /* mid. interval between discard issue */
|
||||||
unsigned int max_discard_issue_time; /* max. interval between discard issue */
|
unsigned int max_discard_issue_time; /* max. interval between discard issue */
|
||||||
|
unsigned int discard_io_aware_gran; /* minimum discard granularity not be aware of I/O */
|
||||||
unsigned int discard_urgent_util; /* utilization which issue discard proactively */
|
unsigned int discard_urgent_util; /* utilization which issue discard proactively */
|
||||||
unsigned int discard_granularity; /* discard granularity */
|
unsigned int discard_granularity; /* discard granularity */
|
||||||
unsigned int max_ordered_discard; /* maximum discard granularity issued by lba order */
|
unsigned int max_ordered_discard; /* maximum discard granularity issued by lba order */
|
||||||
|
@ -1059,7 +1059,7 @@ static void __init_discard_policy(struct f2fs_sb_info *sbi,
|
|||||||
dpolicy->granularity = granularity;
|
dpolicy->granularity = granularity;
|
||||||
|
|
||||||
dpolicy->max_requests = dcc->max_discard_request;
|
dpolicy->max_requests = dcc->max_discard_request;
|
||||||
dpolicy->io_aware_gran = MAX_PLIST_NUM;
|
dpolicy->io_aware_gran = dcc->discard_io_aware_gran;
|
||||||
dpolicy->timeout = false;
|
dpolicy->timeout = false;
|
||||||
|
|
||||||
if (discard_type == DPOLICY_BG) {
|
if (discard_type == DPOLICY_BG) {
|
||||||
@ -2063,6 +2063,7 @@ static int create_discard_cmd_control(struct f2fs_sb_info *sbi)
|
|||||||
if (!dcc)
|
if (!dcc)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
dcc->discard_io_aware_gran = MAX_PLIST_NUM;
|
||||||
dcc->discard_granularity = DEFAULT_DISCARD_GRANULARITY;
|
dcc->discard_granularity = DEFAULT_DISCARD_GRANULARITY;
|
||||||
dcc->max_ordered_discard = DEFAULT_MAX_ORDERED_DISCARD_GRANULARITY;
|
dcc->max_ordered_discard = DEFAULT_MAX_ORDERED_DISCARD_GRANULARITY;
|
||||||
if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_SEGMENT)
|
if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_SEGMENT)
|
||||||
|
@ -473,6 +473,17 @@ out:
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(a->attr.name, "discard_io_aware_gran")) {
|
||||||
|
if (t > MAX_PLIST_NUM)
|
||||||
|
return -EINVAL;
|
||||||
|
if (!f2fs_block_unit_discard(sbi))
|
||||||
|
return -EINVAL;
|
||||||
|
if (t == *ui)
|
||||||
|
return count;
|
||||||
|
*ui = t;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
if (!strcmp(a->attr.name, "discard_granularity")) {
|
if (!strcmp(a->attr.name, "discard_granularity")) {
|
||||||
if (t == 0 || t > MAX_PLIST_NUM)
|
if (t == 0 || t > MAX_PLIST_NUM)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -825,6 +836,7 @@ F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_discard_request, max_discard_req
|
|||||||
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, min_discard_issue_time, min_discard_issue_time);
|
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, min_discard_issue_time, min_discard_issue_time);
|
||||||
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, mid_discard_issue_time, mid_discard_issue_time);
|
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, mid_discard_issue_time, mid_discard_issue_time);
|
||||||
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_discard_issue_time, max_discard_issue_time);
|
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_discard_issue_time, max_discard_issue_time);
|
||||||
|
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_io_aware_gran, discard_io_aware_gran);
|
||||||
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_urgent_util, discard_urgent_util);
|
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_urgent_util, discard_urgent_util);
|
||||||
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_granularity, discard_granularity);
|
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_granularity, discard_granularity);
|
||||||
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_ordered_discard, max_ordered_discard);
|
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_ordered_discard, max_ordered_discard);
|
||||||
@ -960,6 +972,7 @@ static struct attribute *f2fs_attrs[] = {
|
|||||||
ATTR_LIST(min_discard_issue_time),
|
ATTR_LIST(min_discard_issue_time),
|
||||||
ATTR_LIST(mid_discard_issue_time),
|
ATTR_LIST(mid_discard_issue_time),
|
||||||
ATTR_LIST(max_discard_issue_time),
|
ATTR_LIST(max_discard_issue_time),
|
||||||
|
ATTR_LIST(discard_io_aware_gran),
|
||||||
ATTR_LIST(discard_urgent_util),
|
ATTR_LIST(discard_urgent_util),
|
||||||
ATTR_LIST(discard_granularity),
|
ATTR_LIST(discard_granularity),
|
||||||
ATTR_LIST(max_ordered_discard),
|
ATTR_LIST(max_ordered_discard),
|
||||||
|
Loading…
Reference in New Issue
Block a user