Hi,
在 2023/06/16 16:21, Ali Gholami Rudi 写道:
Hi,
Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> wrote:
And this is perf's output for raid10:
+ 97.33% 0.04% fio [kernel.kallsyms] [k] entry_SYSCALL_64_after_hwframe
+ 96.96% 0.02% fio [kernel.kallsyms] [k] do_syscall_64
+ 94.43% 0.03% fio [kernel.kallsyms] [k] __x64_sys_io_submit
- 93.71% 0.04% fio [kernel.kallsyms] [k] io_submit_one
- 93.67% io_submit_one
- 76.03% aio_write
- 75.53% blkdev_write_iter
- 68.95% blk_finish_plug
- flush_plug_callbacks
- 68.93% raid10_unplug
- 64.31% __wake_up_common_lock
- 64.17% _raw_spin_lock_irqsave
native_queued_spin_lock_slowpath
This is unexpected, can you check if your kernel contain following
patch?
commit 460af1f9d9e62acce4a21f9bd00b5bcd5963bcd4
Author: Yu Kuai <yukuai3@xxxxxxxxxx>
Date: Mon May 29 21:11:06 2023 +0800
md/raid1-10: limit the number of plugged bio
If so, can you retest with following patch?
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index d0de8c9fb3cf..6fdd99c3e59a 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -911,7 +911,7 @@ static void flush_pending_writes(struct r10conf *conf)
blk_start_plug(&plug);
raid1_prepare_flush_writes(conf->mddev->bitmap);
- wake_up(&conf->wait_barrier);
+ wake_up_barrier(&conf->wait_barrier);
while (bio) { /* submit pending writes */
struct bio *next = bio->bi_next;
No, this patch was not present. I applied this one:
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 4fcfcb350d2b..52f0c24128ff 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -905,7 +905,7 @@ static void flush_pending_writes(struct r10conf *conf)
/* flush any pending bitmap writes to disk
* before proceeding w/ I/O */
md_bitmap_unplug(conf->mddev->bitmap);
- wake_up(&conf->wait_barrier);
+ wake_up_barrier(conf);
while (bio) { /* submit pending writes */
struct bio *next = bio->bi_next;
Thanks for the testing, sorry that I missed one place... Can you try to
change wake_up() to wake_up_barrier() from raid10_unplug() and test
again?
Thanks,
Kuai
I get almost the same result as before nevertheless:
Without the patch:
READ: IOPS=2033k BW=8329MB/s
WRITE: IOPS= 871k BW=3569MB/s
With the patch:
READ: IOPS=2027K BW=7920MiB/s
WRITE: IOPS= 869K BW=3394MiB/s
Perf:
+ 96.23% 0.04% fio [kernel.kallsyms] [k] entry_SYSCALL_64_after_hwframe
+ 95.86% 0.02% fio [kernel.kallsyms] [k] do_syscall_64
+ 94.30% 0.03% fio [kernel.kallsyms] [k] __x64_sys_io_submit
- 93.63% 0.04% fio [kernel.kallsyms] [k] io_submit_one
- 93.58% io_submit_one
- 76.44% aio_write
- 75.97% blkdev_write_iter
- 70.17% blk_finish_plug
- flush_plug_callbacks
- 70.15% raid10_unplug
- 66.12% __wake_up_common_lock
- 65.97% _raw_spin_lock_irqsave
65.57% native_queued_spin_lock_slowpath
- 3.85% submit_bio_noacct_nocheck
- 3.84% __submit_bio
- 2.09% raid10_end_write_request
- 0.83% raid_end_bio_io
0.82% allow_barrier
1.70% brd_submit_bio
+ 5.59% __generic_file_write_iter
+ 15.71% aio_read
+ 88.38% 0.71% fio fio [.] thread_main
+ 87.89% 0.00% fio [unknown] [k] 0xffffffffffffffff
+ 87.81% 0.00% fio fio [.] run_threads
+ 87.54% 0.00% fio fio [.] do_io (inlined)
+ 86.79% 0.31% fio libc-2.31.so [.] syscall
+ 86.19% 0.54% fio fio [.] td_io_queue
+ 85.79% 0.18% fio fio [.] fio_libaio_commit
+ 85.76% 0.14% fio fio [.] td_io_commit
+ 85.69% 0.14% fio libaio.so.1.0.1 [.] io_submit
+ 85.66% 0.00% fio fio [.] io_u_submit (inlined)
+ 76.45% 0.01% fio [kernel.kallsyms] [k] aio_write
..
.