spi*_*paz 18 memory linux proc allocation-unit
我正在新安装一个发行版,并希望设置一个交换分区,以便它与休眠兼容。
首先,我必须确定系统拥有的物理内存量。
$ grep MemTotal /proc/meminfo
MemTotal: 38740876 kB
Run Code Online (Sandbox Code Playgroud)
现在据我所知:
然而,RHEL 文档在这里说单位/proc/meminfo
是千字节。
谁错了?该单元硬编码在 Linux 中,还是 RHEL 文档中?
use*_*686 40
“千字节”和“kB”有时也用于表示二进制(1024 字节)单位。这种用法远远早于专用二进制“kibi-”前缀的发明,特别是在真正的十进制单位几乎没有意义的情况下。
\n例如,RAM 使用量始终以二进制单位测量(例如“4kB 页”始终为4096 字节,而不是 4000),因此通常使用更熟悉的“kilo-”或“mega-”前缀,即使实际大小为二进制。
\n在您的情况下(我检查了创建该文件的内核代码/proc/meminfo
),内核在内部根据空闲页面(通常为 4k 或 16k,但始终为 2 的幂)来计算内存,并且其函数show_val_kb()
使用位移操作(其中相当于乘以 2 的幂,再次生成二进制单位)将页计数转换为千字节值:
static void show_val_kb(struct seq_file *m, const char *s, unsigned long num)\n{\n seq_put_decimal_ull_width(m, s, num << (PAGE_SHIFT - 10), 8);\n seq_write(m, " kB\\n", 4);\n}\n
Run Code Online (Sandbox Code Playgroud)\n(在 x86 和 x86_64 系统上 PAGE_SHIFT 始终为 12,因此内存页的1 << 12
字节数等于 1\xc3\x972 12即 4096,上述函数最终将页数乘以 2 (12\xe2\x88\x9210 )然后将其显示为“kB”。)
util-linux 中的“lsblk”和“fdisk”磁盘分区工具默认也可以使用二进制单元。例如,+2G
在 fdisk 中相当于+2GiB
. (但是,+2GB
如果您出于某种原因想要十进制大小的分区,fdisk 也接受。)
And*_*eKR 11
从评论中看来,您的印象是该单位kB
表示 1000 字节,如果您的意思是 1024 字节,则必须编写KiB
.
但这并不是它在计算中的使用方式。
kB
一直意味着 1024 字节,而且几乎仍然如此。
“kibibyte”一词和单位符号KiB
是 IEC 于 1998 年引入的,目的是为了澄清 /k
中K
的kB
/KB
不是SI 前缀。
然而在实践中,这些很少被使用,除了硬盘容量(出于营销原因)之外,您可以安全地假设kB
为 1024 字节(“1 KB”),特别是在 1998 年之前推出的软件中。