Jurnal de kernel - ceea ce aduce (3) infrastructură c t magazine

Tendințe și știri | Jurnal de nucleu

infrastructură

AppArmor, puncte de intrare pentru scanere de viruși la acces, un nou Killer Out of Memory Killer, precum și elementele de bază pentru codul Xen-Dom0 sunt unele dintre cele mai importante inovații ale kernel-ului Linux 2.6.36. Datorită unor restructurări, această versiune devine puțin mai mică decât predecesorul său, în ciuda câtorva sute de mii de linii de cod nou.

Miercuri dimineață, Linus Torvalds a lansat a șasea versiune pre-lansare a Linux 2.6.36. El a indicat că ar dori să lanseze în curând 2.6.36, dar poate introduce o altă versiune preliminară.

Jurnalul kernelului ia această ocazie ca să continue mini-seria „Ce aduce 2.6.36” cu descrierea inovațiilor legate de lucruri precum gestionarea memoriei, sistemul de construire și suport pentru diverse arhitecturi de CPU și sistem. Prima parte a seriei s-a ocupat de modificările hardware-ului grafic, a doua cu sistemele de fișiere, stocarea și hardware-ul de rețea; o a patra parte privind modificările la ACPI, PCI, managementul alimentării și driverele pentru USB, FireWire, V4L/DVB și Co. vor finaliza seria mini în câteva zile.

Securitate

După ce dezvoltatorii AppArmor, dezvăluit de Novell în 2006, au încercat fără succes timp de câțiva ani să includă codul nucleului pentru îmbunătățirea securității, versiunea 2.6.36 a acestuia s-a alăturat în cele din urmă nucleului (inclusiv documentația 1, 2, 3). Similar cu SELinux, AppArmor poate restricționa aplicațiile la acțiuni specificate; Atacatorii care au acces la sistem printr-o gaură de securitate, de exemplu în software-ul serverului, pot provoca doar daune limitate.

AppArmor are reputația de a fi mai ușor de administrat decât SELinux. Acesta din urmă este favorizat de Red Hat și este utilizat de Red Hat Enterprise Linux (RHEL) și Fedora, printre altele. Novell s-a concentrat pe AppArmor de mult timp, dar s-a separat de propriul departament de dezvoltare AppArmor în 2007 și, de asemenea, folosește SELinux din 2008. Drept urmare, dezvoltarea AppArmor a încetinit considerabil până când John Johansen i-a dat un nou impuls la începutul anului și, în cele din urmă, l-a împins în nucleul oficial. Johansen a lucrat anterior la Novell și este în prezent responsabil pentru integrarea AppArmor în Ubuntu la Canonical.

Fanotify, care a apărut din TALPA, a făcut numeroase încercări și cu câțiva ani înainte ca Torvalds să o integreze (inclusiv 1, 2, 3). Se bazează pe Fsnotify integrat în 2.6.31 și oferă puncte de intrare prin care scanerele de viruși, de exemplu, se pot conecta pentru a verifica fișierele atunci când accesează malware înainte de livrarea conținutului lor („scanare la acces”). Mai multe articole LWN.net (inclusiv 1, 2, 3) oferă unele informații despre modul în care funcționează Fanotify și problemele cu versiunile anterioare ale Fanotify.

[Actualizați 14 octombrie 2010, ora 9:30] Cu doar câteva zile înainte de finalizarea Linux 2.6.36, dezvoltatorii au dezactivat temporar interfețele Fanotify pentru a putea elimina unele deficiențe, dintre care unele afectează și ABI (1, 2, 3) - aceasta înseamnă că Fanotify nu poate fi utilizat pentru moment. Depanarea și reactivarea interfețelor spațiului utilizatorilor sunt planificate pentru Kernel 2.6.37; Încă nu este clar dacă aceste patch-uri își vor găsi, de asemenea, drumul într-unul dintre nucleele stabile din seria 2.6.36. [/Actualizați]

Gestionarea memoriei și a firelor

Dezvoltatorii kernel-ului s-au schimbat semnificativ și au rescris în mare măsură criminalul Out of Memory (OOM), care ucide procesele atunci când memoria este insuficientă, astfel încât sistemul să poată continua să funcționeze (1, 2, 3). Datorită acestor modificări, ajustarea fină a OOM se aplică prin/proc /

/ oom_adj este acum „depreciat” și ar trebui să dispară în august 2012. LWN.net oferă mai multe informații generale despre modificările aduse OOM în articolul „O altă rescriere a criminalului OOM”.

