Il contesto cambia molto più lentamente nei nuovi kernel di Linux

4

Stiamo cercando di aggiornare il sistema operativo sui nostri server da Ubuntu 10.04 LTS a Ubuntu 12.04 LTS. Sfortunatamente, sembra che la latenza per eseguire un thread che è diventato eseguibile sia notevolmente aumentata dal kernel 2.6 al kernel 3.2. In effetti, i numeri di latenza che stiamo ottenendo sono difficili da credere.

Vorrei essere più specifico riguardo al test. Abbiamo un programma che ha due thread. Il primo thread ottiene l'ora corrente (in tick usando RDTSC) e quindi segnala una variabile di condizione una volta al secondo. Il secondo thread attende la variabile condition e si riattiva quando viene segnalato. Ottiene quindi l'ora corrente (in tick usando RDTSC). La differenza tra il tempo nel secondo thread e il tempo nel primo thread viene calcolato e visualizzato sulla console. Dopodiché il secondo thread attende ancora una volta la variabile condition. Quindi, otteniamo un thread per misurare la latenza del segnale di segnalazione una volta al secondo di conseguenza.

In Linux 2.6.32, questa latenza è da qualche parte nell'ordine di 2.8-3.5 us, il che è ragionevole. In Linux 3.2.0, questa latenza è da qualche parte nell'ordine di 40-100 us. Ho escluso qualsiasi differenza nell'hardware tra i due host host. Funzionano su hardware identico (processori X5687 {Westmere-EP} dual socket con 3,6 GHz con hyperthreading, speedtep e tutti gli stati C disattivati). Stiamo cambiando l'affinità per eseguire entrambi i thread su core fisici dello stesso socket (cioè, il primo thread viene eseguito su Core 0 e il secondo thread viene eseguito su Core 1), quindi non c'è alcun rimbalzo di thread su core o bouncing / comunicazione tra socket.

L'unica differenza tra i due host è che si sta usando Ubuntu 10.04 LTS con il kernel 2.6.32-28 (la casella di selezione rapida del contesto) e l'altro sta eseguendo l'ultima versione di Ubuntu 12.04 LTS con il kernel 3.2.0-23 ( la casella dell'interruttore di contesto lento).

Sono stati apportati cambiamenti nel kernel che potrebbero giustificare questo ridicolo rallentamento nel tempo richiesto per l'esecuzione di un thread?

    
posta Michael Goldshteyn 24.08.2012 - 17:09

1 risposta

1

Al di sopra della mia testa non so perché questo sarebbe, ma se questa è considerata una severa regressione delle prestazioni, suggerisco di presentare un bug per far sì che un membro del team del kernel lo guardi.

risposta data Colin Ian King 24.08.2012 - 19:18

Leggi altre domande sui tag