Ho un semplice script di bash che canalizza l'output di un processo in un altro. Vale a dire :.Come eseguire i processi convogliati con bash su più core?
dostuff | filterstuff
Accade che sul mio sistema Linux (openSUSE se è importante, il kernel 2.6.27) questi due processi eseguito su un singolo core. Tuttavia, l'esecuzione di diversi processi su diversi core è una norma predefinita che non si verifica in questo caso.
Quale componente del sistema è responsabile di ciò e cosa devo fare per utilizzare la funzionalità multicore?
Nota che non c'è alcun problema sul kernel 2.6.30.
Chiarimento: Dopo aver seguito Dennis Williamson 's consigli, ho fatto sicuro con il programma top, che in filodiffusione processi sono infatti sempre corsa sullo stesso processore. Programmatore di Linux, che di solito fa un ottimo lavoro, questa volta non lo fa.
Immagino che qualcosa in bash impedisca al sistema operativo di farlo. Il fatto è che ho bisogno di una soluzione portatile per macchine multi-core e single-core. Il taskset
solution proposto da Dennis Williamson non funziona su macchine single-core. Attualmente sto usando :,
dostuff | taskset -c 0 filterstuff
ma questo sembra un hack sporco. Qualcuno potrebbe fornire una soluzione migliore?
Prova a ripetere il test con 'top' più volte (senza' taskset'). Quando lo facevo, a volte i due processi erano sulla stessa CPU, a volte diversi. –
Sono sempre sullo stesso e utilizzano solo il 50% del sistema :( –
Prova '(dostuff) | (filterstuff)' e vedi in quale core si presentano. Una differenza (se è importante) è che sei su un sistema multicore e sono su un sistema multiprocessore (single core ciascuno) Perché vuoi separare questi processi in ogni caso? Sono programmi che hai scritto e puoi modificarli in modo che influenzino lo schedulatore stesso? –