# Dividere carico sulle CPU

## kattivo

Salve,

Su task manager di windows, si puo' impostare al processo su che cpu farlo girare...

Io vorrei fare la stessa cosa su gentoo! Ho un Bi-proc, e vorrei tipo dirli....questo processo voglio che me lo fai girare cn la cpu0 e quest'altro con la cpu1....esiste un utility che riesce a gestire questo? o c'e gia di base qualche comando?

----------

## kueitao

Linux fornisce delle API che permettono la realizzazione precisa di quello che ti serve. Si tratta di funzioni C che vanno quindi utilizzate da programmi nello stesso linguaggio o in linguaggi interfacciabili con il C per produrre la utility.

#include <sched.h>

int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);

int sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);

Robert love, un bravo kernel hacker, ha prodotto un tool (licenziato GPL) che implementa proprio le suddette API. Se non ricordo male si chiama "taskset". Fai una ricerca su Google per trovarlo.

Saluti.

fabio de francesco

PS.: Si tratta di una utility da utilizzarsi a riga di comando. Non so se qualcuno si è mai preoccupato di creare un front-end grafico per la stessa "taskset" o altre similari che usano le stesse API.

Mi informerò meglio sull'argomento appena ho tempo perché conosco bene e talvolta uso le suddette funzioni in miei programmi C/C++ così mi piacerebbe costruire un applicazione con GUI per l'utente finale (magari con le librerie QT).

----------

## .:chrome:.

 *kattivo wrote:*   

> Su task manager di windows, si puo' impostare al processo su che cpu farlo girare...
> 
> Io vorrei fare la stessa cosa su gentoo! Ho un Bi-proc, e vorrei tipo dirli....questo processo voglio che me lo fai girare cn la cpu0 e quest'altro con la cpu1....esiste un utility che riesce a gestire questo? o c'e gia di base qualche comando?

 

potresti provare con le schedutils.

ma mi sembra una gran vaccata. se fai così le politiche di scheduling se ne vanno a (meretrici)

io credo che tu abbia bisogno di studiare un po' come funzionano i sistemi operativi e gli scheduler

----------

## kattivo

Dovrei studiare tante cose...ma non posso fare tutto! e ne risento..! quello che volevo fare è: tipo per decodificare un dvd, farli fare tutto il lavoro a un solo processore...cosi posso utilizzare l'altra cpu per l'uso....

----------

## Kernel78

non potresti semplicemente cambiare il nice della codifica del dvd in modo da lasciare spazio al tuo uso ...

----------

## stefanonafets

Non credo che cambi qualcosa all'atto pratico, lo scheduler del kernel linux (a mio avviso) funziona egregiamente...

----------

## kueitao

 *k.gothmog wrote:*   

> potresti provare con le schedutils

 

Ecco come si chiama il pacchetto che appunto comprende "taskset"...

----------

## kueitao

Ah... In ogni caso sono daccordo con chi preferisce lasciare fare allo scheduler del kernel, almeno in generale. Prima di usare le APi di cui parlavo o la loro implementazione in un qualsiasi tool per l'utente si dovrebbe conoscere molto bene quello che si sta per fare perchè quasi sempre si rischia di peggiorare la situazione che si vorrebbe risolvere.

Rimane il fatto che le suddette API sono di estrema utilità per chi sa il fatto suo.

Saluti.

fabio de francesco

----------

## CarloJekko

 *stefanonafets wrote:*   

> Non credo che cambi qualcosa all'atto pratico, lo scheduler del kernel linux (a mio avviso) funziona egregiamente...

 

O(1)

----------

## .:chrome:.

 *kattivo wrote:*   

> Dovrei studiare tante cose...ma non posso fare tutto! e ne risento..! quello che volevo fare è: tipo per decodificare un dvd, farli fare tutto il lavoro a un solo processore...cosi posso utilizzare l'altra cpu per l'uso....

 

ma scusa... tu uno scheduler non sai proprio cosa è, vero?

secondo me quello che chiedi è semplicemente assurdo. io cercherei di impiegare meglio il mio tempo, magari leggendo qualche buon libro, che eviterebbe di fare certe figure

----------

## xdarma

 *kattivo wrote:*   

> quello che volevo fare è: tipo per decodificare un dvd, farli fare tutto il lavoro a un solo processore...cosi posso utilizzare l'altra cpu per l'uso....

 

IMHO:

1. mi associo con chi ti ha detto che per quello che ci devi fare tu, associare un processo ad un processore in particolare è una vaccata;

2. quoto chi ti ha detto di utilizzare correttamente nice

