Linux 시스템을 콜드 스타트하는 데 걸리는 시간을 어떻게 확인합니까?

Linux 시스템을 콜드 스타트하는 데 걸리는 시간을 어떻게 확인합니까?

저는 콜드 부팅 후 Linux 시스템이 부팅되는 데 시간이 얼마나 걸리는지 알아보려고 합니다. uptime명령 과 유사 하거나 /proc/uptimeinit 프로세스가 시작된 이후의 시간을 제공합니다. 이는 커널이 메모리에 로드되는 데 걸리는 시간, 로더 및 펌웨어 시작 시간을 고려하지 않습니다 systems-analyze. systems-analyze그것을 사용할 경우 모든 시스템 서비스가 시작될 때까지 기다려야 하기 때문에 할 수 없습니다 . 같은 이유로 "부트차트"도 제외됩니다. 이는 systemd 서비스를 통해 시작 시간을 수집해야 하기 때문입니다(예: 다른 많은 작업 수행).

이 정보를 어떻게 얻을 수 있는지 아시나요?

답변1

스톱워치를 사용하세요.대부분의 프로세스는 시스템이 준비되기 전에 발생합니다.

또한 부트스트랩이 무엇을 의미하는지 정의해야 합니다. X를 통한 로그인 준비, 콘솔을 통한 로그인 준비, 요청에 응답하는 웹 서버...

또한 테스트 중인 시스템 자체를 신뢰해서는 안 됩니다. (한번은 가능한 것보다 빠르다고 주장하는 시스템의 문제를 해결하고 있었습니다. 알고 보니 시계 속도가 느려지고 있었습니다.)

답변2

/var/log/boot.msg

다음과 같은 텍스트가 표시됩니다.

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.0.101-108.84-default (geeko@buildhost) (gcc     version 4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux) ) #1 SMP Fri Nov 30 15:57:27 UTC 2018 (7a72692)
[    0.000000] Command line: BOOT_IMAGE=dev000:\EFI\SUSE\vmlinuz-    3.0.101-108.84-default root=/dev/disk/by-id/scsi-35000cca070168a20-part2  splash=verbose showopts
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 00000000000a0000 (usable)
[    0.000000]  BIOS-e820: 0000000000100000 - 00000000792de000 (usable)
[    0.000000]  BIOS-e820: 00000000792de000 - 00000000798f4000 (reserved)

그 다음에

[    4.967393] Brought up 128 CPUs
[    4.967400] Total of 128 processors activated (512000.20 BogoMIPS).
[    5.377931] devtmpfs: initialized
[    5.420574] PM: Registering ACPI NVS region at 79a38000 (5976064 bytes)
[    5.421208] print_constraints: dummy:
[    5.421243] Time: 20:15:03  Date: 01/22/19
[    5.421817] NET: Registered protocol family 16
[    5.422067] ACPI FADT declares the system doesn't support PCIe ASPM, so disable it
[    5.422073] ACPI: bus type pci registered

다음으로 끝나는

[   14.053705] igb 0000:42:00.3: added PHC on eth3
[   14.066858] igb 0000:42:00.3: Intel(R) Gigabit Ethernet Network Connection
[   14.080159] igb 0000:42:00.3: eth3: (PCIe:5.0Gb/s:Width x4) 0c:c4:7a:3a:51:33
[   14.093493] igb 0000:42:00.3: eth3: PBA No: 010A00-000
[   14.106628] igb 0000:42:00.3: Using MSI-X interrupts. 8 rx queue(s), 8 tx queue(s)
[   14.800728] device-mapper: uevent: version 1.0.3
[   14.814242] device-mapper: ioctl: 4.25.0-ioctl (2012-07-25) initialised: [email protected]
[   15.254103] loop: module loaded
[   15.634412] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled
[   15.648644] SGI XFS Quota Management subsystem
[   15.661127] XFS (sda1): Mounting Filesystem
[   15.790512] XFS (sda1): Ending clean mount
[   15.802635] XFS (sdb1): Mounting Filesystem
[   15.886148] XFS (sdb1): Ending clean mount
[   15.898303] XFS (sdd1): Mounting Filesystem
[   16.010051] XFS (sdd1): Ending clean mount
[   17.567752] fuse init (API version 7.16)
Kernel logging (ksyslog) stopped.
Kernel log daemon terminating.

Waiting for device /dev/disk/by-id/scsi-35000cca070168a20-part2 to appear:  ok
fsck from util-linux 2.19.1
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a -C0 /dev/sdc2
myhostname: clean, 1172494/36618240 files, 42233936/146465024 blocks
fsck succeeded. Mounting root device read-write.

Linux 루트 파티션을 마운트하고 커널을 시작하는 데 17.56초 남았습니다.

그게 전부가 아니라는 걸 깨달아라시작하다Linux의 모든 서비스가 실행되는 프로세스입니다. 이렇게 하려면 /var/log/boot.msg전환 후 첫 번째 타임스탬프를 찾은 다음 마지막 타임스탬프를 찾으면 시스템이 완전히 부팅되었다고 합리적으로 결론을 내릴 수 있습니다. 방화벽이 작동 중이고 SSH 서비스가 작동 중이며 무엇보다도 GDM이 실행 중입니다. .

내 첫 번째 타임스탬프는 15:15:06.x를 표시하고 라이선스 관리자를 자동 시작한 후 파일의 마지막 타임스탬프는 15:15:53.x를 표시합니다. 타임스탬프는 smartd start exits with status 015:15:43.x, 그 다음에는 SuSEfirewall2_setup start' exits with status 015:15:44.x입니다.

따라서 제 예에서는 총 17.5초 + 47초 = 64.5초입니다. 이것은 일반적으로 내 시계와 일치합니다... BIOS/EFI가 약 2분 정도 걸린 후, LSI Raid 컨트롤러를 통해 15개 디스크의 RAID-5를 부팅하는 데 2분이 더 걸린 후에 이 모든 일이 발생한다는 것을 깨달았습니다. 따라서 관심 있는 총 시간은 크게 다를 수 있으며, 콜드 부팅에 걸리는 시간을 전원 버튼을 눌렀을 때 정의하는 경우 사용되는 하드웨어에 따라 달라집니다. 그러나 Linux 커널에서 소요된 시간은 일반적으로 boot.msg에서 계산할 수 있습니다.

답변3

스마트폰을 모니터에 비춰 영상을 만들어 보세요. 이는 1/N초, 여기서N녹화된 영상의 초당 프레임 수입니다.

답변4

ACPI FPDT 테이블에 대한 지원을 포함하는 UEFI 펌웨어를 사용하고 커널에 CONFIG_ACPI_FPDT빌드 시간 옵션이 포함되어 있는 경우 /sys/firmware/acpi/fpdt/boot펌웨어 및 부트로더가 부팅에 소비하는 시간에 대한 정보를 찾을 수 있습니다. 인접한 디렉터리에는 일시 중지 및 재개 작업에 대한 타이밍 정보도 있을 수 있습니다.

~에서FPDT 테이블 지원을 위한 패치 도입:

> +               ACPI Firmware Performance Data Table (FPDT) provides
> +               information for firmware performance data for system boot,
> +               S3 suspend and S3 resume. This sysfs entry contains the
> +               performance data retrieved from the FPDT.
> +
> +               boot:
> +                       firmware_start_ns: Timer value logged at the beginning
> +                               of firmware image execution. In nanoseconds.
> +                       bootloader_load_ns: Timer value logged just prior to
> +                               loading the OS boot loader into memory.
> +                               In nanoseconds.
> +                       bootloader_launch_ns: Timer value logged just prior to
> +                               launching the currently loaded OS boot loader
> +                               image. In nanoseconds.
> +                       exitbootservice_start_ns: Timer value logged at the
> +                               point when the OS loader calls the
> +                               ExitBootServices function for UEFI compatible
> +                               firmware. In nanoseconds.
> +                       exitbootservice_end_ns: Timer value logged at the point
> +                               just prior to the OS loader gaining control
> +                               back from the ExitBootServices function for
> +                               UEFI compatible firmware. In nanoseconds.
> +               suspend:
> +                       suspend_start_ns: Timer value recorded at the previous
> +                               OS write to SLP_TYP upon entry to S3. In
> +                               nanoseconds.
> +                       suspend_end_ns: Timer value recorded at the previous
> +                               firmware write to SLP_TYP used to trigger
> +                               hardware entry to S3. In nanoseconds.
> +               resume:
> +                       resume_count: A count of the number of S3 resume cycles
> +                               since the last full boot sequence.
> +                       resume_avg_ns: Average timer value of all resume cycles
> +                               logged since the last full boot sequence,
> +                               including the most recent resume. In nanoseconds.
> +                       resume_prev_ns: Timer recorded at the end of the previous
> +                               platform runtime firmware S3 resume, just prior to
> +                               handoff to the OS waking vector. In nanoseconds.

나는 이것이 systemd-analyze펌웨어 부팅, 로더 및 커널 로딩 시간을 얻는 곳이기도 한다고 생각합니다.

기본적으로 의 값에서 의 값 exitbootservice_end_ns을 빼면 firmware_start_nsCPU 부팅과 Linux 커널 부팅 사이에 경과된 시간을 알 수 있습니다.

전용 관리 프로세서가 있는 서버급 시스템이 있는 경우 일반적으로 관리 프로세서는 시스템이 전원이 공급되는 벽면 콘센트에 연결되자마자 실행되기 시작하지만 관리 프로세서가 초기화를 완료할 때까지 메인 CPU에 전원이 공급되지 않습니다. , 이 작업은 1~2분 정도 걸릴 수 있습니다. 반면에 이러한 관리 프로세서는 유용한 타임스탬프가 포함된 광범위한 로그를 제공하는 경우가 많습니다.

관련 정보