
Linuxのカーネルと起動制御
2020-05-15
カーネル - Linuxの中核プログラム群
Linuxの安定起動、起動高速化を図るためには、カーネルを知ることが重要です。
Linuxのカーネル(Kernel)は、ハードウエアとアプリケーションをつなぐ重要な役割を果たします。
Linuxのブートローダーは、カーネル(vmlinuz)とRAMディスク(initramfs)を読み込んだ後、各Kernelを順次起動します。
ベースマシンの構成
今回実験用に古いデスクトップPCにLinuxをインストールしました。
ベースマシンはHP Compaq 8200 Eliteで、ハードウエア仕様は次のとおりです。
1 | CPU : Intel Core i3-2100 3.10GHz (64KB x 2 / 256KB x 2 / 3072KB x 1) |
Linux/Debian10の構成内容は、以下のとおりです。
1 | x86_64 |
ハードディスクの起動構成
HDDの起動構成は、古い考え方のBIOS・MBRから、最近主流のUEFI・GPTへと変更しました。HP Compaq 8200 eliteはUEFI対応PCですので、LinuxなどOSのクリーンインストールを行うとGPTになります。
UEFIでは、ブート領域を制御できます。LinuxとWindowsの両方をインストールすると、デュアルブートの知識も身につきます。
GRUB - ブートローダー
Debian10のブートローダーはGRUBです。
GRUBは/etc/default/grubに書かれた起動手順により、OSカーネル(vmlinuz)とRAMディスク(initramfs)を読み込みます。
1 | BOOT_IMAGE=/boot/vmlinuz-4.19.0-9-amd64 |
Systemd - Kernel起動
Debian10は、SystemdでKernelを起動制御します。
Systemdは「モジュール、起動スクリプト、初期化プロセス」と順番に起動します。
モジュールとして「メモリ管理、プロセス管理、デバイスドライバー、システムコールとセキュリティ」をハンドルします。
Systemdの起動パフォーマンスは、コマンドsystemd-analyzeで確認できます。
systemd-analyze
起動合計時間
1 | systemd-analyze |
1 | Startup finished in 2.729s (kernel) + 1min 2.812s (userspace) = 1min 5.542s |
モジュールごとの起動時間
1 | systemd-analyze blame |
1 | 37.252s plymouth-quit-wait.service |
dmesg - Kernel出力メッセージ
Kernelからの出力メッセージはコマンドdmesgで確認でき、「正常起動、もしくは警告・エラー」といった情報を読み取れます。
コマンドdmesg | grep -i err
で確認できるエラーメッセージは次のとおりです。
1. 独立ハードウエア監視 - IPMI
IPMIは、OSから分離・独立してハードウエアの管理と監視を行う機能です。
1 | [ 0.158866] ipmi:dmi: Base address is zero, assuming no IPMI interface |
「本機には、IPMIインタフェースがない」というメッセージを出力しています。
2. 電源制御 - ACPI error
ACPIは、OSの電源管理制御機能です。
1 | [ 0.000000] ACPI: IRQ0 used by override. |
通常の使用では問題がないが、OSの電源管理制御は使用できない可能性があり、OS側のKernelを読み込まないようにする、BIOSを更新する、といった対策が必要となります。
その他のメッセージ
1 | [ 0.008659] core: PEBS disabled due to CPU errata, please upgrade microcode |
1 | [ 0.017374] core: PMU erratum BJ122, BV98, HSD29 worked around, HT is on |
1 | [ 0.055503] pci 0000:00:02.0: BIOS left Intel GPU interrupts enabled; disabling |
1 | [ 1.305336] i801_smbus 0000:00:1f.3: SMBus using PCI interrupt |
1 | [ 1.324761] e1000e 0000:00:19.0: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode |
1 | [ 6.103439] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro |
1 | [16604.904299] perf: interrupt took too long (2510 > 2500), lowering kernel.perf_event_max_sample_rate to 79500 |
起動しているが、時間のかかるモジュール
DHCP、固定IP、IPv6については、PC本体だけの問題でなく、ルーターとのやりとりに時間がかかっているため、これはLANの整備を進める必要があると分かりました。
まとめ
Linuxの安定起動・起動高速化を図るため、Kernelの挙動についてdmesgで調査し、できる限りの対策を採ってみました。