Linus Torvalds ha preparato un insieme di patch per il sottosistema di gestione della memoria nel kernel Linux, che implementano un'ottimizzazione per la lettura di piccoli blocchi di dati dalla cache di pagina senza modifica atomica del contatore dei riferimenti (refcount) nella struttura folio. Nel testo del commit si fa riferimento al fatto che le modifiche, i test ad esse associati e il testo preliminare delle note sono stati realizzati dall'assistente AI Claude Code sotto la supervisione di Torvalds. La modifica è stata aggiunta in un ramo separato del kernel noref-filemap-read-with-llm e al momento non è chiaro se sarà trasferita nel ramo principale o se si tratta semplicemente di un esperimento interno.
Durante i test, grazie alle patch, è stata ottenuta una maggiore capacità di lettura di piccoli file in una configurazione con 8 thread che è passata da 9.9-10.4 a 30-33 milioni di operazioni al secondo (un incremento di 3 volte), con 4 thread da 8.9-11.6 a 25-26 mln/sec (un incremento di 2 volte), e con carico a thread singolo da 7.9-8.1 a 8.8-8.9 mln/sec. L'aumento delle prestazioni è spiegato dal fatto che, quando ci sono accessi simultanei alla cache di pagina, si verifica un'intensa competizione tra i thread per l'accesso alla cache. Ad esempio, quando 8 thread cercano di leggere contemporaneamente 16 byte di dati, il 99.92% del tempo viene speso non nella lettura stessa, ma nell'attesa di accesso al contatore dei riferimenti.
Nella patch, per garantire l'accuratezza dei dati, invece di utilizzare singole blocchi, modifiche dei contatori dei riferimenti o buffering intermedie, viene applicato un metodo alternativo che utilizza il rilascio di memoria ritardato con sincronizzazione tramite il meccanismo RCU (Read-Copy-Update). Il metodo proposto nella patch garantisce che la pagina di memoria non venga fisicamente liberata finché il thread che legge non ha terminato di copiare i dati.
Fonte: opennet.ru
