2016-01-11 18 views
7

Ad esempio, abbiamo 1 CPU con 8 core. Quanti massimi CPU-Core diversi possono essere utilizzati per l'elaborazione di un pacchetto IP quando passa su Eth0-> TCP/IP-> App (esclude l'elaborazione in Applicazione)?Quanti massimi CPU-Core diversi possono essere utilizzati per l'elaborazione di un pacchetto IP?

Ad esempio, potrebbe essere di 3 CPU-core:

  1. hardware Interrupt di processo
  2. calcolo del checksum del processo
  3. processo di copia del kernel-space -> user-space (il cui puntatore è stato inviato la presa)

Questo è molto importante per le prestazioni, poiché ogni trasferimento di dati tra i core è molto costoso.

+0

Questa è una domanda molto interessante. Non sono sicuro della tua giustificazione sul perché è importante, ma è interessante dal punto di vista del design del kernel. – Owen

+3

Mi sembra che un approccio più semplice e più fruttuoso al parallelismo sarebbe avere core diversi che lavorano su diversi pacchetti. E 2 e 3 possono essere scaricati da e CPU. E se è possibile elaborare più pacchetti per interruzione, è possibile ammortizzare il costo di 1. –

+0

La maggior parte dell'hardware supporta già 2. 3 dipende dalla progettazione del sistema, ma è quasi da evitare. Viene fatto anche da diverse parti della pila. Ignorare completamente l'elaborazione dei pacchetti viene eseguita a diversi livelli, quindi in diversi moduli. Almeno i frame Ethernet raw non vengono normalmente spostati nello/dallo spazio utente. In generale, il kernal dovrebbe mantenere la località, ma non è una questione di frame Ethernet. – Olaf

risposta

3

Generalmente parlando gestirai l'interrupt su un core, avresti la possibilità che il vero kernel coinvolto nell'elaborazione avvenga su un core differente, e infine lo passi a un'applicazione in esecuzione su un terzo core. Su alcuni sistemi operativi è possibile impostare l'affinità del processo e l'affinità del gestore di interruzioni per evitare di rimbalzare i dati.