Linux 平均启动时读取多少数据?

amn*_*amn 9 linux boot benchmark

我想知道新安装的 vanilla Linux 系统(如 32 位 CentOS 5.10)总共读取了多少数据才能进入虚拟控制台 shell 提示?您知道,读取所有配置文件、加载二进制文件、内核映像等。

我正在启动 100 台 Linux 机器,它们的系统内容的 95% 是相同的并且将保持相同——这些机器是克隆的。我想将文件系统的相同/只读共享部分卸载到 NFS 存储,从那里安装它,然后像这样启动。只有文件系统的可写部分,如 /var、/tmp 和 /home,将保留在每台机器的本地。由于可能有数百台机器作为“集群”的一部分同时启动,我需要估计访问的 NFS 存储链接在启动时是否会成为瓶颈。

我正在寻找数量级的估计。我知道 Linux 启动过程的细节差异很大。我们说的是 10Mb 吗?100Mb?1Gb?

vor*_*aq7 15

您在评论中说您正在评估网络引导/网络根环境。

你必须意识到的第一件事是没有“vanilla”这样的东西——你不会在零更改的情况下开箱即用地运行 CentOS 5.10(如果你认为你是在自欺欺人:NFS Root 已经是至少草莓,接近开心果)。

如果您想要针对您的特定环境(这才是真正重要的)的答案,将需要设置 NFS 服务器和客户端机器,启动它并测量:

  1. 转账(数量)
  2. 吞吐量(率)

这两个值对于性能都至关重要。您可能还想在某个时候设置多个客户端并模拟系统的正常使用,以了解当人们像在日常生活中一样使用系统时,它们对您的 NFS 服务器/网络提出什么样的稳态需求工作。

另请参阅:我们的容量规划系列- 我们不会专门讨论 NFS,但适用“构建、测试、强调”的一般原则。

  • @amn 很抱歉您不想进行分析,但是您必须做您必须做的事情-我们无法为您提供适用的数字。您的解决方案 (NFS root) 是一个可靠的、经过时间考验的解决方案,老实说,您可能可以盲目部署它而不会出现任何问题(在 NFS-root 和 Netbooting 的鼎盛时期,成千上万的 Sun Microsystems 环境是盲目部署的Solaris 并且效果很好)。如果您担心性能,尽管您需要进行分析以确定特定环境的需求和瓶颈 - 这就是宇宙的方式。 (10认同)

Cri*_*itu 8

安装一个系统,启动它并从/sys/block/${DEV}/stat例如/sys/block/sda/stat.

文档中引用:

stat 文件由一行文本组成,其中包含 11 个以空格分隔的十进制值。下表总结了这些字段,并在下面进行了更详细的描述:

Name            units         description
----            -----         -----------
read I/Os       requests      number of read I/Os processed
read merges     requests      number of read I/Os merged with in-queue I/O
read sectors    sectors       number of sectors read
read ticks      milliseconds  total wait time for read requests
write I/Os      requests      number of write I/Os processed
write merges    requests      number of write I/Os merged with in-queue I/O
write sectors   sectors       number of sectors written
write ticks     milliseconds  total wait time for write requests
in_flight       requests      number of I/Os currently in flight
io_ticks        milliseconds  total time this block device has been active
time_in_queue   milliseconds  total wait time for all requests
Run Code Online (Sandbox Code Playgroud)

读扇区,写扇区

这些值计算从此块设备读取或写入的扇区数。有问题的“扇区”是标准的 UNIX 512 字节扇区,而不是任何特定于设备或文件系统的块大小。当 I/O 完成时,计数器会增加。

您可以使用此单行更轻松地获取字节数:

awk '{printf("read %d bytes, wrote %d bytes\n", $3*512, $7*512)}' /sys/block/vda/stat
Run Code Online (Sandbox Code Playgroud)

Scientific Linux 6.1 i386 的结果

我在运行Scientific Linux 6.1 i386(类似于 RHEL)的 KVM/qemu 虚拟机上对此进行了测试。启用了以下服务:acpid、auditd、crond、network、postfix、rsyslog、sshd 和 udev-post。交换位于单独的磁盘上,因此未将其考虑在内。

在登录提示出现几秒钟后,使用 SSH 远程获取的 85 次启动的统计数据是:

    Name            Median   Average   Stdev
    -------------   ------   -------   -----
    read I/Os       1920     1920.2    2.6
    read merges     1158     1158.4    1.8
    read sectors    85322    85330.9   31.9
 >> read MiBytes    41.661   41.665    0.016
    read ticks      1165     1177.2    94.1
    write I/Os      33       32.6      1.7
    write merges    64       59.6      7.4
    write sectors   762      715.2     70.9
 >> write MiBytes   0.372    0.349     0.035
    write ticks     51       59.0      17.4
    in_flight       0        0.0       0.0
    io_ticks        895      909.9     57.8
    time_in_queue   1217     1235.2    98.5
Run Code Online (Sandbox Code Playgroud)

启动时间约为 20 秒。

  • 请注意,这似乎只为您提供传输需求(数量),而不是吞吐量需求(速率)。不过,您可以除以正常运行时间以获得平均数字。 (2认同)