Linux-kärnan version 5.1

Efter två månaders utveckling, Linus Torvalds lämnats kärnrelease Linux 5.1. Bland de mest anmärkningsvärda förändringarna: ett nytt gränssnitt för asynkron I/O io_uring, möjligheten att använda NVDIMM som RAM, stöd för delat virtuellt minne i Nouveau, stöd för skalbar övervakning av mycket stora filsystem via fanotify, möjligheten att konfigurera Zstd-komprimering nivåer i Btrfs, en ny cpuidle TEO-hanterare, implementering av systemanrop för att lösa 2038-problemet, möjligheten att starta upp från enhetsmapper-enheter utan initramfs, SafeSetID LSM-modul, stöd för kombinerade live-patchar.

Den huvudsakliga innovationer:

  • Diskundersystem, I/O och filsystem
    • Implementerat ett nytt gränssnitt för asynkron I/O - io_uring, vilket är känt för sitt stöd för I/O-polling och möjligheten att arbeta med eller utan buffring. Låt oss komma ihåg att den tidigare föreslagna asynkrona I/O-mekanismen "aio" inte stödde buffrad I/O, bara kunde fungera i O_DIRECT-läge (utan att buffra och kringgå cachen), hade problem med låsning på grund av att vänta på metadatatillgänglighet och uppvisade stora omkostnader på grund av kopiering av data i minnet.

      Inom API:et
      io_uring-utvecklare försökte eliminera bristerna i det gamla aio-gränssnittet. Förbi produktivitet io_uring är mycket nära SPDK och ligger betydligt före libaio när man arbetar med polling aktiverat. Ett bibliotek har förberetts för att använda io_uring i slutapplikationer som körs i användarutrymmet befriande, som tillhandahåller ett ramverk på hög nivå över kärnans gränssnitt;

    • I händelsespårningsmekanismen i FS fanotify() Lagt till stöd för att spåra superblock och strukturförändringssituationer smutsigt (händelser för att skapa, ta bort och flytta kataloger). De presenterade funktionerna hjälper till att lösa skalbarhetsproblemen som uppstår när man skapar rekursiv ändringsspårning i mycket stora filsystem med hjälp av inotify-mekanismen (förrutliga ändringar kunde tidigare endast spåras genom inotify, men
      prestanda under förhållanden med rekursiv spårning av stora kapslade kataloger lämnade mycket att önska). Nu kan sådan övervakning effektivt göras genom fanotify;

    • På filsystemet Btrfs Lagt till möjligheten att anpassa komprimeringsnivån för zstd-algoritmen, vilket kan betraktas som en optimal kompromiss mellan den snabba men ineffektiva lz4 och den långsamma men bra komprimeringen xz. I analogi med hur det tidigare var möjligt att ställa in komprimeringsnivån när du använder zlib, har stöd för monteringsalternativet "-o compress=zstd:level" lagts till för zstd. Under testningen gav den lägsta första nivån datakomprimering med 2.658 gånger med en komprimeringshastighet på 438.47 MB/s, dekompressionshastighet på 910.51 MB/s och minnesförbrukning på 780 MB, och den maximala nivån 15 gav 3.126 gånger, men med en komprimering hastighet på 37.30 MB/s. uppackning 878.84 MB/s och minnesförbrukning 2547 MB;
    • Lagt till möjligheten att starta från ett filsystem som finns på enhetsmapperenheten, utan att använda initramfs. Från och med den aktuella kärnreleasen kan enhetsmapper-enheter användas direkt under uppstartsprocessen, till exempel som en partition med rotfilsystemet. Partitionen konfigureras med startparametern "dm-mod.create". Device-mapper-moduler som tillåts för laddning inkluderar: "krypt", "fördröjning", "linjär", "snapshot-origin" och "verity";
    • F2FS_NOCOW_FL-flaggan har lagts till i F2FS-filsystemet orienterat mot Flash-enheter, vilket låter dig inaktivera kopiera-på-skriv-läge för en given fil;
    • Filsystemet har tagits bort från kärnan Exofs, som är en variant av ext2, anpassad för att arbeta med OSD (Object-based Storage Device) objektlagringar. Stödet för SCSI-protokollet för sådana objektlagringsenheter har också tagits bort;
  • Virtualisering och säkerhet
    • Lade till PR_SPEC_DISABLE_NOEXEC-alternativet till prctl() för att kontrollera spekulativ exekvering av instruktioner för den valda processen. Ett nytt alternativ låter dig selektivt inaktivera spekulativ exekvering för processer som potentiellt kan attackeras av en Spectre-attack. Låset varar tills det första anropet till exec();
    • Implementerad LSM-modul SafeSetID, som tillåter systemtjänster att säkert hantera användare utan att eskalera privilegier (CAP_SETUID) och utan att få root-behörigheter. Privilegier tilldelas genom att definiera regler i securityfs baserat på en vit lista över giltiga bindningar (i formen "UID1:UID2");
    • Lade till lågnivåändringar som krävs för stackbaserad laddning av säkerhetsmoduler (LSM). Introducerade "lsm" kärnstartalternativet för att kontrollera vilka moduler som laddas och i vilken ordning;
    • Stöd för filnamnutrymmen har lagts till i revisionsundersystemet;
    • Expanderat funktionerna hos GCC plugin structleak, som låter dig blockera potentiella läckor av minnesinnehåll Initiering av alla variabler som används i koden genom referensåtkomst på stacken tillhandahålls;
  • Nätverksdelsystem
    • För uttag genomförs nytt alternativ "SO_BINDTOIFINDEX" liknande
      "SO_BINDTODEVICE", men tar som argument indexnumret för nätverksgränssnittet istället för gränssnittets namn;

    • Mac80211-stacken har lagt till möjligheten att tilldela flera BSSID (MAC-adresser) till en enhet. Som en del av ett projekt för att optimera WiFi-prestandan har mac80211-stacken lagt till sändningsredovisning och möjligheten att fördela sändningstid mellan flera stationer (när man arbetar i accesspunktsläge, allokerar mindre överföringstid till långsamma trådlösa stationer, istället för att fördela tiden jämnt mellan alla stationer);
    • Tillagd mekanism "devlink hälsa", som ger meddelanden när problem uppstår med nätverksgränssnittet;
  • Minnes- och systemtjänster
    • Genomfört säker signalleverans som möjliggör PID-återanvändning. Till exempel, när man anropade döda tidigare, kan en situation uppstå där mål-PID:et omedelbart efter att en signal har skickats kan frigöras på grund av processavslutning och upptas av en annan process, och signalen skulle sluta skickas till en annan process. För att eliminera sådana situationer har ett nytt systemanrop pidfd_send_signal lagts till, som använder fildeskriptorer från /proc/pid för att säkerställa stabil processbindning. Även om PID:n återanvänds under systemanropsbehandling, kommer filbeskrivningen inte att ändras och kan säkert användas för att skicka en signal till processen;
    • Lagt till möjligheten att använda permanenta minnesenheter (t.ex. beständigt minne NVDIMM) som RAM. Fram till nu stödde kärnan sådana enheter som lagringsenheter, men nu kan de också användas som extra RAM. Funktionen är implementerad som svar på önskemål från användare som är villiga att stå ut med en prestandafördröjning och vill använda det inbyggda Linux-kärnminneshanterings-API:et istället för att använda befintliga system för minnesallokering av användarutrymme som körs ovanpå mmap för dax fil;
    • Lade till en ny CPU-tomgångshanterare (cpuidle, bestämmer när CPU:n kan sättas i djupa energisparlägen; ju djupare läge, desto större besparingar, men också längre tid tar det att lämna läget) - TEO (Timer Events Oriented Governor ). Hittills har två cpuidle-hanterare föreslagits - "meny" och "ladder", som skiljer sig åt i heuristik. "Meny"-hanteraren har kända problem med att fatta heuristiska beslut, för att eliminera vilka det beslutades att förbereda en ny hanterare. TEO är placerat som ett alternativ till "meny"-hanteraren, vilket möjliggör högre prestanda samtidigt som samma nivå av strömförbrukning bibehålls.
      Du kan aktivera den nya hanteraren med startparametern “cpuidle.governor=teo”;

    • Som en del av arbetet med att eliminera problem 2038, orsakad av ett spill av typen 32-bitars time_t, inkluderar systemanrop som erbjuder 32-bitars tidsräknare för 64-bitars arkitekturer. Som ett resultat kan 64-bitars time_t-strukturen nu användas på alla arkitekturer. Liknande förändringar har också implementerats i nätverkets delsystem för optioner tidsstämpel nätverksuttag;
    • In i hot patch-systemet för kärnan (live patching) Lagt till "Atomic Replace"-funktion för att atomiskt tillämpa en serie ändringar på en enskild funktion. Den här funktionen låter dig distribuera sammanfattningsplåster som täcker flera förändringar samtidigt, istället för processen för steg-för-steg-applicering av levande patchar i en strikt definierad ordning, vilket är ganska svårt att underhålla. Medan tidigare varje efterföljande ändring behövde baseras på tillståndet för funktionen efter den senaste ändringen, är det nu möjligt att sprida flera ändringar kopplade till ett initialtillstånd på en gång (dvs underhållare kan behålla en konsoliderad patch i förhållande till baskärnan istället för en kedja av fläckar som är beroende av varandra );
    • Meddelat föråldrat stöd för det körbara filformatet a.out och
      tog bort kod för att generera kärnfiler i a.out-format, som är i ett övergivet tillstånd. Formatet a.out har inte använts på Linux-system på länge, och genereringen av a.out-filer har länge inte stötts av moderna verktyg i standard Linux-konfigurationer. Dessutom kan laddaren för a.out-filer implementeras helt och hållet i användarutrymmet;

    • Möjligheten att identifiera och ta bort oanvänd kod har lagts till i BPF-programverifieringsmekanismen. Kärnan inkluderar även patchar med spinlock-stöd för BPF-undersystemet, vilket ger ytterligare möjligheter för att hantera parallellkörning av BPF-program;
  • Оборудование
    • I Nouveau förare Lagt till stöd för heterogen minneshantering, vilket gör att CPU och GPU kan komma åt vanliga synkroniserade minnesområden. Det delade virtuella minnessystemet (SVM, delat virtuellt minne) implementeras på basis av undersystemet HMM (Heterogeneous Memory Management), som tillåter användning av enheter med egna minneshanteringsenheter (MMU, minneshanteringsenhet), som kan komma åt huvudminne. I synnerhet, med hjälp av HMM, kan du organisera ett delat adressutrymme mellan GPU och CPU, där GPU:n kan komma åt processens huvudminne. SVM-stöd är för närvarande endast aktiverat för Pascal-familjen GPU:er, även om stöd tillhandahålls för Volta och Turing GPU:er också. Dessutom i Nouveau Lagt till ny ioctl för att kontrollera migreringen av processminnesområden till GPU-minne;
    • I Intel DRM-drivrutin för GPU Skylake och senare (gen9+) ingår Som standard eliminerar fastboot-läget onödiga lägesändringar under uppstart. Lagt till новые enhetsidentifierare baserade på mikroarkitekturerna Coffelake och Ice Lake. För Coffelake chips Lagt till GVT-stöd (GPU-virtualisering). För virtuella GPU:er genomförs VFIO EDID-stöd. För LCD-paneler MIPI/DSI Lagt till stöd för ACPI/PMIC-element. Genomfört nya TV-lägen 1080p30/50/60 TV;
    • Lade till stöd för Vega10/20 BACO GPU till amdgpu-drivrutinen. Implementerade Vega 10/20 power management och Vega 10 kylare kontrolltabeller. Lade till nya PCI-enhetsidentifierare för Picasso GPU:er. tillsatt gränssnitt för att hantera schemalagda beroenden för att undvika dödlägen;
    • tillsatt DRM/KMS-drivrutin för skärmacceleratorer ARM Komeda (Mali D71);
    • Tillagt stöd för Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 och Kingdisplay kd097d04 skärmpaneler;
    • Lade till stöd för Rockchip RK3328, Cirrus Logic CS4341 och CS35L36, MediaTek MT6358, Qualcomm WCD9335 och Ingenic JZ4725B audio codecs, samt Mediatek MT8183 ljudplattform;
    • Tillagt stöd för NAND-kontroller Flash STMicroelectronics FMC2, Amlogic Meson;
    • Tillagt acceleratorstöd för Habana AI-hårdvarusystem;
    • Tillagt stöd för NXP ENETC gigabit Ethernet-kontroller och MediaTek MT7603E (PCIe) och MT76x8 trådlösa gränssnitt.

Samtidigt latinamerikanska Free Software Foundation bildas
вариант helt gratis kärna 5.1 - Linux-fri 5.1-gnu, rensad från firmware och drivrutinselement som innehåller proprietära komponenter eller kodsektioner, vars omfattning är begränsad av tillverkaren. I den nya utgåvan är blob-laddning inaktiverad i mt7603- och goya-drivrutinerna. Uppdaterad blob-rensningskod i drivrutiner och delsystem wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk och touchscreen_dmi. Blob-rensning i lantiq xrx200 firmware loader har stoppats på grund av att den tagits bort från kärnan.

Källa: opennet.ru

Lägg en kommentar