У меня есть поиск вопросов/ответов о близости процессора и чтение результатов, но я все еще не могу получить свои потоки, чтобы прибить к одному процессору.Почему системный монитор не показывает правильную близость процессора?
Я работаю над приложением, которое будет запускаться на выделенной Linux-ящике, поэтому меня не интересуют другие процессы, только мои собственные. Это приложение в настоящее время порождает один pthread, а затем основной поток входит в цикл while для обработки управляющих сообщений с использованием очередей POSIX msg. Это в то время как цикл блокирует ожидания ввода контрольного сообщения, а затем обрабатывает его. Таким образом, основной поток очень прост и не критичен. Мой код работает очень хорошо, так как я могу отправить это сообщение приложения, и он будет обрабатывать их просто отлично. Все управляющие сообщения очень маленькие по размеру и используются для простого управления функциональностью приложения, то есть только несколько управляющих сообщений когда-либо отправляются/получаются.
Прежде чем я войду в этот цикл while, я использую sched_getaffinity() для регистрации всех доступных ЦП. Затем я использую sched_setaffinity(), чтобы установить этот процесс на один процессор. Затем я снова вызываю sched_getaffinity(), чтобы проверить, будет ли он работать только на одном CPU, и это действительно правильно.
Единственный pthread, который был порожден, делает аналогичную вещь. Первое, что я делаю во вновь создаваемом pthread, это вызов pthread_getaffinity_np() и проверка доступных CPU, а затем вызов pthread_setaffinity_np(), чтобы установить его на другой процессор, затем вызвать pthread_getaffinity_np(), чтобы проверить, установлено ли оно по желанию, и это действительно верный.
Это то, что сбивает с толку. Когда я запускаю приложение и просматриваю историю CPU в системном мониторе, я не вижу никакого отличия от того, когда я запускаю приложение без всего этого набора атрибутов. Планировщик все еще выполняет пару секунд в каждом из четырех процессоров на этом четырехъядерном ящике. Таким образом, похоже, что планировщик игнорирует мои настройки близости.
Я ошибаюсь в ожидании увидеть некоторые доказательства того, что основной поток и pthread фактически работают в их собственном одном CPU? или я забыл сделать что-то еще, чтобы заставить это работать, как я собираюсь?
Спасибо,
-Andres