From nobody Thu Jan 13 04:51:14 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 2623B195DB1D; Thu, 13 Jan 2022 04:51:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JZBpV6D1xz4jJ7; Thu, 13 Jan 2022 04:51:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B56801A590; Thu, 13 Jan 2022 04:51:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 20D4pEv8003234; Thu, 13 Jan 2022 04:51:14 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 20D4pEKd003233; Thu, 13 Jan 2022 04:51:14 GMT (envelope-from git) Date: Thu, 13 Jan 2022 04:51:14 GMT Message-Id: <202201130451.20D4pEKd003233@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alexander Motin Subject: git: 3c6b6246f2f7 - stable/13 - CTL: Allow I/Os up to 8MB, depending on maxphys value. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mav X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 3c6b6246f2f765e590ea665798e0e56d98a355a8 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1642049474; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6eLTYaVfizKNkWK+9KAkPMSi0CCrIecv1qDuuGvkdb4=; b=exo3H3lmoXaDNU2rJLG2i6FnuKFNtci5iy48gNGAJNR5BU8D5MoLlxXh/+6ESIKS34R0E1 QBwlxkDy3yCLI1wHJxSMPP3r7zYpyC8TEPn98986Cr4RuopcSMYqTRVsKNRexwFasIopen hUr3W8dTXqzi2o1/0TKT5sUuXZsbGO6sOEzPT1yO9EAG55L4e3kIEzlWJdMdnGkGDV/SJU 7ubDjcgSFs91VwQ0+8mS+Olyl629PPVkL0yJcM7Saa5kKNSZD84zcmGghzhIRAclK64oHS zrKC4owmvvzcSUOt2I7CHDmuGzwQX6Gu7OcmjhNnAhtocoK2P2hUvzSA44tg1A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1642049474; a=rsa-sha256; cv=none; b=gd8zQkYOB7qh3MMMGMX58SUjI9j6qCF7LPsvorFEQiw1lQR9GqOvrYapEM2OmHae6jN/qr lT+PofpUZBG3OiBEoQlC01IMBeD3oU5Kzjoh2jm6NxgefWX3MkWiRTT92k54/0jUogB3ie 8GqBXIYHhuLBIRC2imMdfQxvQWIQNP1TPsezZy8PLJcaoHDzDOh65CdYsPCHBqHBqyplh5 cYOQOpi+DzWYcDhi61mvA88jN/7cC76VS2YEm5k6s+D+0JQd+ja9Sa40zke37ArSClCxAs a5dKrl1U/yEUqLasz1rMwxGUd5aSLVIYiJa2JZ5bdcPe2AROiBJkmh0iqLs/jw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=3c6b6246f2f765e590ea665798e0e56d98a355a8 commit 3c6b6246f2f765e590ea665798e0e56d98a355a8 Author: Alexander Motin AuthorDate: 2021-12-30 03:58:52 +0000 Commit: Alexander Motin CommitDate: 2022-01-13 04:51:01 +0000 CTL: Allow I/Os up to 8MB, depending on maxphys value. For years CTL block backend limited I/O size to 1MB, splitting larger requests into sequentially processed chunks. It is sufficient for most of use cases, since typical initiators rarely use bigger I/Os. One of known exceptions is VMWare VAAI offload, by default sending up to 8 4MB EXTENDED COPY requests same time. CTL internally converted those into 32 1MB READ/WRITE requests, that could overwhelm the block backend, having finite number of processing threads and making more important interactive I/Os to wait in its queue. Previously it was partially covered by CTL core serializing sequential reads to help ZFS speculative prefetcher, but that serialization was significantly relaxed after recent ZFS improvements. With the new settings block backend receives 8 4MB requests, that should be easier for both CTL itself and the underlying storage. MFC after: 2 weeks Sponsored by: iXsystems, Inc. (cherry picked from commit b06771aa667dadeffa0b0ec840af13b74d55e186) --- sys/cam/ctl/ctl_backend_block.c | 30 ++++++++++++++---------------- sys/cam/ctl/ctl_tpc.c | 6 +++--- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/sys/cam/ctl/ctl_backend_block.c b/sys/cam/ctl/ctl_backend_block.c index 83ea6b43dac3..ac23a6ce2bc9 100644 --- a/sys/cam/ctl/ctl_backend_block.c +++ b/sys/cam/ctl/ctl_backend_block.c @@ -3,8 +3,8 @@ * * Copyright (c) 2003 Silicon Graphics International Corp. * Copyright (c) 2009-2011 Spectra Logic Corporation - * Copyright (c) 2012 The FreeBSD Foundation - * Copyright (c) 2014-2015 Alexander Motin + * Copyright (c) 2012,2021 The FreeBSD Foundation + * Copyright (c) 2014-2021 Alexander Motin * All rights reserved. * * Portions of this software were developed by Edward Tomasz Napierala @@ -97,16 +97,15 @@ __FBSDID("$FreeBSD$"); #include /* - * The idea here is that we'll allocate enough S/G space to hold a 1MB - * I/O. If we get an I/O larger than that, we'll split it. + * The idea here is to allocate enough S/G space to handle at least 1MB I/Os. + * On systems with small maxphys it can be 8 128KB segments. On large systems + * it can be up to 8 1MB segments. I/Os larger than that we'll split. */ -#define CTLBLK_HALF_IO_SIZE (512 * 1024) -#define CTLBLK_MAX_IO_SIZE (CTLBLK_HALF_IO_SIZE * 2) +#define CTLBLK_MAX_SEGS 8 +#define CTLBLK_HALF_SEGS (CTLBLK_MAX_SEGS / 2) #define CTLBLK_MIN_SEG (128 * 1024) -#define CTLBLK_MAX_SEG MIN(CTLBLK_HALF_IO_SIZE, maxphys) -#define CTLBLK_HALF_SEGS MAX(CTLBLK_HALF_IO_SIZE / CTLBLK_MIN_SEG, 1) -#define CTLBLK_MAX_SEGS (CTLBLK_HALF_SEGS * 2) -#define CTLBLK_NUM_SEGS (CTLBLK_MAX_IO_SIZE / CTLBLK_MAX_SEG) +#define CTLBLK_MAX_SEG MIN(1024 * 1024, MAX(CTLBLK_MIN_SEG, maxphys)) +#define CTLBLK_MAX_IO_SIZE (CTLBLK_MAX_SEG * CTLBLK_MAX_SEGS) #ifdef CTLBLK_DEBUG #define DPRINTF(fmt, args...) \ @@ -1146,10 +1145,10 @@ ctl_be_block_dispatch_dev(struct ctl_be_block_lun *be_lun, */ if (csw) { max_iosize = dev->si_iosize_max; - if (max_iosize < PAGE_SIZE) + if (max_iosize <= 0) max_iosize = DFLTPHYS; } else - max_iosize = DFLTPHYS; + max_iosize = maxphys; cur_offset = beio->io_offset; for (i = 0; i < beio->num_segs; i++) { @@ -1317,7 +1316,7 @@ ctl_be_block_cw_dispatch_ws(struct ctl_be_block_lun *be_lun, else pbo = 0; len_left = (uint64_t)lbalen->len * cbe_lun->blocksize; - for (i = 0, lba = 0; i < CTLBLK_NUM_SEGS && len_left > 0; i++) { + for (i = 0, lba = 0; i < CTLBLK_MAX_SEGS && len_left > 0; i++) { /* * Setup the S/G entry for this chunk. */ @@ -1585,11 +1584,10 @@ ctl_be_block_dispatch(struct ctl_be_block_lun *be_lun, DPRINTF("%s at LBA %jx len %u @%ju\n", (beio->bio_cmd == BIO_READ) ? "READ" : "WRITE", (uintmax_t)lbalen->lba, lbalen->len, bptrlen->len); + lbas = CTLBLK_MAX_IO_SIZE; if (lbalen->flags & CTL_LLF_COMPARE) { beio->two_sglists = 1; - lbas = CTLBLK_HALF_IO_SIZE; - } else { - lbas = CTLBLK_MAX_IO_SIZE; + lbas /= 2; } lbas = MIN(lbalen->len - bptrlen->len, lbas / cbe_lun->blocksize); beio->io_offset = (lbalen->lba + bptrlen->len) * cbe_lun->blocksize; diff --git a/sys/cam/ctl/ctl_tpc.c b/sys/cam/ctl/ctl_tpc.c index de9e97b87a3e..60cd5611643d 100644 --- a/sys/cam/ctl/ctl_tpc.c +++ b/sys/cam/ctl/ctl_tpc.c @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 Alexander Motin + * Copyright (c) 2014-2021 Alexander Motin * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -67,8 +67,8 @@ __FBSDID("$FreeBSD$"); #define TPC_MAX_LIST 8192 #define TPC_MAX_INLINE 0 #define TPC_MAX_LISTS 255 -#define TPC_MAX_IO_SIZE (1024 * 1024) -#define TPC_MAX_IOCHUNK_SIZE (TPC_MAX_IO_SIZE * 16) +#define TPC_MAX_IO_SIZE (8 * MIN(1024 * 1024, MAX(128 * 1024, maxphys))) +#define TPC_MAX_IOCHUNK_SIZE (TPC_MAX_IO_SIZE * 4) #define TPC_MIN_TOKEN_TIMEOUT 1 #define TPC_DFL_TOKEN_TIMEOUT 60 #define TPC_MAX_TOKEN_TIMEOUT 600