Версия на ядрото на Linux 5.6

След талантливата разработка на Линус Торвалдс представи е публикувана Linux 5.6. Между най-забележителните промени са: интеграция на VPN интерфейса WireGuard, поддръжка на USB4, пространства за време, възможност за създаване на обработчици на TCP натоварване с помощта на BPF, начална поддръжка на MultiPath TCP, разрешаване на проблема с 2038 година, механизъм „bootconfig“, файловата система ZoneFS.

В новата версия са внедрени 13702 поправки от 1810 разработчика,
размерът на пача е 40 MB (промените засягат 11577 файла, добавени са 610012 реда код,
премахнати са 294828 реда). Около 45% от всички изменения в 5.6
са свързани с драйверите на устройствата, около 15% от промените имат
отношение към обновяване на код, специфичен за хардуерни архитектури, 12%
са свързани с мрежовия стек, 4% — с файловите системи и 3% с вътрешните
подсистеми на ядрото.

Основни нововъведения:

  • Мрежовата подсистема
    • Добавена е реализация на VPN интерфейса WireGuard, който е основан на съвременни методи за криптиране (ChaCha20, Poly1305, Curve25519, BLAKE2s), лесен за употреба, без усложнения, доказал се в редица големи внедрения и осигурява много висока производителност (с 3,9 пъти превъзхожда OpenVPN по пропускателна способност). В WireGuard се прилага концепцията за маршрутизиране по ключове за криптиране, което означава свързване на всеки мрежов интерфейс с таен ключ и използването му за свързване на отворени ключове. Обменът на отворени ключове за установяване на връзка се извършва по аналогия с SSH. Необходимите за функционирането на WireGuard криптографски примитиви но те не промениха глобалната картина). Първите сериозни признаци, че BPF ще еволюира, се появиха през 2011 година, когато Eric Dumazet предложи бяха прехвърлени от библиотеката Zinc включени в стандартния Crypto API и са включени включени в ядрото 5.5.
    • Започна интеграция на компоненти, необходими за поддръжката на MPTCP (MultiPath TCP), разширение на протокола TCP за организиране на работа на TCP връзка с доставка на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. За мрежови приложения, подобна агрегирана връзка изглежда като обикновена TCP връзка, а цялата логика за разделяне на потоците се изпълнява от MPTCP. Multipath TCP може да се използва както за увеличаване на пропускателната способност, така и за повишаване на надеждността. Например, MPTCP може да се използва за организиране на предаване на данни на смартфон, използващ едновременно WiFi и 4G връзки или за намаляване на разходите чрез свързване на сървър с помощта на няколко евтини връзки вместо една скъпа.
    • Добавена е поддръжка на дисциплината за обработка на мрежови опашки sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), предоставяща възможност за разпределение на пропускната способност между различни класове трафик. Ако натоварването на определен клас трафик е под предоставената пропускна способност, ETS позволява на другите класове трафик да използват наличната (неизползвана) пропускна способност. Qdisc sch_ets се настройва като дисциплина PRIO и използва класове трафик за определяне на строги и споделени ограничения на пропускната способност. ETS работи като комбинация от дисциплини PRIO и DRR — при наличие на строго ограничени класове трафик се използва PRIO, но ако в опашката на трафика няма, работи като DRR.
    • Добавен е нов тип BPF-програми BPF_PROG_TYPE_STRUCT_OPS, позволяващ реализиране на обработващи функции в ядрото чрез BPF. В момента предоставената възможност вече може да се използва за реализиране на алгоритми за управление на претоварвания TCP под формата на BPF-програми. Като пример предложена BPF-програма с реализиране на алгоритъма DCTCP.
    • Проектите в ядрото са приети промени, трансформиращи инструментария ethtool с ioctl() на използване на интерфейс netlink. Новият интерфейс улеснява добавянето на разширения, подобрява обработката на грешки, позволява изпращане на известия при промяна на състоянието, опростява взаимодействието между ядрото и пространството на потребителя и намалява броя на синхронизирани именовани списъци.
    • Добавена е реализация на алгоритъма за управление на мрежови опашки FQ-PIE (Flow Queue PIE), насочен към намаляване на негативното влияние на междинното буфериране на пакети в граничното мрежово оборудване (bufferbloat). FQ-PIE демонстрира висока ефективност при използване в системи с кабелни модеми.
  • Дискова подсистема, вход/изход и файлови системи
    • За файловата система Btrfs е добавена асинхронна реализация на операцията DISCARD (маркиране на освободените блокове, които вече не трябва да се съхраняват физически). Първоначално операциите DISCARD се изпълняваха синхронно, което можеше да доведе до спад на производителността заради изчакването на завършването на съответните команди от хранилището. Асинхронната реализация позволява да не се чака завършването на DISCARD от хранилището и да се извършва тази операция на заден план.
    • В XFS е извършена очистване на кода, в който са използвани стари 32-битови таймери (тип time_t заменен с time64_t), водещи до проблема на 2038 година. Отстранени са грешки и повреди в паметта, проявяващи се на 32-битови платформи. Кодът е преработен да работи с разширени атрибути.
    • в файловата система ext4 са внесени оптимизации на производителността, свързани с обработката на заключване на inode при операции на четене и запис. Повишена е производителността на презаписа в режим на директен вход/изход (Direct I/O). За улесняване на диагностицирането на проблеми е осигурено запазването в суперблока на първия и последния код на грешки.
    • В файловата система F2FS реализирана възможност за съхранение на данни в компресиран вид. За отделен файл или каталог компресията може да бъде включена чрез командата „chattr +c file“ или „chattr +c dir; touch dir/file“. За компресия на целия дял в утилитата mount може да се използва опцията „-o compress_extension=ext“.
    • В състава на ядрото е приета файловата система ZoneFS, улесняваща ниско ниво на работа с зонални устройства за съхранение. Под зонални носители се разбират устройства на твърди магнитни дискове или NVMe SSD, пространството за съхранение в които е разделено на зони, съставляващи групи от блокове или сектори, в които е допустимо само последователно добавяне на данни с обновяване на цялата група блокове. ФС ZoneFS е разработена от компанията Western Digital и свързва всяка зона в носителя с отделен файл, който може да се използва за съхранение на данни в raw-режим без манипулация на ниво сектори и блокове, т.е. позволява на приложенията да използват файловия API вместо директно да се обръщат към блочното устройство чрез ioctl.
    • В NFS по подразбиране е деактивирано монтиране на дялове над UDP. Добавена е поддръжка за определената в спецификацията NFS 4.2 възможност за директно копиране на файлове между сървъри. Добавена е нова опция за монтиране „softreval“, която при отказ на сървъра допуска използването на кеширани стойности на атрибути. Например, при указване на тази опция след недостъпност на сървъра остава възможността за преместване по пътища в NFS дяла и достъп до информация, която е останала в кеша.
    • Извършена оптимизация на производителността на механизма fs-verity, използван за контрол на целостта и проверка на автентичността на отделни файлове. Увеличена е скоростта на последователно четене благодарение на прилагането на хеш-дървото на Меркл. Оптимизирана е производителността на FS_IOC_ENABLE_VERITY при отсъствие на данни в кеша (прилагано е предварително четене на страници с данни).
  • Виртуализация и безопасност
    • Обявена е остаряла възможността за деактивиране на модула SELinux по време на работа, а в бъдеще ще бъде забранена деактивацията на вече активиран SELinux. За деактивиране на SELinux ще е необходимо да се предаде параметър „selinux=0“ в командния ред на ядрото.
    • Добавена е поддръжка на пространства от имена за време (time namespaces), които позволяват да се свърже състоянието на системните часовници (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME) към контейнера, използвайки своето време, и при миграцията на контейнера на друг хост да се осигури неизменност на показанията на CLOCK_MONOTONIC и CLOCK_BOOTTIME (да се отчита времето след зареждане с или без вземане под внимание на състоянието в режим на заспиване).
    • Премахнат е блокираният пул /dev/random. Поведението на /dev/random е приближено до /dev/urandom по отношение на предотвратяване на блокиране на ентропия след инициализация на пул.
    • В основния състав на ядрото е включен драйвер, който позволява на гост-системи, работещи под управлението на VirtualBox, да монтират директории, споделяни от хост-околната среда (VirtualBox Shared Folder).
    • В подсистемата BPF е добавен набор от пачове (BPF dispatcher), при условия на прилагане на механизма Retpoline за защита от атаки от клас Spectre V2, позволяващ да се повиши ефективността на извикването на BPF-програми при настъпване на свързани с тях събития (например, дава възможност за ускоряване на извикването на XDP-обработчици при получаване на мрежов пакет).
    • Добавен е драйвер за поддръжка на вградени в APU AMD среди TEE (Trusted Execution Environment).
  • Памет и системни услуги
    • В BPF е добавена поддръжка на глобални функции. Разработката се извършва в рамките на инициативата за добавяне на поддръжка на библиотеки от функции, които могат да се включват в BPF програми. Следващата стъпка ще бъде поддръжката на динамични разширения, позволяващи зареждането на глобални функции, включително за замяна на съществуващи глобални функции по време на тяхното използване. В подсистемата BPF също е добавена поддръжка на вариант на операция map (използва се за запазване на постоянни данни), поддържащ изпълнението в пакетен режим.
    • Добавено устройство «cpu_cooling», позволяващо охлаждането на прегрял CPU, като го постави в режим на покой (idle) за кратки периоди от време.
    • Добавен системен повик openat2(), който предлага набор от допълнителни флагове за ограничаване на разрешенията на файловия път (забрана на пресичане на точки на монтиране, символични връзки, magic връзки (\/proc\/PID\/fd), компоненти «..\/»).
    • За хетерогенни системи на базата на архитектурата big.LITTLE, комбиниращи в един чип мощни и по-малко производителни енергийно ефективни ядра CPU, при изпълнение на задачи в реално време се осигурява задаване на параметъра uclamp_min (появил се в ядрото 5.3 механизъм за закрепване на натоварването). Указаният параметър гарантира, че задачата ще бъде разположена от планировщика на ядро CPU, което има достатъчна производителност.
    • Ядрото е избавено от проблема от 2038 година. Сменени са последните останали обработчици, в които за брояча на епохалното време е използван 32-битов (signed int) тип time_t, който, като се има предвид отчета от 1970 година, трябва да прелее през 2038 година.
    • Продължено е усъвършенстването на интерфейса за асинхронен вход\/изход io_uring, в който осигурена поддръжка на нови операции: IORING_OP_FALLOCATE (резервиране на празни области), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (отваряне и затваряне на файлове),
      IORING_OP_FILES_UPDATE (добавяне и премахване на файлове от списъка с бърз достъп),
      IORING_OP_STATX (запитване за информация за файл),
      IORING_OP_READ,
      IORING_OP_WRITE (опростени аналози на IORING_OP_READV и IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (асинхронни варианти на повикванията posix_fadvise и madvise), IORING_OP_SEND,
      IORING_OP_RECV (изпращане и приемане на мрежови данни),
      IORING_OP_EPOLL_CTL (изпълнение на операции върху файлови дескриптори epoll).
    • Добавен системен повик pidfd_getfd(), даваща възможност на процеса да извлече от друг процес файлов дескриптор на отворен файл.
    • Реализиран механизъм «bootconfig», позволяващ освен опции за команден ред да се определят параметри на работа на ядрото чрез файл с настройки. За добавяне на подобни файлове в образа initramfs е предложен инструментът bootconfig. Указаната възможност може да се използва, например, за конфигуриране на kprobes по време на зареждане.
    • Преработен механизм за очакване на запис и четене на данни в неназовани канали (pipe). Промяната ускори изпълнението на задачи като паралелна компилация на големи проекти. В същото време оптимизацията може да доведе до условия на състезание в GNU make поради грешка в версия 4.2.1, която е отстранена в версия 4.3.
    • В prctl() е добавен флаг PR_SET_IO_FLUSHER, който може да се използва за маркиране на процеси, ангажирани с освобождаването на памет, за които не трябва да се прилагат ограничения в ситуация на недостиг на памет в системата.
    • На базата на системата за разпределение на паметта ION, използвана в Android, е реализирана подсистема dma-buf heaps, която позволява управление на алокацията на DMA-буфери за споделяне на области от паметта между драйвъри, приложения и различни под системи.
  • Апарати архитектури
    • Добавена е поддръжка на разширението E0PD, което е появило се в ARMv8.5 и позволява реализирането на защита срещу атаки, свързани с спекулативно изпълнение на инструкции в CPU. Защитата на базата на E0PD води до по-малко разходи в сравнение с KPTI (Изолация на таблицата на страниците на ядрото).
    • За системи, базирани на архитектура ARMv8.5, е добавена поддръжка на инструкциите RNG, която предоставя достъп до хардуерен генератор на псевдослучайни числа. В ядрото инструкцията RNG се използва за генериране на ентропия при инициализация на предоставения от ядрото генератор на псевдослучайни числа.
    • Премахната е поддръжката на разширенията MPX (Разширения за защита на паметта), добавени в ядрото 3.19 и позволяващи организирането на проверка на указатели за спазване на граници в области на паметта. Технологията не получи разпространение в компилатори и бе премахната от GCC.
    • За архитектура RISC-V е реализирана поддръжка на инструмент за отстраняване на грешки KASan (Kernel address sanitizer), осигуряващ откриването на грешки при работа с памет.
  • Оборудване
    • Реализирана е поддръжка на спецификацията USB 4.0, която е базирана на протокола Thunderbolt 3 и осигурява пропускна способност до 40 Gb/s, запазвайки обратно съвместимост с USB 2.0 и USB 3.2. Подобно на Thunderbolt интерфейсът USB 4.0 позволява тунелиране на различни протоколи през един кабел с конектор Type-C, включително PCIe, Display Port и USB 3.x, както и софтуерни реализации на протоколи, например, за изграждане на мрежови връзки между хостове. Реализацията е основана на вече включения в ядрото на Linux драйвер Thunderbolt и го адаптира за работа с хостове и устройства, съвместими с USB4. Промените също добавят поддръжка на устройства Thunderbolt 3 в софтуерната реализация на мениджъра на връзки (Connection Manager), който отговаря за създаването на тунели за свързване на няколко устройства чрез един порт.
    • В драйвера amdgpu е добавена първоначална поддръжка на технологията за защита от копиране HDCP 2.x (High-bandwidth Digital Content Protection). Добавена е поддръжка на ASIC-чипа AMD Pollock, основан на Raven 2. Реализирана е възможността за нулиране на GPU за семействата Renoir и Navi.
    • В DRM-драйвера за видеокартите Intel е добавена поддръжка на DSI VDSC за чипове, базирани на микроархитектура Ice Lake и Tiger Lake, реализиран е LMEM mmap (устройствена локална памет), подобрен е парсингът на VBT (Video BIOS Table), реализирана е поддръжка на HDCP 2.2 за чиповете Coffee Lake.
    • Продължава работата по унификация на кода на драйвера amdkfd (за дискретни GPU, като Fiji, Tonga, Polaris) с драйвера amdgpu.
    • Преработен е драйверът k10temp, в който се появи поддръжка за извеждане на параметри на напрежение и ток за CPU AMD Zen, както и разширена информация от сензорите за температура, използвани в CPU Zen и Zen 2.
    • В драйвера nouveau е добавена поддръжка на режим на верифицирано зареждане на фърмуера за GPU NVIDIA, базирани на микроархитектура Turing (GeForce RTX 2000), което позволи включването на поддръжка на 3D ускорение за тези карти (изисква зареждане на официални фърмуери с цифров подпис от NVIDIA). Добавена е поддръжка на графичния двигател TU10x. Решени са проблемите с HD Audio.
    • Добавена е поддръжка за компресия на данни при предаване през DisplayPort MST (Multi-Stream Transport).
    • Добавен е нов драйвер „ath11k“ за безжични чипове Qualcomm с поддръжка на 802.11ax.
      Драйверът е основан на стека mac80211 и поддържа режимите точка за достъп, работна станция и възел на Mesh мрежа.
    • Чрез sysfs е предоставен достъп до четими показания от сензори за температура, използвани в съвременните твърди дискове и SSD.
    • Направени са съществени промени в звуковата система ALSA, насочени към освобождаване на кода от проблема от 2038 година (преминаване от използването на 32-битов тип time_t в интерфейсите snd_pcm_mmap_status и snd_pcm_mmap_control). Добавена е поддръжка на нови звукови кодеци
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Добавени са драйвери за LCD панели Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.
    • Добавена е поддръжка на ARM платформи и платформи Gen1 Amazon Echo (OMAP3630-базирани), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      Tolino Shine 3 eBook четец,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX и HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Добавена поддръжка на PCIe контролер, използван в Raspberry Pi 4.

Одновременно латиноамериканският Фонд за свободен софтуер сформира
вариант напълно свободно ядро 5.6 — Linux-libre 5.6-gnu, очистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чийто обхват е ограничен от производителя. В новото издание е деактивирано зареждането на блобове в драйверите за AMD TEE, ATH11K и Mediatek SCP. Обновен е кодът за почистване на блобовете в драйверите и подистемите на AMD PSP, amdgpu и nouveau.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster