如何找出在CentOS/RHEL 启动期间耗时长的内核调用

在 CentOS/RHEL 上,如何使用initcall_debug查看系统调用使用多长时间?

在启动序列期间会发生多种不同的事件,有时默认的日志级别不足以确定导致问题的组件。
在这种情况下,本文中描述的步骤可用于收集有关启动缓慢的可能根本原因的更多数据。

  1. 编辑 /etc/grub.conf 中匹配的 grub 菜单项的内核行。
    例如:
[...]
root (hd0,0)
kernel /vmlinuz-3.8.13-68.3.4.el6uek.x86_64 ro root=/dev/mapper/vg_ol67-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_ol67/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_ol67/lv_root KEYBOARDTYPE=pc KEYTABLE=be-latin1 rd_NO_DM rhgb quiet
[...]

并向其添加以下参数:

initcall_debug

例如,产生的内核引导参数如下所示:

[...]
root (hd0,0)
kernel /vmlinuz-3.8.13-68.3.4.el6uek.x86_64 ro root=/dev/mapper/vg_ol67-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_ol67/lv_swap rd_NO_MD 
SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_ol67/lv_root KEYBOARDTYPE=pc KEYTABLE=be-latin1 rd_NO_DM rhgb quiet initcall_debug
[...]

并在引导时使用 grub 菜单中的此菜单项重新引导系统。

  1. 添加此参数后,串行控制台和 dmesg 命令输出还将打印完成 init 调用所需的时间。
    例如:
calling init_autofs4_fs+0x0/0x2a [autofs4] @ 1581
initcall init_autofs4_fs+0x0/0x2a [autofs4] returned 0 after 7463 usecs
日期:2020-09-17 00:12:24 来源:oir作者:oir