Почему поток в ядре ubuntu 2.6.38-generic или 3.0.0-lowlatency блокирует другой поток от получения mmap_sem? - PullRequest
2 голосов
/ 14 сентября 2011

Если я пишу поток и запускаю его в планировщике Round Robyn Real-Time, в Ubuntu 11.04 используется либо стандартное ядро ​​2.6.38, либо доступное ядро ​​3.0.0-9 с низкой загрузкой из этого ppa: https://launchpad.net/~abogani/+archive/ppa,, кажется, заблокировать команду: apt-key get

Похоже, что эта команда блокируется, когда gpg под капотом пытается использовать mlock (), которая, как я понимаю, требует mmap_sem. Тем не менее, мой тестовый поток буквально "ничего не делает", в том смысле, что это просто пустой цикл for. Я также не активно использую mmap_sem, например.

На компьютере SMP (4 ядра, 8 логических ядер) один поток в планировщике RR с приоритетом 50 или более, кажется, всегда блокирует apt-key. Более низкий приоритет возвращается примерно в 50% или менее времени, иногда требуются минуты, чтобы вернуться.

Какая связь между моим потоком с пустым циклом с этим приоритетом в реальном времени и mmap_sem?

1 Ответ

1 голос
/ 17 января 2012

С этого сайта: http://www.icir.org/gregor/tools/pthread-scheduling.html

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

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

...