From: Hao Xu <[email protected]>
To: Jens Axboe <[email protected]>
Cc: [email protected], Pavel Begunkov <[email protected]>,
Joseph Qi <[email protected]>
Subject: [RFC 0/9] fixed worker: a new way to handle io works
Date: Wed, 24 Nov 2021 12:46:39 +0800 [thread overview]
Message-ID: <[email protected]> (raw)
There is big contension in current io-wq implementation. Introduce a new
type io-worker called fixed-worker to solve this problem. it is also a
new way to handle works. In this new system, works are dispatched to
different private queues rather than a long shared queue.
Detail introduction and data in 7/9.
To be done: 1) the hash optimization isn't applied yet
2) user interface
3) cannot ensure linear order for works of same reg file
writing since we now have multiple work lists.
4) code clean
Sent this for suggestions.
The test program used in this patchset:
// nop_test.c
// remove some error handling, variable definition, header files etc.
typedef long long ll;
ll usecs(struct timeval tv) {
return tv.tv_sec*(ll)1000*1000+tv.tv_usec;
}
static int test_single_nop(struct io_uring *ring, int depth)
{
for (i=0; i<depth; i++) {
sqe = io_uring_get_sqe(ring);
io_uring_prep_nop(sqe);
sqe->flags |= IOSQE_ASYNC;
}
ret = io_uring_submit(ring);
for(i=0; i<depth; i++) {
ret = io_uring_wait_cqe(ring, &cqe);
io_uring_cqe_seen(ring, cqe);
}
return 0;
}
int main(int argc, char *argv[])
{
ll delta;
struct io_uring ring;
int ret, l, loop=4000000, depth = 10;
struct timeval tv_begin, tv_end;
struct timezone tz;
ret = io_uring_queue_init(10010, &ring, 0);
if (ret) {
fprintf(stderr, "ring setup failed: %d\n", ret);
return 1;
}
l = loop;
gettimeofday(&tv_begin, &tz);
while(loop--)
test_single_nop(&ring, depth);
gettimeofday(&tv_end, &tz);
delta = usecs(tv_end) - usecs(tv_begin);
printf("time spent: %lld usecs\n", delta);
printf("IOPS: %lld\n", (ll)l * depth * 1000000 / delta);
return 0;
}
Hao Xu (9):
io-wq: decouple work_list protection from the big wqe->lock
io-wq: reduce acct->lock crossing functions lock/unlock
io-wq: update check condition for lock
io-wq: use IO_WQ_ACCT_NR rather than hardcoded number
io-wq: move hash wait entry to io_wqe_acct
io-wq: add infra data structure for fix workers
io-wq: implement fixed worker logic
io-wq: batch the handling of fixed worker private works
io-wq: small optimization for __io_worker_busy()
fs/io-wq.c | 415 ++++++++++++++++++++++++++++++++++++++---------------
fs/io-wq.h | 5 +
2 files changed, 308 insertions(+), 112 deletions(-)
--
2.24.4
next reply other threads:[~2021-11-24 4:46 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-24 4:46 Hao Xu [this message]
2021-11-24 4:46 ` [PATCH 1/9] io-wq: decouple work_list protection from the big wqe->lock Hao Xu
2021-11-24 4:46 ` [PATCH 2/9] io-wq: reduce acct->lock crossing functions lock/unlock Hao Xu
2021-11-24 4:46 ` [PATCH 3/9] io-wq: update check condition for lock Hao Xu
2021-11-25 14:47 ` Pavel Begunkov
2021-11-30 3:32 ` Hao Xu
2021-11-24 4:46 ` [PATCH 4/9] io-wq: use IO_WQ_ACCT_NR rather than hardcoded number Hao Xu
2021-11-24 4:46 ` [PATCH 5/9] io-wq: move hash wait entry to io_wqe_acct Hao Xu
2021-11-24 4:46 ` [PATCH 6/9] io-wq: add infra data structure for fixed workers Hao Xu
2021-11-24 4:46 ` [PATCH 7/9] io-wq: implement fixed worker logic Hao Xu
2021-11-24 4:46 ` [PATCH 8/9] io-wq: batch the handling of fixed worker private works Hao Xu
2021-11-24 4:46 ` [PATCH 9/9] io-wq: small optimization for __io_worker_busy() Hao Xu
2021-11-25 15:09 ` [RFC 0/9] fixed worker: a new way to handle io works Pavel Begunkov
2021-11-30 3:48 ` Hao Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox