среда, 10 марта 2010 г.

Отладка телепатией: почему ваша система с дорогим четырёхядерником игнорирует три ядра

Это перевод Psychic debugging: Why your expensive four-processor machine is ignoring three of its processors. Автор: Реймонд Чен.

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

В этот момент, я подключил свои телепатические способности. Возможно, вы тоже сможете это сделать.

Первая подсказка: мои телепатические способности успешно предсказали, что Проводник также имел привязку к первому процессору.

Вторая подсказка: привязка к процессору наследуется дочерними процессами (почему? Потому что чаще всего это именно то, что вы хотите).

Вот моё телепатическое предсказание:
Мои телепатические силы говорят мне, что
  • Проводник имеет привязку к первому процессору....
  • потому что вы смотрели предпросмотр MPG файла...
  • чей декодер вызывает SetProcessAffinityMask в своей DLL_PROCESS_ATTACH...
  • потому что разработчики кодека не смогли исправить свои баги с многопоточностью...
  • и поэтому они установили привязку процесса в 1, "исправляя" баги.
Хотя моё первое предсказание было верным, остальные были просто случайными, правда они были на правильном пути, чтобы успешно помочь в разрешении проблемы и поиске виновника.

Настоящей проблемой, как оказалось, было стороннее расширение оболочки, чьи авторы не смогли исправить свои баги с многопоточностью, поэтому они решили скрыть их вызовом функции SetProcessAffinityMask, привязывая весь процесс (который оказался Проводником) к единственному процессору. У-ху - мы исправили все наши глюки всего одним вызовом функции! Давайте закатим тусовку и отпразднуем это!

А поскольку привязка к процессору наследуется дочерними процессами, это привело к тому, что все программы, запущенные пользователем (Проводником) использовали только первый процессор из четырёх.

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

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

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

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

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

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

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

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