From patchwork Fri Nov 25 09:48:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Granados X-Patchwork-Id: 13055681 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6CDF8C4167D for ; Fri, 25 Nov 2022 09:52:52 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oyVNP-0000Cg-V7; Fri, 25 Nov 2022 04:52:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oyVNL-0000C6-Ki for qemu-devel@nongnu.org; Fri, 25 Nov 2022 04:52:03 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oyVNI-0002kO-Qy for qemu-devel@nongnu.org; Fri, 25 Nov 2022 04:52:03 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20221125095153euoutp02b913ec8bee4140fadbab1ae20a3b32bb~qyxdxPhrx2449024490euoutp02G for ; Fri, 25 Nov 2022 09:51:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20221125095153euoutp02b913ec8bee4140fadbab1ae20a3b32bb~qyxdxPhrx2449024490euoutp02G DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1669369913; bh=K9Gq2OcbG7ibVgCFXB2LgqEKH0xYcZOgN5C2iBELMlA=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=FFFtwUM/qPCwV7EX8RwcOckGJZ3WE/T7Of7Gs035+hg2YjeqH5lnuR/pyh4PtJVsW FkQW3FyWROJRT4uI+HD4FxI1JN6E3IAOuM8rFkwscNz7ztni8FhoJk2BpI6lunmwnJ nj63bjsQAhaq1PfdsnZy76fAIbS1f+js6vLlQDnI= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20221125095153eucas1p22fb35f11ff697d611bca5e0b28617013~qyxdmtU7j0875008750eucas1p2l; Fri, 25 Nov 2022 09:51:53 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 96.B8.10112.93090836; Fri, 25 Nov 2022 09:51:53 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20221125095152eucas1p2e67e201303d24bd2539b056302c08847~qyxdV60w60892408924eucas1p2R; Fri, 25 Nov 2022 09:51:52 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20221125095152eusmtrp2e84fc2a85a41a5bfeedfa8a6a7e60152~qyxdVZ5Cn2978629786eusmtrp2U; Fri, 25 Nov 2022 09:51:52 +0000 (GMT) X-AuditID: cbfec7f4-cf3ff70000002780-ee-6380903988f4 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 64.92.08916.83090836; Fri, 25 Nov 2022 09:51:52 +0000 (GMT) Received: from CAMSVWEXC02.scsc.local (unknown [106.1.227.72]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20221125095152eusmtip15517953a3f113ca29c86de000e96e255~qyxdLbVy52459524595eusmtip1S; Fri, 25 Nov 2022 09:51:52 +0000 (GMT) Received: from localhost (106.110.32.33) by CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 25 Nov 2022 09:51:52 +0000 From: Joel Granados To: , , CC: Joel Granados Subject: [PATCH v4 1/2] nvme: Move adjustment of data_units{read,written} Date: Fri, 25 Nov 2022 10:48:07 +0100 Message-ID: <20221125094808.1856024-2-j.granados@samsung.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221125094808.1856024-1-j.granados@samsung.com> MIME-Version: 1.0 X-Originating-IP: [106.110.32.33] X-ClientProxiedBy: CAMSVWEXC01.scsc.local (2002:6a01:e347::6a01:e347) To CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrKIsWRmVeSWpSXmKPExsWy7djPc7qWExqSDc418FjMetfOZnG8dweL A5PHk2ubmQIYo7hsUlJzMstSi/TtErgyJn17xFJwV6hi8eWz7A2ML/m6GDk5JARMJBoOtLF0 MXJxCAmsYJRYcfQJlPOFUWLZuzdsEM5nRol15z+zw7RM3XONCSKxnFFi7qoWVriqA9s62CGc zYwSF3Y0gLWwCehInH9zhxnEFhHwkVgxey0TiM0soCVx4/MRRhBbWMBT4tPeWUA2BweLgKrE snuuIGFeAVuJ7iUXGSE2y0u0XZ8OZnMK2EncmzGbHaJGUOLkTJC7QUbKSzRvnc0MYUtIHHzx ghmiV1Fiy5zvrBB2rcSpLbfAPpAQWMkh8XzfS6gFLhL9mzqZIGxhiVfHt0C9LCPxf+d8qHi2 xM4pu6CGFkjMOjmVDeRmCQFrib4zORCmo0T7Um4Ik0/ixltBiGv4JCZtm84MEeaV6GgTmsCo MgvJ/bOQ3D8Lyf0LGJlXMYqnlhbnpqcWG+WllusVJ+YWl+al6yXn525iBKaE0/+Of9nBuPzV R71DjEwcjIcYJTiYlUR4RewakoV4UxIrq1KL8uOLSnNSiw8xSnOwKInzss3QShYSSE8sSc1O TS1ILYLJMnFwSjUwFW07uNVM9IrStX/ftFrvaVWKpN+fYbkxle3Jn/+vWrXZrMPMWfv/SVsp nFXZoScjU9mmfXTykquuB2+8/3llMmd4+SP+Y/wlJ7qcli9b8fe/ztLHjB6LWm7nPovdnxTi xDNxbv/pbvtr3ob3+LXCgvWvzFOWKvCqMRWd3fFQ8MqeiRviHBK8DjaI1Wz0V9LM2HR+Y0Oy imrH/XMuO/Vy5ojfvDPlQIni4oii/sZXIo9ELdRrJ4b+sOp9eGxZlahSu8NFZ4UbEtWmk1K6 VunMkFj6qmjzhKfqGz4z7dpnu74g8WyBssfPA5PuZcfNUrffrnA88cWWJaGnP1y9V1Ap1fWE V6vrnltK3tYzehctlFiKMxINtZiLihMBRnA+LHgDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupnkeLIzCtJLcpLzFFi42I5/e/4XV2LCQ3JBl9em1vMetfOZnG8dweL A5PHk2ubmQIYo/RsivJLS1IVMvKLS2yVog0tjPQMLS30jEws9QyNzWOtjEyV9O1sUlJzMstS i/TtEvQyJn17xFJwV6hi8eWz7A2ML/m6GDk5JARMJKbuucbUxcjFISSwlFFi7a7vzBAJGYlP Vz6yQ9jCEn+udbGB2EICHxklrjc7QDRsZpRonH0OLMEmoCNx/s0dsGYRAR+JFbPXMoHYzAJa Ejc+H2EEsYUFPCU+7Z0FZHNwsAioSiy75woS5hWwlehecpERYpe8RNv16WA2p4CdxL0Zs9kh 9tpKvDi5lRGiXlDi5MwnLBDj5SWat85mhrAlJA6+eAF1v6LEljnfWSHsWonPf58xTmAUmYWk fRaS9llI2hcwMq9iFEktLc5Nzy021CtOzC0uzUvXS87P3cQIjJltx35u3sE479VHvUOMTByM hxglOJiVRHhF7BqShXhTEiurUovy44tKc1KLDzGaAr05kVlKNDkfGLV5JfGGZgamhiZmlgam lmbGSuK8ngUdiUIC6YklqdmpqQWpRTB9TBycUg1MhemvxFyXs29YFeBu5S65gzciUMp9wmVZ w1v+K07Wbtt8flVBTfYL52uHDL/Wv7upLPz25Hb1FcxGddrekbs80n+pCbD7p5gs0KzYL+W+ JeppU2Bb3teMPKMOlhccZh3vKqSlr6ROuyu12lRlQeCaJ5PTpl5Rf7Ag3cq7xnqVZoLz/k+y 51wbqyJYU2r4gl5zC0TM0jwRsO7Q7rxn877vLuh4VHZDPMND+L291dnb7fHvN92QVD/tfZhb t0J545Irf+LYz+nzz7XWuPVij+KDC7zcZtNv3vzLcOVij6Fk9qRol0j1qNWWCxddSJG1i2oz LWSQsbo3750o4ysrtuCYDQt6Je18ru468O/cPmclluKMREMt5qLiRABrsJrZIgMAAA== X-CMS-MailID: 20221125095152eucas1p2e67e201303d24bd2539b056302c08847 X-Msg-Generator: CA X-RootMTR: 20221125095152eucas1p2e67e201303d24bd2539b056302c08847 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20221125095152eucas1p2e67e201303d24bd2539b056302c08847 References: <20221125094808.1856024-1-j.granados@samsung.com> Received-SPF: pass client-ip=210.118.77.12; envelope-from=j.granados@samsung.com; helo=mailout2.w1.samsung.com X-Spam_score_int: -70 X-Spam_score: -7.1 X-Spam_bar: ------- X-Spam_report: (-7.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org In order to return the units_{read/written} required by the SMART log we need to shift the number of bytes value by BDRV_SECTORS_BITS and multiply by 1000. This is a prep patch that moves this adjustment to where the SMART log is calculated in order to use the stats struct for calculating OCP extended smart log values. Signed-off-by: Joel Granados --- hw/nvme/ctrl.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 87aeba0564..bf291f7ffe 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -4449,8 +4449,8 @@ static void nvme_set_blk_stats(NvmeNamespace *ns, struct nvme_stats *stats) { BlockAcctStats *s = blk_get_stats(ns->blkconf.blk); - stats->units_read += s->nr_bytes[BLOCK_ACCT_READ] >> BDRV_SECTOR_BITS; - stats->units_written += s->nr_bytes[BLOCK_ACCT_WRITE] >> BDRV_SECTOR_BITS; + stats->units_read += s->nr_bytes[BLOCK_ACCT_READ]; + stats->units_written += s->nr_bytes[BLOCK_ACCT_WRITE]; stats->read_commands += s->nr_ops[BLOCK_ACCT_READ]; stats->write_commands += s->nr_ops[BLOCK_ACCT_WRITE]; } @@ -4464,6 +4464,7 @@ static uint16_t nvme_smart_info(NvmeCtrl *n, uint8_t rae, uint32_t buf_len, uint32_t trans_len; NvmeNamespace *ns; time_t current_ms; + uint64_t u_read, u_written; if (off >= sizeof(smart)) { return NVME_INVALID_FIELD | NVME_DNR; @@ -4490,10 +4491,11 @@ static uint16_t nvme_smart_info(NvmeCtrl *n, uint8_t rae, uint32_t buf_len, trans_len = MIN(sizeof(smart) - off, buf_len); smart.critical_warning = n->smart_critical_warning; - smart.data_units_read[0] = cpu_to_le64(DIV_ROUND_UP(stats.units_read, - 1000)); - smart.data_units_written[0] = cpu_to_le64(DIV_ROUND_UP(stats.units_written, - 1000)); + u_read = DIV_ROUND_UP(stats.units_read >> BDRV_SECTOR_BITS, 1000); + u_written = DIV_ROUND_UP(stats.units_written >> BDRV_SECTOR_BITS, 1000); + + smart.data_units_read[0] = cpu_to_le64(u_read); + smart.data_units_written[0] = cpu_to_le64(u_written); smart.host_read_commands[0] = cpu_to_le64(stats.read_commands); smart.host_write_commands[0] = cpu_to_le64(stats.write_commands); From patchwork Fri Nov 25 09:48:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Granados X-Patchwork-Id: 13055682 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EBDAFC4321E for ; Fri, 25 Nov 2022 09:52:51 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oyVNQ-0000Dn-2F; Fri, 25 Nov 2022 04:52:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oyVNM-0000CL-68 for qemu-devel@nongnu.org; Fri, 25 Nov 2022 04:52:04 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oyVNI-0002kR-Qp for qemu-devel@nongnu.org; Fri, 25 Nov 2022 04:52:03 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20221125095154euoutp016f118f489490c67e778c28640dedfbb6~qyxe7F5Sv0742107421euoutp016 for ; Fri, 25 Nov 2022 09:51:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20221125095154euoutp016f118f489490c67e778c28640dedfbb6~qyxe7F5Sv0742107421euoutp016 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1669369914; bh=wXbFK6qJqgls1lzy4NyHeze5Dq3/dieLSy85EthRmsk=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=ivb5/nXbewQcwBUGJpX6srUJMNKn5g6R/+fAV1RvNsHXDmr7V0a0L4iW0lrazyIDK dBfEwtr1CL+wN+uxFgE9UjhI1tU99Z/N0oDBizv0wGjBQqNHnDF2ycV5PR4Sx5+eVy hFOemBRhzKIizGjG6Efv4C1Z6+r22qo67sOu07Wg= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20221125095154eucas1p2bbfaf7d79700cdac02fdd91b111dc8ca~qyxeuZxpX0898908989eucas1p2Y; Fri, 25 Nov 2022 09:51:54 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 77.B8.10112.A3090836; Fri, 25 Nov 2022 09:51:54 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20221125095154eucas1p235a3d40d20f0eb3628ea9ab46bd8cf6e~qyxebr6X30873008730eucas1p2u; Fri, 25 Nov 2022 09:51:54 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20221125095154eusmtrp1a088efa6833094d9f6180320fbd9a891~qyxebCy5n2190621906eusmtrp1I; Fri, 25 Nov 2022 09:51:54 +0000 (GMT) X-AuditID: cbfec7f4-d09ff70000002780-f3-6380903a8b80 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 96.72.09026.A3090836; Fri, 25 Nov 2022 09:51:54 +0000 (GMT) Received: from CAMSVWEXC02.scsc.local (unknown [106.1.227.72]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20221125095153eusmtip2977e870ee276a2a919f27e7bd0b72b23~qyxeQ_H7f1176011760eusmtip2T; Fri, 25 Nov 2022 09:51:53 +0000 (GMT) Received: from localhost (106.110.32.33) by CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 25 Nov 2022 09:51:53 +0000 From: Joel Granados To: , , CC: Joel Granados Subject: [PATCH v4 2/2] nvme: Add physical writes/reads from OCP log Date: Fri, 25 Nov 2022 10:48:08 +0100 Message-ID: <20221125094808.1856024-3-j.granados@samsung.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221125094808.1856024-1-j.granados@samsung.com> MIME-Version: 1.0 X-Originating-IP: [106.110.32.33] X-ClientProxiedBy: CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) To CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMIsWRmVeSWpSXmKPExsWy7djP87pWExqSDbYdlbCY9a6dzeJ47w4W ByaPJ9c2MwUwRnHZpKTmZJalFunbJXBlbD5wmK1gq03FlLcODYyHdbsYOTgkBEwkNj0y6WLk 4hASWMEocXTpLxYI5wujRM/s2YwQzmdGic+75rJ2MXKCdcx6cJAdIrGcUWLnrsdgCbCqJTcy IBKbGSUmT9nMDJJgE9CROP/mDpgtIuAjsWL2WiYQm1lAS+LG5yOMILawgIvEw/7jYDaLgKrE qRcv2EHu4xWwlVi0VhZisbxE2/XpYCWcAnYS92bMZgexeQUEJU7OfMICMVJeonnrbGYIW0Li 4IsXzBC9ihJb5nyHeqBWYm/zAbAHJASWckg0XrwElXCR2N/0GMoWlnh1fAs7hC0jcXpyDwuE nS2xc8ouqKEFErNOTmWDhKO1RN+ZHIiwo0TH982MEGE+iRtvBSHO4ZOYtG06M0SYV6KjTWgC o8osJA/MQvLALCQPLGBkXsUonlpanJueWmyUl1quV5yYW1yal66XnJ+7iRGYDk7/O/5lB+Py Vx/1DjEycTAeYpTgYFYS4RWxa0gW4k1JrKxKLcqPLyrNSS0+xCjNwaIkzss2QytZSCA9sSQ1 OzW1ILUIJsvEwSnVwCSvHD7PNaSy5ulqKcPz79ImhjP7FE2QDZXZstRM6asZ+0cOYbeP9lwl YguT50vUR1XLNPiJ9E8y+qt+wKdg+a2lShuEGHuetzVfVC9Lz99W6XZ+9grHSR9DG/nusjmE RVroNXy6t96I23iX5D2nNa5TV/RZn9/9tmH9Qa7IOfOSO3uaVrnEFVnu9NI7dnaFPq9Y0p/b B3v23trEyXC9OkDgi/G821877Uq/B3+8Ws2713rdwcM/Np9e9W+O0bFlAkelXmvPlkytkHze F/xN4E3k9NptFStXiO5Ic+Jt/rG1Z/bVBWyfA9cUW1fVOS575vpmW1Z8eqSBa/9717ufll7o WdQ+K/3D0QfOjUbrwpRYijMSDbWYi4oTAYjV3P92AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupnkeLIzCtJLcpLzFFi42I5/e/4PV2rCQ3JBv9nsFrMetfOZnG8dweL A5PHk2ubmQIYo/RsivJLS1IVMvKLS2yVog0tjPQMLS30jEws9QyNzWOtjEyV9O1sUlJzMstS i/TtEvQyNh84zFaw1aZiyluHBsbDul2MnBwSAiYSsx4cZO9i5OIQEljKKLHgwkcmiISMxKcr H9khbGGJP9e62CCKPgIVdU6F6tjMKLH+zU9GkCo2AR2J82/uMIPYIgI+EitmrwWbxCygJXHj 8xGwGmEBF4mH/cfBbBYBVYlTL14ADeLg4BWwlVi0VhZimbxE2/XpYCWcAnYS92bMBjtCCKjk xcmtYHFeAUGJkzOfsECMl5do3jqbGcKWkDj44gUzxBxFiS1zvrNC2LUSna9Os01gFJmFpH0W kvZZSNoXMDKvYhRJLS3OTc8tNtIrTswtLs1L10vOz93ECIyZbcd+btnBuPLVR71DjEwcjIcY JTiYlUR4RewakoV4UxIrq1KL8uOLSnNSiw8xmgK9OZFZSjQ5Hxi1eSXxhmYGpoYmZpYGppZm xkrivJ4FHYlCAumJJanZqakFqUUwfUwcnFINTO35qRK5TySSZZ6dqy0+PGclt+9K3/JyDiam R8fFZjwLUX2ht/RswlX5nxpRHzKE0pm+K6w8lfF/dr7LwlNKJ4oWtztdfnXSwPPZzSCDQt9j qdzP2M2lEy4y7X4mEu/3usR/m7TPI/drIVxKS7MMNuqnKgS8DFh6p2HW3L0cvsd4Tx0td56j YxHw+cDT62cs119uWdv5pCvrhKtpzr42XfGuu90nttiULX9vaP/504b7vjzTl9/VYg9z5RE8 bqZ3WHmy7IeWXbWv3gQv7OH5trhvk6YAQ+GBBjbx5tkLG/KKD9VM2fByvqboi7KtfLNkbp5N bU7c430y9sGW3RdCkwNPeVpXVzlN/Tu7UKdPSImlOCPRUIu5qDgRAL9mLRAiAwAA X-CMS-MailID: 20221125095154eucas1p235a3d40d20f0eb3628ea9ab46bd8cf6e X-Msg-Generator: CA X-RootMTR: 20221125095154eucas1p235a3d40d20f0eb3628ea9ab46bd8cf6e X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20221125095154eucas1p235a3d40d20f0eb3628ea9ab46bd8cf6e References: <20221125094808.1856024-1-j.granados@samsung.com> Received-SPF: pass client-ip=210.118.77.11; envelope-from=j.granados@samsung.com; helo=mailout1.w1.samsung.com X-Spam_score_int: -70 X-Spam_score: -7.1 X-Spam_bar: ------- X-Spam_report: (-7.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org In order to evaluate write amplification factor (WAF) within the storage stack it is important to know the number of bytes written to the controller. The existing SMART log value of Data Units Written is too coarse (given in units of 500 Kb) and so we add the SMART health information extended from the OCP specification (given in units of bytes) We add a controller argument (ocp) that toggles on/off the SMART log extended structure. To accommodate different vendor specific specifications like OCP, we add a multiplexing function (nvme_vendor_specific_log) which will route to the different log functions based on arguments and log ids. We only return the OCP extended SMART log when the command is 0xC0 and ocp has been turned on in the args. Though we add the whole nvme SMART log extended structure, we only populate the physical_media_units_{read,written}, log_page_version and log_page_uuid. Signed-off-by: Joel Granados --- docs/system/devices/nvme.rst | 7 +++++ hw/nvme/ctrl.c | 59 ++++++++++++++++++++++++++++++++++++ hw/nvme/nvme.h | 1 + include/block/nvme.h | 36 ++++++++++++++++++++++ 4 files changed, 103 insertions(+) diff --git a/docs/system/devices/nvme.rst b/docs/system/devices/nvme.rst index 30f841ef62..1cc5e52c00 100644 --- a/docs/system/devices/nvme.rst +++ b/docs/system/devices/nvme.rst @@ -53,6 +53,13 @@ parameters. Vendor ID. Set this to ``on`` to revert to the unallocated Intel ID previously used. +``ocp`` (default: ``off``) + The Open Compute Project defines the Datacenter NVMe SSD Specification that + sits on top of NVMe. It describes additional commands and NVMe behaviors + specific for the Datacenter. When this option is ``on`` OCP features such as + the SMART / Health information extended log become available in the + controller. + Additional Namespaces --------------------- diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index bf291f7ffe..264d9cb220 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -4455,6 +4455,45 @@ static void nvme_set_blk_stats(NvmeNamespace *ns, struct nvme_stats *stats) stats->write_commands += s->nr_ops[BLOCK_ACCT_WRITE]; } +static uint16_t nvme_ocp_extended_smart_info(NvmeCtrl *n, uint8_t rae, + uint32_t buf_len, uint64_t off, + NvmeRequest *req) +{ + NvmeNamespace *ns = NULL; + NvmeSmartLogExtended smart_l = { 0 }; + struct nvme_stats stats = { 0 }; + uint32_t trans_len; + + if (off >= sizeof(smart_l)) { + return NVME_INVALID_FIELD | NVME_DNR; + } + + /* accumulate all stats from all namespaces */ + for (int i = 1; i <= NVME_MAX_NAMESPACES; i++) { + ns = nvme_ns(n, i); + if (ns) { + nvme_set_blk_stats(ns, &stats); + } + } + + smart_l.physical_media_units_written[0] = cpu_to_le64(stats.units_written); + smart_l.physical_media_units_read[0] = cpu_to_le64(stats.units_read); + smart_l.log_page_version = 0x0003; + + static const uint8_t guid[16] = { + 0xC5, 0xAF, 0x10, 0x28, 0xEA, 0xBF, 0xF2, 0xA4, + 0x9C, 0x4F, 0x6F, 0x7C, 0xC9, 0x14, 0xD5, 0xAF + }; + memcpy(smart_l.log_page_guid, guid, sizeof(smart_l.log_page_guid)); + + if (!rae) { + nvme_clear_events(n, NVME_AER_TYPE_SMART); + } + + trans_len = MIN(sizeof(smart_l) - off, buf_len); + return nvme_c2h(n, (uint8_t *) &smart_l + off, trans_len, req); +} + static uint16_t nvme_smart_info(NvmeCtrl *n, uint8_t rae, uint32_t buf_len, uint64_t off, NvmeRequest *req) { @@ -4642,6 +4681,23 @@ static uint16_t nvme_cmd_effects(NvmeCtrl *n, uint8_t csi, uint32_t buf_len, return nvme_c2h(n, ((uint8_t *)&log) + off, trans_len, req); } +static uint16_t nvme_vendor_specific_log(NvmeCtrl *n, uint8_t rae, + uint32_t buf_len, uint64_t off, + NvmeRequest *req, uint8_t lid) +{ + switch (lid) { + case 0xc0: + if (n->params.ocp) { + return nvme_ocp_extended_smart_info(n, rae, buf_len, off, req); + } + break; + /* add a case for each additional vendor specific log id */ + } + + trace_pci_nvme_err_invalid_log_page(nvme_cid(req), lid); + return NVME_INVALID_FIELD | NVME_DNR; +} + static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest *req) { NvmeCmd *cmd = &req->cmd; @@ -4683,6 +4739,8 @@ static uint16_t nvme_get_log(NvmeCtrl *n, NvmeRequest *req) return nvme_error_info(n, rae, len, off, req); case NVME_LOG_SMART_INFO: return nvme_smart_info(n, rae, len, off, req); + case NVME_LOG_VENDOR_START...NVME_LOG_VENDOR_END: + return nvme_vendor_specific_log(n, rae, len, off, req, lid); case NVME_LOG_FW_SLOT_INFO: return nvme_fw_log_info(n, len, off, req); case NVME_LOG_CHANGED_NSLIST: @@ -7685,6 +7743,7 @@ static Property nvme_props[] = { params.sriov_max_vi_per_vf, 0), DEFINE_PROP_UINT8("sriov_max_vq_per_vf", NvmeCtrl, params.sriov_max_vq_per_vf, 0), + DEFINE_PROP_BOOL("ocp", NvmeCtrl, params.ocp, false), DEFINE_PROP_END_OF_LIST(), }; diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h index 79f5c281c2..d7f486f795 100644 --- a/hw/nvme/nvme.h +++ b/hw/nvme/nvme.h @@ -427,6 +427,7 @@ typedef struct NvmeParams { uint16_t sriov_vi_flexible; uint8_t sriov_max_vq_per_vf; uint8_t sriov_max_vi_per_vf; + bool ocp; } NvmeParams; typedef struct NvmeCtrl { diff --git a/include/block/nvme.h b/include/block/nvme.h index 8027b7126b..fc020abced 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -978,6 +978,40 @@ typedef struct QEMU_PACKED NvmeSmartLog { uint8_t reserved2[320]; } NvmeSmartLog; +typedef struct QEMU_PACKED NvmeSmartLogExtended { + uint64_t physical_media_units_written[2]; + uint64_t physical_media_units_read[2]; + uint64_t bad_user_blocks; + uint64_t bad_system_nand_blocks; + uint64_t xor_recovery_count; + uint64_t uncorrectable_read_error_count; + uint64_t soft_ecc_error_count; + uint64_t end2end_correction_counts; + uint8_t system_data_percent_used; + uint8_t refresh_counts[7]; + uint64_t user_data_erase_counts; + uint16_t thermal_throttling_stat_and_count; + uint16_t dssd_spec_version[3]; + uint64_t pcie_correctable_error_count; + uint32_t incomplete_shutdowns; + uint32_t rsvd116; + uint8_t percent_free_blocks; + uint8_t rsvd121[7]; + uint16_t capacity_health; + uint8_t nvme_errata_ver; + uint8_t rsvd131[5]; + uint64_t unaligned_io; + uint64_t security_ver_num; + uint64_t total_nuse; + uint64_t plp_start_count[2]; + uint64_t endurance_estimate[2]; + uint64_t pcie_retraining_count; + uint64_t power_state_change_count; + uint8_t rsvd208[286]; + uint16_t log_page_version; + uint64_t log_page_guid[2]; +} NvmeSmartLogExtended; + #define NVME_SMART_WARN_MAX 6 enum NvmeSmartWarn { NVME_SMART_SPARE = 1 << 0, @@ -1010,6 +1044,8 @@ enum NvmeLogIdentifier { NVME_LOG_FW_SLOT_INFO = 0x03, NVME_LOG_CHANGED_NSLIST = 0x04, NVME_LOG_CMD_EFFECTS = 0x05, + NVME_LOG_VENDOR_START = 0xc0, + NVME_LOG_VENDOR_END = 0xff, }; typedef struct QEMU_PACKED NvmePSD {