如何使用 openRC 知道 Alpine 中的启动时间(内核 + init)?

如何使用 openRC 知道 Alpine 中的启动时间(内核 + init)?

我对这个问题做了一些研究,也询问了 ChatGPT,但似乎没有办法用 OpenRC 来测量 alpine 发行版的完整启动时间。

使用dmesg,我可以看到最后一条消息[ 0.689037] Run /sbin/init as init process

但我想知道“完成”init 过程花了多少时间。我的用例对启动时间敏感,这就是我问的原因。

注意我能够在 1 秒内使用 systemd 启动 ubuntu 22.04,包括内核启动。在systemd中,systemd-analyze非常有用。所以我希望 openRC 中有一个等价的(或方法)。

答案1

首先,安装 coreutils 以获得 alpine 中的毫秒精度。

apk add coreutils

然后,我们将创建两个服务:

在/etc/init.d/boot-start中

#!/sbin/openrc-run

description="Boot Start Service"

start() {
    ebegin "Starting boot-start"
    date +%s%3N > /var/boot-time.log
    eend $?
}

并在 /etc/init.d/boot-end 中

#!/sbin/openrc-run

description="Boot End Service"

depend() {
        after *
}

start() {
        ebegin "Starting boot-end"
        boot_start_time=$(cat /var/boot-time.log)
        boot_end_time=$(date +%s%3N)
        duration=$((boot_start_time - boot_end_time))
        echo "Boot started at: $boot_start_time" > /var/boot-time.log
        echo "Boot ended at: $boot_end_time" >> /var/boot-time.log
        echo "Total duration: $duration milliseconds" >> /var/boot-time.log
        eend $?
}

然后我们将在启动时启动第一个,最后启动第二个

chmod +x /etc/init.d/boot-start
rc-update add boot-start boot
chmod +x /etc/init.d/boot-end
rc-update add boot-end default

结果看起来像这样

Boot started at: 1686811355808
Boot ended at: 1686811357194
Total duration: -1386 milliseconds

相关内容