From nobody Sun Feb 8 22:34:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1601503815; cv=none; d=zohomail.com; s=zohoarc; b=C8dKd3uIW9grRo0Xzis0eOpVs894zMErbNasBJWzNwXeJ27l+upVUNY+gUojpBTt8NdKTI1hzaZEA+XJGT1JB/xdjkWH5nqNFbmuWZwQsoXhL/E6P+GNsHKv2MMEdsDAvpGeuh1/2u4E10zdvYpE58MS68wgMN9MfGeXEBwhtl8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1601503815; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ToigBilwZr7YNmrJ47XnWHOjAI0GV4Ahbr/gqoNYQ+k=; b=Xi4WJkQg5e6xjamQuo4wx+nfXlG2H2JSi/kzE/iJL7ErIS23uKinKLE5A54j4oOXo9Svwh3T1tl8IzBg9/96D1XGFqN4Fgq+7jUe9zeShh0XXz556C09RcjATzxjmq/QV4tPBluecRgol1yZA4L5gjUmC8M2MHh3HZO782zRITk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1601503815993466.642684506681; Wed, 30 Sep 2020 15:10:15 -0700 (PDT) Received: from localhost ([::1]:56486 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kNkIg-0003hU-FU for importer@patchew.org; Wed, 30 Sep 2020 18:10:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56126) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kNkD5-0005Ol-7A; Wed, 30 Sep 2020 18:04:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:50474) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kNkD3-0007vT-3r; Wed, 30 Sep 2020 18:04:26 -0400 Received: from dhcp-10-100-145-180.wdl.wdc.com (unknown [199.255.45.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0BACB20BED; Wed, 30 Sep 2020 22:04:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1601503463; bh=bAD+jfXU6J1t0RBHkb7mu5AtcCOwQGtCOjdgO5scJiA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zoFDSf2/QzPlDaQqWjiJZeYZ9N9AKz+H0mrNFJoVnWaJ3VUsGNafyImMVlXKg7RUt 4EYird2YhaHAvNJ9d1Tbk570HhQ5qOv7VI36h7Lz1Da970jCpVtmJzUYxTFVLc5+SN XTHkzYzWs3ts2N4/RZN5EUMWP41g2kInm9FTXlVw= From: Keith Busch To: qemu-block@nongnu.org, qemu-devel@nongnu.org, Klaus Jensen Subject: [PATCH 3/9] hw/block/nvme: support per-namespace smart log Date: Wed, 30 Sep 2020 15:04:08 -0700 Message-Id: <20200930220414.562527-4-kbusch@kernel.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200930220414.562527-1-kbusch@kernel.org> References: <20200930220414.562527-1-kbusch@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=198.145.29.99; envelope-from=kbusch@kernel.org; helo=mail.kernel.org X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/30 18:04:21 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -75 X-Spam_score: -7.6 X-Spam_bar: ------- X-Spam_report: (-7.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.469, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dmitry Fomichev , Niklas Cassel , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Keith Busch , Kevin Wolf Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Let the user specify a specific namespace if they want to get access stats for a specific namespace. Signed-off-by: Keith Busch Reviewed-by: Klaus Jensen --- hw/block/nvme.c | 66 +++++++++++++++++++++++++++----------------- include/block/nvme.h | 1 + 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 8d2b5be567..41389b2b09 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1164,48 +1164,62 @@ static uint16_t nvme_create_sq(NvmeCtrl *n, NvmeReq= uest *req) return NVME_SUCCESS; } =20 +struct nvme_stats { + uint64_t units_read; + uint64_t units_written; + uint64_t read_commands; + uint64_t write_commands; +}; + +static void nvme_set_blk_stats(NvmeNamespace *ns, struct nvme_stats *stats) +{ + BlockAcctStats *s =3D blk_get_stats(ns->blkconf.blk); + + stats->units_read +=3D s->nr_bytes[BLOCK_ACCT_READ] >> BDRV_SECTOR_BIT= S; + stats->units_written +=3D s->nr_bytes[BLOCK_ACCT_WRITE] >> BDRV_SECTOR= _BITS; + stats->read_commands +=3D s->nr_ops[BLOCK_ACCT_READ]; + stats->write_commands +=3D s->nr_ops[BLOCK_ACCT_WRITE]; +} + static uint16_t nvme_smart_info(NvmeCtrl *n, uint8_t rae, uint32_t buf_len, uint64_t off, NvmeRequest *req) { uint32_t nsid =3D le32_to_cpu(req->cmd.nsid); - + struct nvme_stats stats =3D { 0 }; + NvmeSmartLog smart =3D { 0 }; uint32_t trans_len; + NvmeNamespace *ns; time_t current_ms; - uint64_t units_read =3D 0, units_written =3D 0; - uint64_t read_commands =3D 0, write_commands =3D 0; - NvmeSmartLog smart; - - if (nsid && nsid !=3D 0xffffffff) { - return NVME_INVALID_FIELD | NVME_DNR; - } =20 if (off >=3D sizeof(smart)) { return NVME_INVALID_FIELD | NVME_DNR; } =20 - for (int i =3D 1; i <=3D n->num_namespaces; i++) { - NvmeNamespace *ns =3D nvme_ns(n, i); - if (!ns) { - continue; - } - - BlockAcctStats *s =3D blk_get_stats(ns->blkconf.blk); + if (nsid !=3D 0xffffffff) { + ns =3D nvme_ns(n, nsid); + if (!ns) + return NVME_INVALID_NSID | NVME_DNR; + nvme_set_blk_stats(ns, &stats); + } else { + int i; =20 - units_read +=3D s->nr_bytes[BLOCK_ACCT_READ] >> BDRV_SECTOR_BITS; - units_written +=3D s->nr_bytes[BLOCK_ACCT_WRITE] >> BDRV_SECTOR_BI= TS; - read_commands +=3D s->nr_ops[BLOCK_ACCT_READ]; - write_commands +=3D s->nr_ops[BLOCK_ACCT_WRITE]; + for (i =3D 1; i <=3D n->num_namespaces; i++) { + ns =3D nvme_ns(n, i); + if (!ns) { + continue; + } + nvme_set_blk_stats(ns, &stats); + } } =20 trans_len =3D MIN(sizeof(smart) - off, buf_len); =20 - memset(&smart, 0x0, sizeof(smart)); - - smart.data_units_read[0] =3D cpu_to_le64(DIV_ROUND_UP(units_read, 1000= )); - smart.data_units_written[0] =3D cpu_to_le64(DIV_ROUND_UP(units_written, + smart.data_units_read[0] =3D cpu_to_le64(DIV_ROUND_UP(stats.units_read, + 1000)); + smart.data_units_written[0] =3D cpu_to_le64(DIV_ROUND_UP(stats.units_w= ritten, 1000)); - smart.host_read_commands[0] =3D cpu_to_le64(read_commands); - smart.host_write_commands[0] =3D cpu_to_le64(write_commands); + smart.host_read_commands[0] =3D cpu_to_le64(stats.read_commands); + smart.host_write_commands[0] =3D cpu_to_le64(stats.write_commands); =20 smart.temperature =3D cpu_to_le16(n->temperature); =20 @@ -2708,7 +2722,7 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pc= i_dev) id->acl =3D 3; id->aerl =3D n->params.aerl; id->frmw =3D (NVME_NUM_FW_SLOTS << 1) | NVME_FRMW_SLOT1_RO; - id->lpa =3D NVME_LPA_EXTENDED; + id->lpa =3D NVME_LPA_NS_SMART | NVME_LPA_EXTENDED; =20 /* recommended default value (~70 C) */ id->wctemp =3D cpu_to_le16(NVME_TEMPERATURE_WARNING); diff --git a/include/block/nvme.h b/include/block/nvme.h index 58647bcdad..868cf53f0b 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -849,6 +849,7 @@ enum NvmeIdCtrlFrmw { }; =20 enum NvmeIdCtrlLpa { + NVME_LPA_NS_SMART =3D 1 << 0, NVME_LPA_EXTENDED =3D 1 << 2, }; =20 --=20 2.24.1