Re: [PATCH] block/mq-deadline: Speed up the dispatch of low-priority requests
From: Damien Le Moal <hidden>
Date: 2021-08-27 04:49:45
On 2021/08/27 12:13, Jens Axboe wrote:
On 8/26/21 8:48 PM, Bart Van Assche wrote:quoted
On 8/26/21 5:05 PM, Jens Axboe wrote:quoted
On 8/26/21 6:03 PM, Bart Van Assche wrote:quoted
Here is an overview of the tests I ran so far, all on the same test setup: * No I/O scheduler: about 5630 K IOPS. * Kernel v5.11 + mq-deadline: about 1100 K IOPS. * block-for-next + mq-deadline: about 760 K IOPS. * block-for-next with improved mq-deadline performance: about 970 K IOPS.So we're still off by about 12%, I don't think that is good enough. That's assuming that v5.11 + mq-deadline is the same as for-next with the mq-deadline change reverted? Because that would be the key number to compare it with.With the patch series that is available at https://github.com/bvanassche/linux/tree/block-for-next the same test reports 1090 K IOPS or only 1% below the v5.11 result. I will post that series on the linux-block mailing list after I have finished testing that series.OK sounds good. I do think we should just do the revert at this point, any real fix is going to end up being bigger than I'd like at this point. Then we can re-introduce the feature once we're happy with the results.
FYI, here is what I get with Bart's test script running on a dual socket 8-cores/16-threads Xeon machine (32 CPUs total): * 5.14.0-rc7, with fb926032b320 reverted: ----------------------------------------- QD 1: IOPS=305k (*) QD 2: IOPS=411k QD 4: IOPS=408k QD 8: IOPS=414k * 5.14.0-rc7, current (no modification): ---------------------------------------- QD 1: IOPS=296k (*) QD 2: IOPS=207k QD 4: IOPS=208k QD 8: IOPS=210k * 5.14.0-rc7, with modified patch (attached to this email): ----------------------------------------------------------- QD 1: IOPS=287k (*) QD 2: IOPS=334k QD 4: IOPS=330k QD 8: IOPS=334k For reference, with the same test script using the none scheduler: QD 1: IOPS=2172K QD 2: IOPS=1075K QD 4: IOPS=1075k QD 8: IOPS=1077k So the mq-deadline priority patch reduces performance by nearly half at high QD. With the modified patch, we are back to better numbers, but still a significant 20% drop at high QD. (*) Note: in all cases using the mq-deadline scheduler, for the first run at QD=1, I get this splat 100% of the time. [ 95.173889] watchdog: BUG: soft lockup - CPU#0 stuck for 26s! [kworker/0:1H:757] [ 95.181351] Modules linked in: null_blk rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache netfs nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables libcrc32c nfnetlink sunrpc vfat fat iTCO_wdt iTCO_vendor_support ipmi_ssif x86_pkg_temp_thermal coretemp i2c_i801 acpi_ipmi bfq i2c_smbus ioatdma lpc_ich ipmi_si intel_pch_thermal dca ipmi_devintf ipmi_msghandler acpi_power_meter fuse ip_tables sd_mod ast i2c_algo_bit drm_vram_helper drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm_ttm_helper ttm drm i40e crct10dif_pclmul mpt3sas crc32_pclmul ahci ghash_clmulni_intel libahci raid_class scsi_transport_sas libata pkcs8_key_parser [ 95.252173] irq event stamp: 30500990 [ 95.255860] hardirqs last enabled at (30500989): [<ffffffff81910e2d>] _raw_spin_unlock_irqrestore+0x2d/0x40 [ 95.265735] hardirqs last disabled at (30500990): [<ffffffff819050cb>] sysvec_apic_timer_interrupt+0xb/0x90 [ 95.275520] softirqs last enabled at (30496338): [<ffffffff810b331f>] __irq_exit_rcu+0xbf/0xe0 [ 95.284259] softirqs last disabled at (30496333): [<ffffffff810b331f>] __irq_exit_rcu+0xbf/0xe0 [ 95.292994] CPU: 0 PID: 757 Comm: kworker/0:1H Not tainted 5.14.0-rc7+ #1334 [ 95.300076] Hardware name: Supermicro Super Server/X11DPL-i, BIOS 3.3 02/21/2020 [ 95.307504] Workqueue: kblockd blk_mq_run_work_fn [ 95.312243] RIP: 0010:_raw_spin_unlock_irqrestore+0x35/0x40 [ 95.317844] Code: c7 18 53 48 89 f3 48 8b 74 24 10 e8 35 82 80 ff 48 89 ef e8 9d ac 80 ff 80 e7 02 74 06 e8 23 33 8b ff fb 65 ff 0d 8b 5f 70 7e <5b> 5d c3 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 fd 65 ff [ 95.336680] RSP: 0018:ffff888448cefbb0 EFLAGS: 00000202 [ 95.341934] RAX: 0000000001d1687d RBX: 0000000000000287 RCX: 0000000000000006 [ 95.349103] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff81910e2d [ 95.356270] RBP: ffff888192649218 R08: 0000000000000001 R09: 0000000000000001 [ 95.363437] R10: 0000000000000000 R11: 000000000000005c R12: 0000000000000000 [ 95.370604] R13: 0000000000000287 R14: ffff888192649218 R15: ffff88885fe68e80 [ 95.377771] FS: 0000000000000000(0000) GS:ffff88885fe00000(0000) knlGS:0000000000000000 [ 95.385901] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 95.391675] CR2: 00007f59bfe71f80 CR3: 000000074a91e005 CR4: 00000000007706f0 [ 95.398842] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 95.406009] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 95.413176] PKRU: 55555554 [ 95.415904] Call Trace: [ 95.418373] try_to_wake_up+0x268/0x7c0 [ 95.422238] blk_update_request+0x25b/0x420 [ 95.426452] blk_mq_end_request+0x1c/0x120 [ 95.430576] null_handle_cmd+0x12d/0x270 [null_blk] [ 95.435485] blk_mq_dispatch_rq_list+0x13c/0x7f0 [ 95.440130] ? sbitmap_get+0x86/0x190 [ 95.443826] __blk_mq_do_dispatch_sched+0xb5/0x2f0 [ 95.448653] __blk_mq_sched_dispatch_requests+0xf4/0x140 [ 95.453998] blk_mq_sched_dispatch_requests+0x30/0x60 [ 95.459083] __blk_mq_run_hw_queue+0x49/0x90 [ 95.463377] process_one_work+0x26c/0x570 [ 95.467421] worker_thread+0x55/0x3c0 [ 95.471103] ? process_one_work+0x570/0x570 [ 95.475313] kthread+0x140/0x160 [ 95.478567] ? set_kthread_struct+0x40/0x40 [ 95.482774] ret_from_fork+0x1f/0x30 -- Damien Le Moal Western Digital Research
Attachments
- 0001-block-mq-deadline-Speed-up-the-dispatch-of-low-prior.patch [text/plain] 9575 bytes · preview