Как заставить процесс работать только в одном потоке с помощью numactl?

Как заставить процесс работать только в одном потоке с помощью numactl?

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

Как я могу использовать, numactlчтобы заставить процесс работать только в одном потоке? Или есть ли еще более простая встроенная утилита, которая может это сделать?

решение1

numactl --physcpubind=+1 /path/to/your/executable

это должно запустить ваш процесс на втором ядре/процессоре, назначенном вашему чипсету (индекс 1). Более подробную информацию см. в разделе «Примеры» на странице руководства: http://linux.die.net/man/8/numactl

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

решение2

Чтобы ограничить программу одним аппаратным ядром/потоком ЦП, можно также использоватьtaskset 1 prog [args]

ПС

Программа для ограничения количества процессов, которые может иметь программа (потоки), это prlimit --nproc=1 prog [args]. Я пытался использовать ее с rsyncи получил "fork unavailable... error in IPC" и конец - rsyncнаписано, чтобы не работать как один поток.

strace prlimit --nproc=1 rsync  

Запуск straceпоказал, как описано в ссылке SO ниже, возвращаемое значение из cloneвызова:-1 EAGAIN (resource temporary unavailable).

P.S. Идея взята изhttps://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread.

Связанный контент