Взаимодействие между набором задач и sched_setaffinity

Может ли кто-нибудь сказать мне, что произойдет, если я побегу

taskset -c 7 ./fred.x

но затем внутри fred.x поток вызывает sched_setaffinity для привязки к ядру 6?

Будет ли этот поток получать ЛЮБОЕ процессорное время или он будет оставаться бездействующим на неопределенный срок?


person Derf Skren    schedule 12.01.2015    source источник
comment
Клянусь, я должен написать сценарий, который подбирает новые сообщения и изменяет или переформатирует случайные выборки. Я имею в виду, что 3 минуты - это вряд ли быстрый результат. Как будто люди даже не смотрят.   -  person Derf Skren    schedule 12.01.2015


Ответы (1)


taskset сам вызывает sched_setaffinity(), а затем execve для запуска вашей команды. Итак, этот вопрос сводится к следующему: «Что произойдет, если я дважды вызову sched_setaffinity() в одном и том же потоке?» И ответ таков: второй вызов переопределяет первый.

Таким образом, в вашем конкретном примере поток, который вызывает sched_setaffinity(), действительно будет привязан к ядру 6, и его можно будет запустить.

person John Zwinck    schedule 12.01.2015
comment
Спасибо за быстрый ответ. Насколько я понимаю, набор задач влияет на процесс, а sched_setaffinity влияет на потоки. Пока вы уверяете меня, что наличие двух непересекающихся основных привязанностей к этим двум вещам не может произойти, вы получаете очки! - person Derf Skren; 12.01.2015
comment
taskset просто звонит sched_setaffinity() для вас. Это влияет на процесс, потому что когда ваша программа запускается, у нее ровно один поток. То, что вы делаете в своей программе после этого, не касается taskset, и не может быть, потому что, как только taskset вызывает execve, код taskset больше не работает, а работает ваш процесс. - person John Zwinck; 12.01.2015