У меня есть простой bash script, который передает вывод одного процесса другому. А именно:.
dostuff | filterstuff
Бывает, что в моей Linux-системе (openSUSE, если это имеет значение, ядро 2.6.27) эти оба процесса работают на одном ядре. Однако выполнение различных процессов на разных ядрах - это политика по умолчанию, которая в этом случае не запускается.
Какой компонент системы отвечает за это и что мне делать, чтобы использовать многоядерную функцию?
Примечание, что в ядре 2.6.30 такой проблемы нет.
Разъяснение. Следуя рекомендациям Денниса Уильямсона, я позаботился о том, чтобы потоковые процессы действительно выполнялись на одном процессоре, Планировщик Linux, который обычно делает действительно хорошую работу, на этот раз не делает этого.
Я полагаю, что что-то в bash не позволяет ОС делать это. Дело в том, что мне нужно портативное решение для многоядерных и одноядерных машин. Решение taskset
, предложенное Деннисом Уильямсоном, не будет работать на одноядерных машинах. В настоящее время я использую:,
dostuff | taskset -c 0 filterstuff
но это кажется грязным взломом. Может ли кто-нибудь предложить лучшее решение?