Практическое правило для сравнения количества переключений контекста в Linux и Windows
Я ищу приблизительное значение для сравнения переключений контекста между Windows и Linux (предполагается то же оборудование и аналогичная нагрузка). Я обнаружил, что Windows, похоже, имеет меньший диапазон длин временных интервалов, чем Linux (10-120 мс против 10-200 мс), но эта информация не была достоверной.
1 ответ
Я не вижу, какую полезную информацию можно извлечь из того, что вы пытаетесь сделать, но вы можете изменить разрешение часов на компьютерах с Windows через стандартный Win32 API. Различные приложения в системе, которые требуют более высокого времени отклика (например, мультимедийные приложения), делают это постоянно. Разрешение часов может составлять от 0,5 до 15,6 мс и более. Так что пусть ваши две машины имеют одинаковое разрешение часов.
Windows 7 по умолчанию настроена так, чтобы позволить потокам работать в течение 2 тактов, прежде чем будет принято другое решение о планировании. (Т. Е. Переключать контекст или нет?) Server 2008 R2 по умолчанию настроен на 12 тактовых интервалов между решениями о планировании потоков (также называемых квантами потоков). Идея заключается в том, что с более длинными квантами потоков у серверной ОС больше шансов. запуска и завершения клиентского запроса без прерывания. (То есть, меньше переключение контекста.) Но вы не станете столь же "быстрым", как рабочий стол на серверной версии Windows. (Что вообще никого не волнует.)
Вот пример использования моего ПК с Win7. Google Chrome фактически призвал к снижению системного разрешения часов в 1 мс. Вы можете использовать clockres.exe из Sysinternals, чтобы увидеть текущее и базовое разрешение часов, и powercfg.exe, чтобы узнать, какие приложения меняли разрешение часов.
Мой процессор выполняет 3 501 000 000 циклов в секунду (3,5 ГГц), и таймер срабатывает каждые 0,001 секунды. 3501000000 * 0,001 = 3501000 циклов ЦП на тактовый интервал.
1 квантовая единица = 1/3 (одна треть) тактового интервала, поэтому 1 квантовая единица = 1167000 циклов ЦП.
Предполагая, что при частоте 3,501 ГГц каждый цикл ЦП составляет 286 пикосекунд, что составляет 333,8 микросекунды на квантовую единицу. Так как мой ПК настроен на квантование потоков с 2-мя тактовыми интервалами, а каждый тактовый интервал равен 3 квантовым единицам, это означает, что мой ПК принимает решение о планировании потоков каждые 2 миллисекунды.
Давайте даже не будем вдаваться в кванты потоков переменной длины или в упреждающий планировщик (поток не может завершить свой квант, пока не будет вытеснен другим потоком с более высоким приоритетом.)
Так что ваш эксперимент по желанию сравнить переключение контекста в двух разных операционных системах, работающих под совершенно разными наборами кода, все еще не имеет смысла для меня, но, возможно, это поможет, по крайней мере, на стороне Windows.