Uno sviluppatore che si occupa dello sviluppo del codice open source di Mold, un linker a elevate prestazioni per la compilazione, che in precedenza ha anche lavorato al meno recente LLVM lld, ha scoperto dell’esistenza di un collo di bottiglia che penalizza le prestazioni del kernel Linux.
Linux: uno sviluppatore di Mold scopre l’esistenza di un collo di bottiglia
Lo sviluppatore ha spiegato nel dettaglio il collo di bottiglia da lui scoperto con un post articolato inviato alla lista mail, dove si evidenziano tutti i problemi riscontrati. Durante lo sviluppo del linker Mold, di prestazioni nettamente superiori alle controparti GNU e LLVM, sono state notate delle aree del kernel Linux che facevano a tutti gli effetti da collo di bottiglia ai linker stessi. Si spera quindi che quanto messo in evidenza possa essere migliorato in futuro per ottimizzare e aumentare ulteriormente le prestazioni.
Nel post dello sviluppatore, dove vengono evidenziate tutte le problematiche del caso, viene fatto presente come exit(2) impieghi alcune centinaia di millisecondi per un processo di grandi dimensioni, oltre a situazioni in cui la scrittura di un nuovo file è più lenta della scrittura su un file esistente e una manca di un semaforo sicuro per l’intero sistema.
Nello specifico, in merito alla scrittura più lenta relativa a un nuovo file, rispetto a uno già esistente, lo sviluppatore ha spiegato che:
“mold può collegare un eseguibile LLVM/clang da 4 GiB in ~1,8 secondi sulla mia macchina se il linker riutilizza un file esistente e lo sovrascrive. Tuttavia, la velocità diminuisce a ~2,8 secondi se il file di output non esiste e mold deve creare un nuovo file. Ho provato a usare fallocate(2) per preallocare blocchi del disco, ma non ha funzionato. Sebbene 4 GiB non siano pochi, la creazione di un file dovrebbe davvero richiedere quasi un secondo?”
Per maggiori informazioni, è possibile consultare tutti i dettagli nella pagina della lista mail del kernel Linux.