This patch modify discard thread wait policy as below:
issued io_interrupted wait time(ms)
1.8 0 50
2. (0,8) 1 50
3.0 1 500 (dev is busy)
4.0 06 (no candidates)
Signed-off-by: Yunlei He
---
fs/f2fs/f2fs.h| 2 ++
fs/f2fs/segment.c | 6 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 1df7f10..0a6453b 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -184,6 +184,7 @@ enum {
#define MAX_DISCARD_BLOCKS(sbi)BLKS_PER_SEC(sbi)
#define DEF_MAX_DISCARD_REQUEST8 /* issue 8 discards per
round */
#define DEF_MIN_DISCARD_ISSUE_TIME 50 /* 50 ms, if exists */
+#define DEF_MID_DISCARD_ISSUE_TIME 500 /* 500 ms, if device busy */
#define DEF_MAX_DISCARD_ISSUE_TIME 6 /* 60 s, if no candidates */
#define DEF_CP_INTERVAL60 /* 60 secs */
#define DEF_IDLE_INTERVAL 5 /* 5 secs */
@@ -285,6 +286,7 @@ enum {
struct discard_policy {
int type; /* type of discard */
unsigned int min_interval; /* used for candidates exist */
+ unsigned int mid_interval; /* used for device busy */
unsigned int max_interval; /* used for candidates not exist */
unsigned int max_requests; /* # of discards issued per round */
unsigned int io_aware_gran; /* minimum granularity discard not be
aware of I/O */
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index f75f503..c7a8161e 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -1425,9 +1425,11 @@ static int issue_discard_thread(void *data)
sb_start_intwrite(sbi->sb);
issued = __issue_discard_cmd(sbi, );
- if (issued) {
+ if (issued > 0) {
__wait_all_discard_cmd(sbi, );
wait_ms = dpolicy.min_interval;
+ } else if (issued == -1){
+ wait_ms = dpolicy.mid_interval;
} else {
wait_ms = dpolicy.max_interval;
}
@@ -1726,10 +1728,12 @@ void init_discard_policy(struct discard_policy *dpolicy,
if (discard_type == DPOLICY_BG) {
dpolicy->min_interval = DEF_MIN_DISCARD_ISSUE_TIME;
+ dpolicy->mid_interval = DEF_MID_DISCARD_ISSUE_TIME;
dpolicy->max_interval = DEF_MAX_DISCARD_ISSUE_TIME;
dpolicy->io_aware = true;
} else if (discard_type == DPOLICY_FORCE) {
dpolicy->min_interval = DEF_MIN_DISCARD_ISSUE_TIME;
+ dpolicy->mid_interval = DEF_MID_DISCARD_ISSUE_TIME;
dpolicy->max_interval = DEF_MAX_DISCARD_ISSUE_TIME;
dpolicy->io_aware = false;
} else if (discard_type == DPOLICY_FSTRIM) {
--
1.9.1
--
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
___
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel