пятница, 3 июля 2009 г.

Как Windows использует Hyper-Threading?

Это перевод How does Windows exploit hyperthreading? Автор: Реймонд Чен.

Зависит от того, про какую версию Windows вы спрашиваете.

Для Windows 95, Windows 98 и Windows Me ответ прост: "вообще не использует". Эти операционные системы не поддерживают много-процессорность.

Для Windows NT и Windows 2000 ответ будет: "она ничего про это не знает". Эти операционные системы не в курсе про Hyper-Threading, потому что они были написаны до изобретения Hyper-Threading. Если вы включаете Hyper-Threading, то каждый из ваших процессоров начинает смотреться как два отдельных процессора для этих систем (и это будет считаться как два раздельных CPU с точки зрения лицензирования). Поскольку планировщик потоков (scheduler) не осознаёт связи между виртуальными процессорами, он может начать работать хуже, чем если бы вы вообще не включали Hyper-Threading.

Рассмотрим Hyper-Threading машину с двумя CPU. У неё есть два физических процессора А и Б, каждый с двумя виртуальными Hyper-Threading процессорами, назовём их А1, А2, Б1 и Б2.

Предположим, вы запустили две задачи, требовательные к процессору. Что касается планировщика в Windows NT и Windows 2000, то все четыре процессора для него эквивалентны, поэтому для него нет разницы, который из них использовать. И если вам не повезёт, он выберет А1 и А2, заставляя один физический процессор выполнять две активные задачи (каждая из которых, вероятно, будет работать где-то на полскорости или три-четвёртых от полной), оставляя второй физический процессор Б полностью не загруженным; совершенно не осознавая, что он бы выполнил свою работу лучше, если вы поставил одну задачу на А1, а вторую - на Б1.

Windows XP и Windows Server 2003 в курсе про Hyper-Threading. Когда они встречают сценарий, описанный выше, их планировщики понимают, что лучше запланировать одну задачу на один из процессоров А, а вторую - на один из процессоров Б.

Земетьте, что даже при поддержке Hyper-Threading, вы можете столкнуться с патологическими сценариями, которые приводят к ухудшению производительности. Например, если у вас есть четыре задачи, две из которых сильно зависят от кэша L2, а две другие - нет, то вам лучше бы распределить L2-зависимые задачи на раздельные физические процессоры, поскольку кэш L2 используется совместно двумя виртуальными процессорами. Привязка обоих задач на один физический процессор приведёт к большему числу L2 промахов, поскольку обе задачи будут сражаться между собой за место в L2 единственного процессора.

Когда вы переходите к дорогому концу шкалы (корпоративные сервера, сервера центров данных), всё снова становится сложным. Я отсылаю интересующихся к белой книге (white paper) Windows Support for Hyper-Threading Technology.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.