У меня есть пара виртуализированных RHEL 6, работающих на хосте RHEV. И хост, и виртуальные машины имеют время безотказной работы> 1 года.
Только за последние два дня они начали редко кидать эти сообщения ядра в случайные моменты
kernel: Clocksource tsc unstable (delta = -17179878652 ns). Enable clocksource failover by adding clocksource_failover kernel parameter.
Хорошо: я последую совету. Однако странно то, что я не использую tsc в качестве источника часов.
[~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
Изучая документацию по фреймворку clocksource, я придумал больше вопросов, чем ответов.
Прежде всего, почему ядро жалуется на источник тактовых импульсов, который система не должна использовать? Возможно, ядро в любом случае перебирает все доступные источники тактовой частоты? Если да, то зачем?
Насколько мне известно, это сообщение означает, что текущий источник тактовых импульсов отодвинулся от сторожевого таймера больше, чем WATCHDOG_THRESHOLD
но каков текущий источник часов сторожевого таймера? Это не может быть kvm-clock, так как обычно CLOCK_SOURCE_MUST_VERIFY
устанавливать. Есть ли способ отобразить его во время выполнения?
Я понимаю, что tsc не считается точным с современными процессорами из-за функций регулирования / энергосбережения, но /proc/cpuinfo
сообщает, что процессоры, видимые виртуальной машиной, имеют constant_tsc
флаг. Поэтому я предполагаю, что tsc также может обеспечить довольно надежное время. Является ли этот флаг «обходом» основного реального ЦП или это просто имитация, работающая со своим собственным счетчиком? В первом случае я мог предположить, что планировщик хоста переключил процесс виртуальной машины на другое ядро, имеющее смещенный счетчик. Может ли это иметь смысл?