LINUX.ORG.RU

Возможно при перезагрузке через kexec не сбрасывается счётчик времени в процессоре?

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

A что за счетчик времени?

Первой появилась мысль выполнить «echo kexec >/dev/pmsg0» перед «kexec -e» и последующей проверкой наличия этой строки в /sys/fs/pstore/pmsg-ramoops-0

Я сейчас сравниваю dmesg нормальной загрузки и загрузки через kexec. Есть явное различия:

1) при загрузке через grub Command line: «BOOT_IMAGE=(lvm/V0-ROOT64)/lib/modules/4.14.157/bzImage root=/dev/mapper/V0-ROOT64 ro ...» а в kexec Command line: «root=/dev/mapper/V0-ROOT64 ro ...»

2) различия в RAM map grub:

[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000099bff] usable 
...
[    0.000000] Base memory trampoline at [ffff888000093000] 93000 size 24576
[    0.000000] BRK [0x01e00000, 0x01e00fff] PGTABLE
kexec:
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000100-0x0000000000099bff] usable
...
[    0.000000] Base memory trampoline at [ffff888000093000] 93000 size 24576
[    0.000000] BRK [0x42ee01000, 0x42ee01fff] PGTABLE

vel ★★★★★ ()
Ответ на: комментарий от vel

A что за счетчик времени?

timestamp counter в процессорах Intel. Можно читать либо инструкцией процессора rdtsc, либо чтением из MSR 0x10. Во втором случае это можно сделать утилитой rdmsr:

rdmsr 0x10

TSC постоянно растёт, и кажется, от нуля. Предполагаю, что растёт он с момента запуска процессора. Вполне возможно, что загрузка ядра через kexec не сбрасывает этот счётчик. И тогда вычисленное по dmesg время будет отличаться от вычисленного по TSC времени.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Работает.

При первом старте у меня `rdmsr 0x10` < 227253785829

vel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.