Il kernel Linux utilizza un elenco collegato per TCP e un albero RB per la pianificazione del processo.Perché il kernel di Linux usa le strutture dati che fa?
In termini di efficienza algoritmica, questi hanno senso. Avrai un sacco di pacchetti uno alla volta, quindi l'inserimento di O (1) alla fine dell'elenco è bello.
Con la pianificazione dei processi, l'Utilissimo programma di pianificazione utilizza un albero nero rosso, con O (1) tempo per scegliere le attività.
Per quanto ne so nessuno di questi è implementato in modo "piatto" - la lista collegata è un gruppo di nodi con puntatori ad altri nodi, proprio come l'albero. Ciò significa che la località di queste strutture, per quanto ne so, dovrebbe essere povera.
Da quello che ho visto, la localizzazione della cache spesso supera l'efficienza algoritmica.
C'è qualcosa nel set di dati per cui è programmato Linux che renda l'efficienza algoritmica di queste strutture superiore all'efficienza della cache degli altri?
Sto fraintendendo qualcosa? Qualcuno ha profilato?
Mr. Torvalds, qual è la tua risposta? –
La dimensione della linea della cache varia molto tra le architetture. – Joshua
Vero. Ma il kernel ottimizza davvero per un modello di memoria puramente piatto? – hungerstrike