Насколько дороги переключатели контекста ядра по сравнению с переключателями контекста в пользовательском пространстве? - PullRequest
9 голосов
/ 07 августа 2011

В соответствии с C10k и этой статьи пропускная способность серверов 1-нитка на соединение снижается по мере того, как все больше клиентов подключаются и создается все больше и больше потоков. Согласно этим двум источникам, это связано с тем, что чем больше потоков существует, тем больше времени затрачивается на переключение контекста по сравнению с реальной работой, выполняемой этими потоками. Evented серверы, похоже, не так сильно страдают от снижения производительности при большом количестве соединений.

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

  • Почему эти переключатели контекста пользовательского пространства работают быстрее, чем переключатели контекста потока ядра?
  • Что именно делает переключение контекста ядра, что намного дороже?
  • Насколько точно стоит переключение контекста ядра? Сколько времени это займет?
  • Зависит ли время переключения контекста ядра от количества потоков?

Меня больше всего интересует, как ядро ​​Linux справляется с переключением контекста, но приветствуется и информация о других ОС.

1 Ответ

5 голосов
/ 08 августа 2011
  • Почему эти переключатели контекста в пользовательском пространстве работают быстрее, чем переключатели контекста потока ядра?

Поскольку ЦПУ не нужно переключаться в режим ядра и обратно в режим пользователя.

  • Что именно делает переключение контекста ядра, что намного дороже?

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

  • Насколько точно стоит переключение контекста ядра? Сколько времени это займет?

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

  • Зависит ли время переключения контекста ядра от количества потоков?

Зависит от того, как планировщик ядра справляется с этим. AFAIK, в Linux это довольно эффективно, даже с большим количеством потоков, но больше потоков означает, что больше использования памяти означает большее давление в кеше и, следовательно, вероятно, более низкую производительность. Я также ожидаю некоторых накладных расходов, связанных с обработкой тысяч сокетов.

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