3. presumo che utilizzerai mencoder o transcode, in tal caso ti informo che per mencoder esiste l'opzione threads=n (il cui significato dovrebbe essere chiaro ad un utente di quadriprocessore), per transcode devi usare il flag -u 10,n dove 10 è il buffer predefinito, mentre n (sorpresa  :-) il numero di threads...

4. mai sentito dire che sui sistemi smp un processo che genera un solo thread girerà su un solo processore alla volta?

 *kattivo wrote:*   

> 
> 
> Dovrei studiare tante cose...ma non posso fare tutto! e ne risento..! 
> 
> 

 

poverino, pensa quanto tempo ti porta via leggere le pagine man...

fai bene a postare per problemoni del genere

xdarma

p.s.

monoprocessori? pfui ho comprato un quad-cpu solo perchè non riuscivo ad impennare con il motorino...

----------

## Cazzantonio

La discussione sulla maleducazione di alcune risposte precedenti è stata splittata qua perché troppo lunga

[discussione]E' importante l'educazione nel forum?

Gradirei che qua si tornasse IT grazie   :Rolling Eyes:  (possibilmente con educazione   :Wink:   grazie )

----------

## fbcyborg

Ho trovato questo thread per caso, perché sto avendo problemi con mencoder che mi utilizza un solo processore (ho un quad core).

Prima di tutto sono andato a leggere la documentazione di mencoder.

 *xdarma wrote:*   

> 3. presumo che utilizzerai mencoder o transcode, in tal caso ti informo che per mencoder esiste l'opzione threads=n (il cui significato dovrebbe essere chiaro ad un utente di quadriprocessore)

 

Purtroppo l'utilizzo di threads=4 non sortisce alcun effetto, e con htop vedo che solo un core della CPU è al 100%.

Potrebbe dipendere da mplayer che non è compilato correttamente?

Il comando che usavo prima quando avevo un singolo processore, per convertire un file mpeg in avi era il seguente:

```
mencoder INPUT -ofps 25 -ovc xvid -oac mp3lame -lameopts abr:br=192 -srate 48000 -vf scale=720:576 -xvidencopts fixed_quant=4 -o OUTPUT.avi
```

ho aggiunto l'opzione threads=4 ma non cambia niente, per l'appunto.

Questo comando l'ho trovato googlando, non l'ho fatto io.

Come si fa?

Io devo semplicemente convertire un file m2t registrato con Kaffeine dal satellite in xvid, senza ridimensionamenti particolari (anche se poi ho usato scale, lo so!!) e che abbia una buona qualità. Rapporto di compressione in GB approssimativo: 1/8.

----------

## xdarma

 *fbcyborg wrote:*   

> Ho trovato questo thread per caso, perché sto avendo problemi con mencoder che mi utilizza un solo processore (ho un quad core).
> 
> Prima di tutto sono andato a leggere la documentazione di mencoder.
> 
>  *xdarma wrote:*   3. presumo che utilizzerai mencoder o transcode, in tal caso ti informo che per mencoder esiste l'opzione threads=n (il cui significato dovrebbe essere chiaro ad un utente di quadriprocessore) 
> ...

 

Alle volte la spocchia torna utile a qualcun'altro  :-)

 *fbcyborg wrote:*   

> Purtroppo l'utilizzo di threads=4 non sortisce alcun effetto, e con htop vedo che solo un core della CPU è al 100%.
> 
> Potrebbe dipendere da mplayer che non è compilato correttamente?
> 
> Il comando che usavo prima quando avevo un singolo processore, per convertire un file mpeg in avi era il seguente:
> ...

 

Credo che le uniche USE flags che ti servono dovrebbero essere: encode, x264 e xvid. Ma fai attenzione perché x264 è un formato diverso da xvid.

Ma dove hai aggiunto "threads=4" ?

Dovresti modificare così: "-xvidencopts fixed_quant=4:threads=4"

Ma dal man di mplayer ti ricordo che:

```
L'opzione che segue è disponibile solo nella versione 1.2.x di Xvid.

threads=<0-n>

 Crea n thread per eseguire la stima del movimento (default: 0). Il numero massimo di thread che possono essere usati è l'altezza dell'immagine diviso per 16.

```

Se non ti funziona prova a cambiare librerie passando a lavc:

- sostituisci "-ovc xvid" con "-ovc lavc"

- sostituisci "-xvidencopts fixed_quant=4:threads=4" con "-lavcopts vcodec=mpeg4:vqscale=4:threads=4"

Oppure dai un occhio a questo thread: [HOW-TO] Comprimere DVDs usando mencoder/mplayer e prova a usare la codifica in più passaggi.

Ciao.

----------

## fbcyborg

Grazie! 

Ha funzionato alla grande! Il tempo previsto per il termine della conversione è ora pari ad 1/5 del precedente.

 :Laughing: 

----------

