Безопасный режим Windows запускает простые программы (как минимум) в 3 раза быстрее? - PullRequest
13 голосов
/ 21 ноября 2010

Выполняя много тестов, я наткнулся на что-то очень тревожное / интересное / новое для меня.Проведя некоторое исследование, которое все больше и больше доходило до сути (что я не мог поверить), кажется, что Windows XP (и, вероятно, все другие версии) запускает программы примерно в 3 раза медленнее, чем в безопасном режиме.

Возьмем эту небольшую программу в качестве примера:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{

    long    i,j,k;

    printf ("Starting...\n");

    k = 12;

    for (i = 0; i < 20000; i++)
        for (j = 100000; j > 0; j--)
            k = k * 12;

    printf ("Done... k =%d", k);     // just using k here to prevent the whole block isn't optimized away.

    return 0;
}

На моем компьютере с частотой 2,4 ГГц выполнение в безопасном режиме занимает ~ 2,5 с, а в обычном режиме - ~ 8 с,(ThreadPriority = TIMECRITICAL, ProcessClass = REALTIME).ДАЖЕ, когда я компилирую и запускаю этот код в сеансе vmware-linux в этом обычном режиме Windows, он выполняется быстрее (около 5,5 с).

Я также провел много измерений цикла процессора, и на самом деле результаты в безопасном режиме выглядят намного больше, чем вы ожидаете, учитывая количество обработанных инструкций.

Так что я пропустил?Кто-нибудь может подсказать мне это?

Все указатели и подсказки оценены, спасибо.

решено! Извините, ребята, эта проблема связана с моим дерьмовым alienwarem15x , который по какой-то причине сокращается до 1/3 своей мощности процессора - если только вы не используете злые инструменты (ThrottleStop.exe), чтобы довести его до нормальной скорости.Ужасно извините за трату вашего времени.(

Ответы [ 8 ]

6 голосов
/ 21 ноября 2010

РЕШИТЬ!Извините, ребята, эта проблема связана с моим дерьмовым alienware m15x , который по какой-то причине снижается до, по-видимому, 1/3 своей мощности процессора - если вы не используете злые инструменты (ThrottleStop.exe), чтобы принести егодо нормальной скорости.Ужасно извините за трату вашего времени.(

3 голосов
/ 21 ноября 2010

Вы воспроизвели это на более чем одном компьютере? (Полагаю, когда вы говорите, что пытались в VMware / Linux, вы имеете в виду использование того же компьютера с Windows, что и хоста VMware, и запуск Linux в качестве гостя.)

Если вы видели этот эффект только на одном компьютере, возможно, у вас есть драйвер, замедляющий работу, который не загружается в безопасном режиме.

(Или какой-то другой программный продукт, но, вероятно, драйвер из того, что вы сказали о ЦП, который выглядит как бездействующий и код не сильно взаимодействует с ОС, если что-то не задерживает фактический вывод printf, что возможно .)

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

2 голосов
/ 21 ноября 2010

Совершенно уверен, что это что-то особенное с вашими компьютерами.

Я запустил этот код, скомпилированный с MSVC 10 в режиме Release, на старом нетбуке с XP, и в обычном режиме он работает немного быстрее, чем в безопасном для меня, не очень тщательно измеряя, но это заняло около 8 секундв обычном режиме и 10 секунд в безопасном режиме.

Немного удивительно также то, что на вашем компьютере в обычном режиме требуется столько же времени, сколько на старом одноядерном процессоре Atom.Вы не упоминаете, что это за компьютер, но я предполагаю, что он должен быть быстрее нетбука, поэтому у вас могут возникнуть проблемы с ним.

2 голосов
/ 21 ноября 2010

Как сказал Лео Дэвидсон, это, вероятно, вызвано драйвером, который не загружается в безопасном режиме.

1) Это может быть аппаратный драйвер: оба компьютера имеют одинаковую аппаратную конфигурацию?

2) Или даже вредоносное ПО (с руткитом!): Это означает, что вредоносный драйвер будет прятаться в обычном режиме, так что вы можете сравнить списки файлов в sytem32 \ drivers \ с их размерами / MD5s, как безопасными, так инормальные режимы.Вы можете использовать http://www.virustotal.com/ для сканирования любого файла.

2 голосов
/ 21 ноября 2010

DEP работает в безопасном режиме?Мне интересно, если это какая-то форма безопасности / песочницы или что-то подобное.Интересная тенденция, хотя.

2 голосов
/ 21 ноября 2010

Несколько баллов:

  • Вы говорите, что измеряли время с помощью секундомера, это не даст вам реального времени, потраченного на ваш процесс, вам нужно правильно профилировать код
  • Вы пробовали какие-нибудь другие программы?
  • Дайте этому тесту шанс: две виртуальные машины XP, одна виртуальная машина запускается в безопасном режиме и одна в обычном режиме, запускают программу на обеих виртуальных машинах примерно в одно и то же время и измеряют время процессора, которое занимает каждая (не время)
0 голосов
/ 21 ноября 2010

Если вы используете C ++, вы можете использовать QueryPerformanceFrequency и QueryPerformanceCounter для точного определения времени фрагмента кода, например:

#include <time.h>
#include <windows.h>

LARGE_INTEGER startTimer, endTimer, frequency;//declare some big numbers to use in timers
double timeTakenInSeconds;

int main()
{
    //start timer: 
    QueryPerformanceFrequency(&frequency);//retrieves the frequency of the high-resolution performance counter(if exsists on this hardware)
    QueryPerformanceCounter(&startTimer);//retrieves the current value of the high-resolution performance counter(in counts)

    //do something that you want to time here eg call a sorting method


    QueryPerformanceCounter(&endTimer);//endtimer
    timeTakenInSeconds = (endTimer.QuadPart-startTimer.QuadPart) / (double)frequency.QuadPart;//Work out time difference
    cout <<"somthing took:  \t" << timeTakenInSeconds << " seconds" <<endl;//print the time takken

    return 0;
}
0 голосов
/ 21 ноября 2010

Полагаю, это потому, что в безопасном режиме в фоновом режиме выполняется гораздо меньше процессов, следовательно, меньше нагрузки на процессор и использование памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...