我正在新安装一个发行版,并想设置一个交换分区,以便它与休眠兼容。
首先,我必须确定系统拥有的物理内存量。
$ grep MemTotal /proc/meminfo
MemTotal: 38740876 kB
现在据我所知:
- 1 KiB = 1 kibibyte = 1024 字节
- 1 kB = 1 KB = 1000 字节
但是,这里的 RHEL 文档说单位/proc/meminfo
是千字节。
谁错了?Linux 中硬编码的单元,还是 RHEL 文档?
我正在新安装一个发行版,并想设置一个交换分区,以便它与休眠兼容。
首先,我必须确定系统拥有的物理内存量。
$ grep MemTotal /proc/meminfo
MemTotal: 38740876 kB
现在据我所知:
但是,这里的 RHEL 文档说单位/proc/meminfo
是千字节。
谁错了?Linux 中硬编码的单元,还是 RHEL 文档?
“千字节”和“千字节”有时也用于表示二进制(1024 字节)单位。这种用法早于专用二进制“kibi-”前缀的发明,尤其是在真正的十进制单位几乎没有意义的情况下。
例如,RAM 使用总是以二进制单位来衡量(例如,“4kB 页面”总是4096 字节,而不是 4000),因此通常使用更熟悉的“kilo-”或“mega-”前缀,即使实际大小是二进制。
在您的情况下(我检查了创建
/proc/meminfo
文件的内核代码),内核内部根据空闲页面(通常为 4k 或 16k,但始终为 2 的幂)计算内存,并且它的show_val_kb()
函数使用位移操作(相当于乘以 2 的幂,再次生成二进制单位)将页数转换为千字节值:(在 x86 和 x86_64 系统上,PAGE_SHIFT 始终为 12,因此内存页面是
1 << 12
等于 1×2 12即 4096 的字节,上述函数最终将页面计数乘以 2 (12−10),然后将其显示为“ KB”。)来自 util-linux 的 'lsblk' 和 'fdisk' 磁盘分区工具也默认使用二进制单位。例如,
+2G
在 fdisk 中等价于+2GiB
.+2GB
(但是,如果您出于某种原因需要十进制大小的分区, fdisk 也可以接受。)从评论看来,您似乎认为该单位
kB
表示 1000 字节,如果您的意思是 1024 字节,则必须编写KiB
。但这不是它在计算中的使用方式。
kB
一直意味着 1024 字节,而且几乎仍然如此。KiB
IEC 于 1998 年引入了“kibibyte”一词和单位符号,旨在澄清k
/K
inkB
/KB
不是SI 前缀。但在实践中,这些很少使用,除了硬盘容量(出于营销原因)之外,您可以放心地假设
kB
为 1024 字节(“1 KB”),尤其是在 1998 年之前推出的软件中。