La parola innovazione viene sbandierato nel settore tecnologico quasi quanto la rivoluzione , quindi può essere difficile differenziare l'iperbole da qualcosa che è davvero eccitante. Il kernel Linux è stato definito innovativo, ma è stato anche definito il più grande hack dell'informatica moderna, un monolito in un micromondo.
Mettendo da parte marketing e modellazione, Linux è probabilmente il kernel più popolare del mondo open source e ha introdotto alcuni veri cambiamenti nel gioco nel corso dei suoi quasi 30 anni di vita.
Cgroups (2.6.24)
Nel 2007, Paul Menage e Rohit Seth hanno ottenuto gli esoterici gruppi di controllo (cgroups) funzionalità aggiunta al kernel (l'attuale implementazione di cgroups è una riscrittura di Tejun Heo). Questa nuova tecnologia è stata inizialmente utilizzata come un modo per garantire, essenzialmente, la qualità del servizio per un insieme specifico di attività.
Ad esempio, è possibile creare una definizione di gruppo di controllo (cgroup) per tutte le attività associate al server Web, un altro cgroup per i backup di routine e un altro ancora per i requisiti generali del sistema operativo. Puoi quindi controllare una percentuale di risorse per ogni cgroup, in modo tale che il tuo sistema operativo e server web ottengano la maggior parte delle risorse di sistema mentre i tuoi processi di backup hanno accesso a tutto ciò che è rimasto.
Ciò per cui cgroups è diventato più famoso, tuttavia, è il suo ruolo di tecnologia che guida il cloud oggi:i container. In effetti, i cgroup erano originariamente denominati contenitori di processo. Non è stata una grande sorpresa quando sono stati adottati da progetti come LXC, CoreOS e Docker.
Si aprono le porte, il termine contenitori giustamente divenne sinonimo di Linux e il concetto di "app" basate su cloud in stile microservizio divenne rapidamente la norma. In questi giorni, è difficile allontanarsi dai cgroup, sono così diffusi. Ogni infrastruttura su larga scala (e probabilmente il tuo laptop, se esegui Linux) sfrutta i cgroup in modo significativo, rendendo la tua esperienza di elaborazione più gestibile e flessibile che mai.
Ad esempio, potresti aver già installato Flathub o Flatpak sul tuo computer, o forse hai iniziato a utilizzare Kubernetes e/o OpenShift al lavoro. Indipendentemente da ciò, se il termine "container" è ancora confuso per te, puoi acquisire una comprensione pratica dei container da Dietro le quinte con i container Linux.
LKMM (4.17)
Nel 2018, il duro lavoro di Jade Alglave, Alan Stern, Andrea Parri, Luc Maranget, Paul McKenney e molti altri è stato unito al kernel Linux principale per fornire modelli di memoria formali. Il sottosistema Linux Kernel Memory [Consistency] Model (LKMM) è un insieme di strumenti che descrivono il modello di coerenza della memoria di Linux, oltre a produrre prove di tornasole (klitmus , in particolare) per il test.
Man mano che i sistemi diventano più complessi nella progettazione fisica (più core CPU aggiunti, cache e RAM crescono e così via), più difficile è per loro sapere quale spazio di indirizzi è richiesto da quale CPU e quando. Ad esempio, se CPU0 deve scrivere dati in una variabile condivisa in memoria e CPU1 deve leggere quel valore, CPU0 deve scrivere prima che CPU1 tenti di leggere. Allo stesso modo, se i valori vengono scritti in un ordine in memoria, allora c'è un'aspettativa che vengano letti anche nello stesso ordine, indipendentemente dalla CPU o dalle CPU che stanno eseguendo la lettura.
Anche su una singola CPU, la gestione della memoria richiede un ordine di attività specifico. Un'azione semplice come x =y richiede una CPU per caricare il valore di y dalla memoria, quindi archivia quel valore in x . Inserimento del valore memorizzato in y nella x la variabile non può verificarsi prima la CPU ha letto il valore dalla memoria. Esistono anche dipendenze di indirizzi:x[n] =6 richiede che n viene caricato prima che la CPU possa memorizzare il valore di sei.
LKMM aiuta a identificare e tracciare questi modelli di memoria nel codice. Lo fa in parte con uno strumento chiamato herd , che definisce i vincoli imposti da un modello di memoria (sotto forma di assiomi logici), e quindi enumera tutti i possibili risultati coerenti con questi vincoli.
Patch a bassa latenza (2.6.38)
Tanto tempo fa, nei giorni precedenti al 2011, se si voleva fare un lavoro multimediale "serio" su Linux, bisognava procurarsi un kernel a bassa latenza. Ciò si applicava principalmente alla registrazione audio aggiungendo molti effetti in tempo reale (come cantare in un microfono e aggiungere riverbero e ascoltare la tua voce nelle cuffie senza ritardi evidenti). C'erano distribuzioni, come Ubuntu Studio, che fornivano in modo affidabile un tale kernel, quindi in pratica non era un grosso ostacolo, solo un avvertimento significativo quando si sceglieva la propria distribuzione come artista.
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Tuttavia, se non stavi usando Ubuntu Studio, o avevi bisogno di aggiornare il tuo kernel prima che la tua distribuzione arrivasse ad esso, dovevi andare alla pagina web di rt-patches, scaricare le patch del kernel, applicarle al tuo kernel codice sorgente, compilare e installare manualmente.
E poi, con il rilascio della versione del kernel 2.6.38, questo processo è terminato. Il kernel Linux improvvisamente, come per magia, aveva un codice a bassa latenza (secondo i benchmark, la latenza è diminuita di almeno un fattore 10) integrato per impostazione predefinita. Niente più download di patch, niente più compilazione. Tutto ha funzionato e tutto grazie a una piccola patch di 200 righe implementata da Mike Galbraith.
Per gli artisti multimediali open source di tutto il mondo, è stato un punto di svolta. Le cose sono andate così bene dal 2011 in poi che nel 2016 mi sono sfidato a costruire una Digital Audio Workstation (DAW) su un Raspberry Pi v1 (modello B) e ho scoperto che funzionava sorprendentemente bene.
RCU (2.5)
RCU, o Read-Copy-Update, è un sistema definito in informatica che consente a più thread del processore di leggere dalla memoria condivisa. Lo fa rinviando gli aggiornamenti, ma anche contrassegnandoli come aggiornati, per garantire che i consumatori dei dati leggano l'ultima versione. In effetti, ciò significa che le letture avvengono in concomitanza con gli aggiornamenti.
Il tipico ciclo RCU è un po' così:
- Rimuovi i puntatori ai dati per impedire ad altri lettori di farvi riferimento.
- Aspetta che i lettori completino i loro processi critici.
- Recupera lo spazio in memoria.
Dividendo la fase di aggiornamento in fasi di rimozione e recupero, il programma di aggiornamento esegue immediatamente la rimozione differendo la richiesta fino al completamento di tutti i lettori attivi (o bloccandoli o registrando un callback da richiamare al termine).
Sebbene il concetto di lettura-copia-aggiornamento non sia stato inventato per il kernel Linux, la sua implementazione in Linux è un esempio determinante della tecnologia.
Collaborazione (0.01)
La risposta finale alla domanda su cosa ha innovato il kernel Linux sarà sempre, soprattutto, la collaborazione. Chiamalo buon tempismo, chiamalo superiorità tecnica, chiamalo hackability o semplicemente chiamalo open source, ma il kernel Linux e i molti progetti che ha abilitato sono un brillante esempio di collaborazione e cooperazione.
E va ben oltre il semplice kernel. Persone di ogni ceto sociale hanno contribuito all'open source, probabilmente perché del kernel Linux. Linux era, e rimane fino ad oggi, una delle principali forze del software libero, ispirando gli utenti a portare il loro codice, arte, idee, o semplicemente se stessi, a una comunità umana globale, produttiva e diversificata.
Qual è la tua innovazione preferita?
Questo elenco è parziale rispetto ai miei interessi:contenitori, accesso alla memoria non uniforme (NUMA) e multimedia. Ho sicuramente lasciato la tua innovazione del kernel preferita fuori dall'elenco. Dimmelo nei commenti!