Hackerii de nucleu au integrat, de asemenea, „Coerența gestionată de concurență”, care optimizează gestionarea firelor de nucleu (inclusiv 1, documentație). Drept urmare, nucleul ar trebui să utilizeze resursele mai eficient, să le scaleze mai bine și să treacă cu mai puține fire pe multe sisteme - utilizatorii o vor observa și pe acestea din urmă, deoarece aceasta scurtează lista de fire de nucleu emise de ps -A. Dezvoltatorul oferă mai multe avantaje și motive pentru modificări într-un e-mail detaliat pe patch-urile sale și ca parte a cererii Git-Pull; LWN.net a scris un articol despre Concurrencey Managed Workqueues în toamna anului trecut.

[virtualizare de pagină, Kbuild]

Codul arhitecturii

Lista arhitecturilor procesorului acceptate de kernel crește din nou cu 2.6.36 și include acum și procesoarele pe 32 de biți TILEPro și TILE64 (inclusiv 1, 2, 3) dezvoltate de Tilera. Sunt procesoare VLIW de tip MIPS, cu multe nuclee care comunică între ele printr-o rețea iMesh. Deoarece funcționează foarte economic, mai mult de 10.000 de nuclee de procesor pot fi găzduite într-un rack de server. Suportul pentru procesoarele Tegra de la Nvidia, care se bazează pe arhitectura ARM (inclusiv 1, 2, 3), provine din mediul Android. În plus, nucleul conține acum aproximativ 90% din driverele pentru Ben NanoNote (inclusiv 1, 2, 3, 4, 5, 6, 7, 8) - un computer de buzunar cu o platformă hardware deschisă, care este disponibilă și în Europa încă din primăvară este disponibil.

Avi Kivity, menținătorul KVM, scrie în solicitarea sa Git-Pull că nu există caracteristici noi majore în KVM pentru 2.6.36. Cu toate acestea, el indică unele optimizări de performanță și menționează suportul pentru comenzile procesorului Xsave (1, 2) și AVX (Intel Advanced Vector Extension) în sistemele guest.

Cererile Git-Pull de Jeremy Fitzhardinge și Konrad Rzeszutek Wilk oferă o prezentare generală a modificărilor aduse codului Xen. Cu patch-urile colectate de primul, driverele Paravirt pot fi folosite acum și în domenii complet virtualizate („pv-on-hvm”); Datorită celorlalte modificări, Linux, ca sistem invitat paravirtualizat, poate accesa dispozitive PCI printr-un fel de IOMMU virtual oferit de gazdă (Dom0) (inclusiv 1). Unele dintre modificări pun, de asemenea, bazele pe care ar trebui să se bazeze codul de operare a kernel-ului Linux ca „domeniu inițial” - un fel de suport Dom0 decupat. Acest cod este în prezent discutat la LKML și ar putea trece în ramura principală de dezvoltare a Linux într-una din următoarele versiuni.

A se sprijini

Codul Kbuild oferă acum patru noi ținte:

  • „oldnoconfig” înlocuiește „loose_nonint_oldconfig” și setează toate opțiunile de configurare din fișierul de configurare a nucleului „.config” la „nu” care nu au fost setate anterior.
  • „listnewconfig” înlocuiește „nonint_oldconfig” și listează toate opțiunile care nu au fost încă setate în „.config”.
  • „alldefconfig” creează un „.config” în care toate opțiunile primesc setările specificate de fișierele Kconfig ca implicit.
  • „savedefconfig” scrie un fișier de configurare numit „defconfig” în care sunt listate doar acele opțiuni care diferă de setările standard ale fișierelor Kconfig.

Cu ajutorul celor din urmă make target, dezvoltatorii au creat zeci de fișiere de configurare standard pentru diferite arhitecturi de sistem și procesor acceptate de nucleul Linux, care înlocuiesc fișierele de configurare standard anterioare. Deoarece acesta din urmă conținea anterior intrări pentru toate opțiunile pe care fișierele kconfig ale nucleului le-au specificat ca standard, commit-ul corespunzător este de aproape 6 MB și elimină peste două sute de mii de linii din sursele kernelului.

Administratorii de asistență Itanium (IA64) și Power își simplificaseră anterior fișierele de configurare în acest mod (1, 2). Toate aceste modificări sunt principalul motiv pentru care codul sursă 2.6.36 ar trebui să fie puțin mai mic decât predecesorul său direct - acest lucru este extrem de neobișnuit, deoarece în ultimii ani nucleul a crescut cu câteva sute de mii de linii cu fiecare nouă versiune.

Dieta pentru fișierele de configurare standard începuse deja cu 2.6.35, unde dezvoltatorii de kernel au făcut fișierele pentru sistemele ARM mai slabe. Întregul lucru nu schimbă nimic pentru utilizator, deoarece la fel ca înainte, un "make defconfig" creează un fișier de configurare de bază pentru propriul dvs. sistem.

[pagini diverse, mici perle]

