Есть ли способ определить время от включения питания до запуска Windows?

Я хотел бы иметь возможность сказать, сколько времени требуется от включения питания до запуска Windows. Есть ли способ определить это ретроспективно (т.е. после запуска Windows)? Сохраняет ли BIOS/CMOS время последней загрузки? Можно ли узнать из RDTSC, как долго работает машина, и вычесть время загрузки Windows?


person Paul Dolphin    schedule 05.11.2010    source источник


Ответы (2)


Вы можете попробовать BootTimer или BootRacer, чтобы убедиться, что любой из них будет делать то, что вы хотите.

Я не верю, что вы можете определить это после запуска Windows. Я не знаю ни одного BIOS, сохраняющего время последней загрузки. Но на любой современной машине, если время между включением питания и вызовом загрузчика ОС (по сути, время, необходимое для запуска POST) занимает больше нескольких секунд, что-то не так.

Вы пытаетесь сделать это программно, чтобы получить точное количество времени, в течение которого машина была в сети и пригодна для использования? Неточность, возникающая из-за нескольких секунд, которые занимает POST, не кажется существенной. Если вы планируете бенчмаркинг или оптимизацию, вам подойдет любая из этих двух утилит.

person Cody Gray    schedule 06.11.2010
comment
На самом деле у нас есть проблема, когда некоторым машинам требуется несколько минут, чтобы пройти POST, поэтому я надеялся создать способ обнаружения их всех, чтобы мы могли исследовать. Таким образом, время не должно быть особенно точным - достаточно хорошо различать несколько секунд и пару минут. - person Paul Dolphin; 07.11.2010
comment
Может быть, у кого-то еще будет идея о том, как получить время для сравнения. Лучшее, что я могу сделать, это предложить исправления, такие как отключение комплексных проверок ОЗУ, оптимизация порядка, в котором BIOS ищет загрузочные устройства (особенно отключение длительного поиска сетевых загрузочных устройств), включение любого применимого параметра быстрой загрузки и отключение флоппи-дисковода. ищет. Я также видел, что автоматическое определение жестких дисков замедляет POST — проверьте любой кабель или соединения и рассмотрите возможность сохранения параметров диска (и установки для несуществующих дисков значения «Нет») в CMOS вместо того, чтобы оставлять для него значение «Авто». Удачи! - person Cody Gray; 07.11.2010
comment
Спасибо за предложения относительно того, что может быть причиной замедления. Очень полезно - person Paul Dolphin; 07.11.2010

Получите время с момента включения из GetTickCount(). Затем получите метку времени файла, к которому Windows прикасается при загрузке (например, windows\bootstat.dat). Код ниже. На моей машине написано 16 секунд, что звучит точно.

#include <stdio.h>
#include <windows.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>

int main()
{
    struct __stat64 st;
    _stat64("c:\\windows\\bootstat.dat", &st);

    return printf("%d\n", st.st_mtime - (time(NULL) - GetTickCount()/1000));
}
person patraulea    schedule 06.11.2010
comment
Измеряет ли GetTickCount время с момента включения питания или с момента запуска Windows? MSDN немного расплывчато, поскольку в нем говорится, когда система запускается... - person Paul Dolphin; 07.11.2010
comment
Только что попытался приостановить загрузчик, и он все еще печатает «16». Таким образом, GetTickCount, похоже, сообщает время с момента запуска Windows. Но может сработать вариант этой идеи: записать время выключения, а затем время запуска (работает только в том случае, если пользователь делает перезагрузку, а не выключение). - person patraulea; 07.11.2010
comment
Я думал об использовании RDTSC вместо GetTickCount, который, я думаю, должен указывать время с момента включения. Мне просто нужно разработать самый простой способ преобразования числа в секунды. Идея bootstat.dat — хороший простой способ получить время запуска Windows. - person Paul Dolphin; 07.11.2010