Module Name: src Committed By: mlelstv Date: Thu Feb 2 08:21:32 UTC 2023
Modified Files: src/sbin/nvmectl: logpage.c nvmectl.h util.c Log Message: Data units read/written are counted in 1000s of 512 bytes. Convert to human-readable value. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sbin/nvmectl/logpage.c cvs rdiff -u -r1.9 -r1.10 src/sbin/nvmectl/nvmectl.h cvs rdiff -u -r1.2 -r1.3 src/sbin/nvmectl/util.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/nvmectl/logpage.c diff -u src/sbin/nvmectl/logpage.c:1.10 src/sbin/nvmectl/logpage.c:1.11 --- src/sbin/nvmectl/logpage.c:1.10 Sun Jul 31 13:49:23 2022 +++ src/sbin/nvmectl/logpage.c Thu Feb 2 08:21:32 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: logpage.c,v 1.10 2022/07/31 13:49:23 mlelstv Exp $ */ +/* $NetBSD: logpage.c,v 1.11 2023/02/02 08:21:32 mlelstv Exp $ */ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD @@ -33,7 +33,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: logpage.c,v 1.10 2022/07/31 13:49:23 mlelstv Exp $"); +__RCSID("$NetBSD: logpage.c,v 1.11 2023/02/02 08:21:32 mlelstv Exp $"); #if 0 __FBSDID("$FreeBSD: head/sbin/nvmecontrol/logpage.c 329824 2018-02-22 13:32:31Z wma $"); #endif @@ -263,9 +263,9 @@ print_log_health(const struct nvm_identi printf("Percentage used: %u\n", health->percentage_used); - print_bignum("Data units (512 byte) read:", health->data_units_read, ""); - print_bignum("Data units (512 byte) written:", health->data_units_written, - ""); + print_bignum1("Data units read:", health->data_units_read, "", "B", 512000); + print_bignum1("Data units written:", health->data_units_written, + "", "B", 512000); print_bignum("Host read commands:", health->host_read_commands, ""); print_bignum("Host write commands:", health->host_write_commands, ""); print_bignum("Controller busy time (minutes):", health->controller_busy_time, Index: src/sbin/nvmectl/nvmectl.h diff -u src/sbin/nvmectl/nvmectl.h:1.9 src/sbin/nvmectl/nvmectl.h:1.10 --- src/sbin/nvmectl/nvmectl.h:1.9 Sun Sep 27 18:17:35 2020 +++ src/sbin/nvmectl/nvmectl.h Thu Feb 2 08:21:32 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: nvmectl.h,v 1.9 2020/09/27 18:17:35 jdolecek Exp $ */ +/* $NetBSD: nvmectl.h,v 1.10 2023/02/02 08:21:32 mlelstv Exp $ */ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD @@ -109,6 +109,7 @@ __dead void dispatch(int argc, char *arg /* Utility Routines */ void nvme_strvis(uint8_t *, int, const uint8_t *, int); void print_bignum(const char *, uint64_t v[2], const char *); +void print_bignum1(const char *, uint64_t v[2], const char *, const char *, long); uint64_t le48dec(const void *); #endif /* __NVMECTL_H__ */ Index: src/sbin/nvmectl/util.c diff -u src/sbin/nvmectl/util.c:1.2 src/sbin/nvmectl/util.c:1.3 --- src/sbin/nvmectl/util.c:1.2 Wed Apr 18 10:11:44 2018 +++ src/sbin/nvmectl/util.c Thu Feb 2 08:21:32 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: util.c,v 1.2 2018/04/18 10:11:44 nonaka Exp $ */ +/* $NetBSD: util.c,v 1.3 2023/02/02 08:21:32 mlelstv Exp $ */ /*- * Copyright (c) 2017 Netflix, Inc @@ -28,7 +28,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: util.c,v 1.2 2018/04/18 10:11:44 nonaka Exp $"); +__RCSID("$NetBSD: util.c,v 1.3 2023/02/02 08:21:32 mlelstv Exp $"); #if 0 __FBSDID("$FreeBSD: head/sbin/nvmecontrol/util.c 320423 2017-06-27 20:24:25Z imp $"); #endif @@ -84,10 +84,47 @@ nvme_strvis(u_char *dst, int dlen, const #define METRIX_PREFIX_BUFSIZ 17 #define NO_METRIX_PREFIX_BUFSIZ 42 +static void +unit_string(BIGNUM *bn, const char *unit, long scale, char *out, size_t len) +{ + size_t ulen = strlen(unit); + uint8_t tmp[4]; + BN_CTX *ctx; + BIGNUM *sn; + + if (6 + ulen + 3 >= len) + return; + + if (scale > 1) { + ctx = BN_CTX_new(); + if (ctx == NULL) + return; + + tmp[0] = (scale >> 24) & 0xff; + tmp[1] = (scale >> 16) & 0xff; + tmp[2] = (scale >> 8) & 0xff; + tmp[3] = scale & 0xff; + + sn = BN_bin2bn(tmp, sizeof(tmp), NULL); + if (sn != NULL) { + BN_mul(bn, bn, sn, ctx); + BN_free(sn); + } + + BN_CTX_free(ctx); + } + + strncpy(out, " (", len); + humanize_bignum(out+2, 6 + ulen, bn, unit, HN_AUTOSCALE, HN_DECIMAL); + strncat(out, ")", len); +} + void -print_bignum(const char *title, uint64_t v[2], const char *suffix) +print_bignum1(const char *title, uint64_t v[2], const char *suffix, + const char *unit, long scale) { char buf[64]; + char buf2[64]; uint8_t tmp[16]; uint64_t h, l; @@ -119,15 +156,25 @@ print_bignum(const char *title, uint64_t #endif buf[0] = '\0'; + buf2[0] = '\0'; + BIGNUM *bn = BN_bin2bn(tmp, sizeof(tmp), NULL); if (bn != NULL) { humanize_bignum(buf, METRIX_PREFIX_BUFSIZ + strlen(suffix), - bn, suffix, HN_AUTOSCALE, HN_DECIMAL); + bn, suffix, HN_AUTOSCALE, HN_DECIMAL | HN_NOSPACE); + if (unit) + unit_string(bn, unit, scale, buf2, sizeof(buf2)); BN_free(bn); } if (buf[0] == '\0') snprintf(buf, sizeof(buf), "0x%016" PRIx64 "%016" PRIx64, h, l); - printf("%-31s %s\n", title, buf); + printf("%-31s %s%s\n", title, buf, buf2); +} + +void +print_bignum(const char *title, uint64_t v[2], const char *suffix) +{ + print_bignum1(title, v, suffix, NULL, 1); } /* "Missing" from endian.h */