variat

  • Hackerii de nucleu au redus și mai mult utilizarea sistemului Big Kernel Lock (BKL) în codul de infrastructură și în numeroși drivere - inclusiv în subsistemul TTY, ceea ce a provocat dificultăți chiar și pentru unii dintre cei mai experimentați hackeri de nucleu. Dezvoltatorii se apropie astfel de obiectivul nucleului care lucrează la sisteme standard fără acest mecanism de blocare greoi, care afectează scalabilitatea și performanța sistemului.
  • Codul x86 acceptă acum notificările privind limita de putere de la procesoarele Intel Sandy Bridge, care sunt așteptate la începutul anului viitor (1, 2, 3). Noul driver Hwmonitor pkgtemp se bazează pe acesta și poate citi temperatura procesorului (1, documentație)
  • În anumite situații, planificatorul de procese reduce concurența dintre firele de nucleu care doresc să obțină control exclusiv asupra unei resurse ocupate. Acest lucru permite procesului activ să funcționeze mai netulburat, ceea ce, în unele cazuri, crește semnificativ fluxul de date (Commit, articolul LWN.net).
  • Ca și în cazul predecesorilor săi, 2.6.36 aduce, de asemenea, numeroase modificări în codul de depanare, monitorizare a performanței și urmărire. Hackerii de nucleu au eliminat, de exemplu, plug-in-ul Ftrace kmemtrace, deoarece funcțiile pot fi acum realizate folosind evenimente de urmărire de tipul "kmem" și "perf kmem". Așa cum s-a descris deja în prima parte a seriei „Ce aduce 2.6.36”, nucleul de pe sistemele cu suport Intel KMS oferă acum un shell de depanare KDB pentru a analiza cauza blocării serverului X când trecerea la o consolă text nu mai este posibilă și nu este configurată nicio consolă serială.
  • La aproape o lună de la sfârșitul ferestrei de îmbinare, hackerii de kernel au modificat programatorul de proces, prin care programatorul ar trebui să reducă timpul maxim de așteptare, în special pe sistemele desktop, atunci când alte procese necesită timp CPU în paralel - ceea ce promite mai bine Viteza de răspuns, care ar trebui să facă sistemul să se simtă mai rapid. Discuția care a precedat modificarea și comentariul de confirmare explică fundalul și oferă valori măsurate în funcție de care latența maximă în scenariul de testare a scăzut aproape la jumătate.
  • Cu 2.6.36, hackerii din nucleu vor să elimine problema care a determinat sistemele cu 2.6.35 și unele versiuni anterioare ale nucleului să se simtă extrem de lente în anumite condiții sau să nu mai răspundă uneori, în timp ce nucleul a transferat cantități mai mari de date pe un mediu lent (de ex. un stick USB) a scris (inclusiv 1).
  • Îmbunătățirea securității Tomoyo oferă acum un „Mod de aplicare interactivă”, cu ajutorul căruia administratorii din companie pot decide dacă doresc să ignore o încălcare a politicii. Un videoclip YouTube ilustrează cum funcționează.
  • Stefani Seibold a schimbat API-ul Kfifo, care fusese deja considerabil revizuit în 2.6.32, pentru a îmbunătăți performanța și a oferi un API mai bun (inclusiv 1, 2). Vechile apeluri API sunt încă acceptate, noile posibilități sunt explicate prin câteva exemple.
  • Coccinelle poate fi acum apelat prin intermediul make target „coccicheck” - un program de analiză a codului semantic care poate scuti programatorii de muncă atunci când refactorizează codul. Detalii despre posibilități sunt furnizate de documentația kernelului și de un articol publicat pe LWN.net în primăvara anului trecut.

Micile perle

Multe modificări minore, dar nicidecum nesemnificative, pot fi găsite în următoarea listă, cu titlurile de confirmare engleză ale modificării respective. La fel ca multe dintre referințele din textul anterior, intrările se leagă de front-end-ul web al ramurii Git întreținute de Linus Torvalds cu sursele „oficiale” ale nucleului de pe Kernel.org. Comentariul de confirmare afișat prin intermediul acestor linkuri și patch-ul emis sub acesta oferă o mulțime de informații suplimentare despre modificările respective.

Înaintea fiecărui link există câteva litere și cifre între paranteze pătrate. Un „C” indică patch-uri cu modificări la fișierele Kconfig, care conțin textele de ajutor și opțiunile de configurare care sunt afișate în timpul configurării nucleului prin „make menuconfig”, „make xconfig” și instrumente similare. Un „D” înseamnă patch-uri care modifică documentația care se află în ramura nucleului din Documentație /. Un „N” indică modificările care creează un fișier nou. Numărul oferă o impresie aproximativă despre dimensiunea patch-ului: un „1” înseamnă modificări cuprinse între 10 și 20 KByte, inclusiv comentarii, un „2” pentru cele cu dimensiuni cuprinse între 20 și 30 KBytes; Modificările fără un număr sunt mai mici de 10 KB, în timp ce patch-urile cu „9” sunt de 90 KB sau mai mari.

Depanare, monitorizare performanță și cod de urmărire