[Devel] [PATCH VZ9 1/2] fs/fuse/kio: finish cleanup of unused flow detection code
Alexey Kuznetsov
kuznet at virtuozzo.com
Fri Dec 5 12:10:44 MSK 2025
It was not clean which was not obvious until QA detected
significant drop in performance because small ioreqs
were accounted as 512k ones.
This patch goes together with "fs/fuse kio: remove unused flow detection code",
can be merged at the next port.
Signed-off-by: Alexey Kuznetsov <kuznet at virtuozzo.com>
---
fs/fuse/kio/pcs/pcs_cs.c | 2 --
fs/fuse/kio/pcs/pcs_map.c | 25 ++++++-------------------
fs/fuse/kio/pcs/pcs_req.h | 2 --
3 files changed, 6 insertions(+), 23 deletions(-)
diff --git a/fs/fuse/kio/pcs/pcs_cs.c b/fs/fuse/kio/pcs/pcs_cs.c
index 275fc8b..73476f5 100644
--- a/fs/fuse/kio/pcs/pcs_cs.c
+++ b/fs/fuse/kio/pcs/pcs_cs.c
@@ -699,8 +699,6 @@ static void do_cs_submit(struct pcs_cs *cs, struct pcs_int_request *ireq)
ioh->fiemap_count = PCS_FIEMAP_CHUNK_COUNT;
memset(&ioh->sync, 0, sizeof(ioh->sync));
- if (ireq->flags & IREQ_F_SEQ)
- ioh->sync.misc = PCS_CS_IO_SEQ;
if (ireq->dentry->no_csum_on_read)
ioh->sync.misc |= PCS_CS_IO_NOCSUM;
if ((ireq->dentry->fileinfo.attr.attrib & PCS_FATTR_IMMEDIATE_WRITE) || ireq->dentry->no_write_delay)
diff --git a/fs/fuse/kio/pcs/pcs_map.c b/fs/fuse/kio/pcs/pcs_map.c
index 3e2a00b..915b074 100644
--- a/fs/fuse/kio/pcs/pcs_map.c
+++ b/fs/fuse/kio/pcs/pcs_map.c
@@ -1474,7 +1474,7 @@ static void pcs_cs_deaccount(struct pcs_int_request *ireq, struct pcs_cs * cs, i
ireq->iochunk.cmd == PCS_REQ_T_FIEMAP)
cost = PCS_CS_HOLE_WEIGHT;
else
- cost = (ireq->flags & IREQ_F_RND_WEIGHT) ? 512*1024 : cong_roundup(ireq->iochunk.size);
+ cost = cong_roundup(ireq->iochunk.size);
} else
cost = PCS_CS_FLUSH_WEIGHT;
@@ -1877,11 +1877,8 @@ static int select_cs_for_read(struct pcs_cluster_core *cc, struct pcs_cs_list *
else if (io_locality == 0 && local_mask != local_busy_mask) {
selected = local_idx;
io_cost = local_min / 16;
- } else if (get_io_tweaks(cc) & PCS_TWEAK_IGNORE_SEQUENTIAL)
- selected = remote_idx;
- else {
+ } else
selected = remote_idx;
- }
/* Add penalty. The result of current decision will reflect itself in latency
* after at least one round-trip time. Penalty poisons weight until that moment.
@@ -2061,15 +2058,10 @@ static int pcs_cslist_submit_read(struct pcs_int_request *ireq, struct pcs_cs_li
}
}
- sreq->flags &= ~(IREQ_F_RND_WEIGHT | IREQ_F_SEQ);
- if (ireq->iochunk.cmd != PCS_REQ_T_READ) {
+ if (ireq->iochunk.cmd != PCS_REQ_T_READ)
weight = PCS_CS_HOLE_WEIGHT;
- } else if (sreq->iochunk.size >= 512*1024) {
+ else
weight = cong_roundup(sreq->iochunk.size);
- } else {
- sreq->flags |= IREQ_F_RND_WEIGHT;
- weight = 512*1024;
- }
cs_increment_in_flight(cs, weight);
allot -= weight;
@@ -2226,15 +2218,10 @@ static int pcs_cslist_submit_write(struct pcs_int_request *ireq, struct pcs_cs_l
}
}
- sreq->flags &= ~(IREQ_F_RND_WEIGHT | IREQ_F_SEQ);
- if (ireq->iochunk.cmd != PCS_REQ_T_WRITE) {
+ if (ireq->iochunk.cmd != PCS_REQ_T_WRITE)
weight = PCS_CS_HOLE_WEIGHT;
- } else if (sreq->iochunk.size > 512*1024) {
+ else
weight = cong_roundup(sreq->iochunk.size);
- } else {
- weight = 512*1024;
- sreq->flags |= IREQ_F_RND_WEIGHT;
- }
for (i = 0; i < csl->nsrv; i++)
cs_increment_in_flight(csl->cs[i].cslink.cs, weight);
diff --git a/fs/fuse/kio/pcs/pcs_req.h b/fs/fuse/kio/pcs/pcs_req.h
index 00af53a..a8c9c9b 100644
--- a/fs/fuse/kio/pcs/pcs_req.h
+++ b/fs/fuse/kio/pcs/pcs_req.h
@@ -114,9 +114,7 @@ struct pcs_int_request
int flags;
#define IREQ_F_FATAL 1
#define IREQ_F_ONCE 2
-#define IREQ_F_RND_WEIGHT 8
#define IREQ_F_CACHED 0x10
-#define IREQ_F_SEQ 0x20
#define IREQ_F_MAPPED 0x40
#define IREQ_F_MAP_REQUIRED 0x80
#define IREQ_F_LOC_TOKEN 0x100
--
1.8.3.1
More information about the Devel
mailing list