-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
libzutil: allow to display powers of 1000 bytes #16579
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,6 +26,7 @@ | |
#include <ctype.h> | ||
#include <math.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <libzutil.h> | ||
#include <string.h> | ||
|
||
|
@@ -64,19 +65,22 @@ zfs_nicenum_format(uint64_t num, char *buf, size_t buflen, | |
uint64_t n = num; | ||
int index = 0; | ||
const char *u; | ||
const char *units[3][7] = { | ||
const char *units[6][7] = { | ||
[ZFS_NICENUM_1024] = {"", "K", "M", "G", "T", "P", "E"}, | ||
[ZFS_NICENUM_BYTES] = {"B", "K", "M", "G", "T", "P", "E"}, | ||
[ZFS_NICENUM_TIME] = {"ns", "us", "ms", "s", "?", "?", "?"} | ||
[ZFS_NICENUM_TIME] = {"ns", "us", "ms", "s", "?", "?", "?"}, | ||
[ZFS_NICENUM_1000] = {"B", "K", "M", "G", "T", "P", "E"} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just thinking ahead - can you rename
I can imagine in the future that we make all non-byte values SI powers of 1000 by default. It's kind of silly that we report zpool status error counters in powers of 1024, for example. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we change the binary 1024 nicenum values to the binary SI prefix? So But a lot other code and maybe ZTS will need some changes with that. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The problem is the 5-char limit for nicenum values. You'd give up precision with 2-char SI names. Like, currently you can report "20.7M" but with the change you could only report "20Mi". I'm sure we could fix the 5-char limit, but I don't know what kind of fallout there would be from it. We've been reporting 5-char nicenum values for a long time... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah okay, then we should work with the 5-char limit currently and introduce the environment variable. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Are you sure? You asked the opposite before: #16579 (comment) |
||
}; | ||
|
||
const int units_len[] = {[ZFS_NICENUM_1024] = 6, | ||
[ZFS_NICENUM_BYTES] = 6, | ||
[ZFS_NICENUM_TIME] = 4}; | ||
[ZFS_NICENUM_TIME] = 4, | ||
[ZFS_NICENUM_1000] = 6}; | ||
|
||
const int k_unit[] = { [ZFS_NICENUM_1024] = 1024, | ||
[ZFS_NICENUM_BYTES] = 1024, | ||
[ZFS_NICENUM_TIME] = 1000}; | ||
[ZFS_NICENUM_TIME] = 1000, | ||
[ZFS_NICENUM_1000] = 1000}; | ||
|
||
double val; | ||
|
||
|
@@ -180,5 +184,9 @@ zfs_niceraw(uint64_t num, char *buf, size_t buflen) | |
void | ||
zfs_nicebytes(uint64_t num, char *buf, size_t buflen) | ||
{ | ||
zfs_nicenum_format(num, buf, buflen, ZFS_NICENUM_BYTES); | ||
if (getenv("ZFS_OUTPUT_BYTES_SI") != NULL) { | ||
zfs_nicenum_format(num, buf, buflen, ZFS_NICENUM_1000); | ||
} else { | ||
zfs_nicenum_format(num, buf, buflen, ZFS_NICENUM_BYTES); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -567,6 +567,15 @@ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE | |
dedup = 1.11, compress = 1.80, copies = 1.00, dedup * compress / copies = 2.00 | ||
.Ed | ||
. | ||
.Sh ENVIRONMENT VARIABLES | ||
.Bl -tag -width "ZFS_OUTPUT_BYTES_SI" | ||
.\" Shared with zfs.8 and zpool.8 | ||
.It Sy ZFS_OUTPUT_BYTES_SI | ||
Make K/M/G/T/P/E prefixes in | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What do you think about rewording these lines to make it explicitly clear this is for byte values only?:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, will do |
||
.Nm zdb | ||
output to represent powers of 1000 bytes, i.e. KB, MB, GB, TB, PB, EB. | ||
.El | ||
. | ||
.Sh SEE ALSO | ||
.Xr zfs 8 , | ||
.Xr zpool 8 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No because [ZFS_NICENUM_1000] = [5]