След като работи два месеца, Линус Торвалдс новата версия на ядрото . Сред най-забележителните промени: интеграция на VPN интерфейса WireGuard, поддръжка на USB4, пространства на имената за време, възможност за създаване на обработчици на TCP претоварвания с помощта на BPF, начална поддръжка на MultiPath TCP, освобождаване на ядрото от проблема от 2038 г., механизъм «bootconfig», ФС ZoneFS.
В новата версия са внесени 13702 поправки от 1810 разработчици,
размерът на патча е 40MB (промените засягат 11577 файла, добавени са 610012 реда код,
изтрити 294828 реда). Около 45% от всички представени в 5.6
са свързани с драйвери на устройства, приблизително 15% от промените имат
имат отношение към обновяването на кода, специфичен за хардуерни архитектури, 12%
е свързано с мрежовия стек, 4% — с файловите системи и 3% — с вътрешните
подсистеми на ядрото.
:
- Мрежова подсистема
- реализации на VPN интерфейса , който е реализиран на основата на съвременни методи на криптиране (ChaCha20, Poly1305, Curve25519, BLAKE2s), лесен за използване, без усложнения, е доказал своята ефективност в редица големи внедрявания и осигурява много висока производителност (с 3,9 пъти надминава OpenVPN по пропускна способност). В WireGuard се използва концепцията за маршрутизация по ключове за криптиране, която предвижда свързване на всеки мрежов интерфейс с частен ключ и използване за свързване на публични ключове. Обменът на публични ключове за установяване на връзка става аналогично на SSH. Необходимите за работа на WireGuard криптографски примитиви от библиотеката в състава на стандартния Crypto API и в състава на ядрото .
- интеграция на компоненти, необходими за поддръжка на MPTCP (MultiPath TCP), разширение на TCP протокола за организиране на TCP връзка с доставка на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. За мрежовите приложения подобна агрегирана връзка изглежда като обикновена TCP връзка, а цялата логика за разделяне на потоците се извършва от MPTCP. Multipath TCP може да се използва както за разширяване на пропускателната способност, така и за увеличаване на надеждността. Например, MPTCP може да се прилага за организиране на предаване на данни на смартфон с едновременна употреба на WiFi и 4G или за намаляване на разходите чрез свързване на сървър с използване на няколко евтини връзки вместо един скъп.
- поддръжка на дисциплината на обработка на мрежови опашки sch_ets (, IEEE 802.1Qaz), осигуряваща възможност за разпределение на пропускната способност между различни класове трафик. Ако натоварването на определен клас трафик е под предоставената пропускна способност, ETS позволява на другите класове трафик да използват наличната (неизползвана) пропускна способност. Qdisc sch_ets се настройва като дисциплина PRIO и използва класове трафик за определяне на строги и съвместно използвани ограничения на пропускната способност. ETS работи като комбинация от дисциплини. и — при наличие на строго ограничени класове трафик, се използва PRIO, но ако в опашката на трафика няма, работи като DRR.
- Добавен е нов тип BPF-програми , позволяващ реализиране на обработчици на функции на ядрото чрез BPF. В момента посочената възможност вече може да се използва за реализиране на алгоритми за контрол на натоварването на TCP под формата на BPF-програми. Като пример BPF-програмата с реализация на алгоритма .
- В ядрото са приети , превеждащи инструмента за от ioctl() на използването на . Новият интерфейс опростява добавянето на разширения, подобрява обработката на грешки, позволява изпращане на уведомления при промяна на състоянието, опростява взаимодействието между ядрото и пространството на потребителя и намалява броя на синхронизираните именовани списъци.
- Добавена е реализация на алгоритма за управление на мрежовите опашки 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“.
- В състава на ядрото е приета файловата система , опростяваща нискоуровневата работа с зонирани устройства за съхранение. Под зонирани устройства се разбират устройства на твърди магнитни дискове или 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 е добавен набор от пачове (), при условия на приложение на механизма Retpoline за защита от атаки от клас Spectre V2, позволяващ повишаване на ефективността на извикване на BPF програми при настъпване на свързани с тях събития (например, осигурява възможност за ускоряване на извикването на XDP обработчици при получаване на мрежови пакети).
- Добавен е драйвер за поддръжка на вградените в APU AMD среди TEE (Trusted Execution Environment).
- Памет и системни услуги
- В BPF е добавена поддръжка на глобални функции. Разработката се извършва в рамките на инициатива за добавяне на поддръжка на библиотеки с функции, които могат да се свързват в BPF програмите. Следващата стъпка ще бъде поддръжка на динамични разширения, позволяващи зареждане на глобални функции, включително за замяна на съществуващи глобални функции по време на тяхното използване. В подсистемата BPF също е добавена поддръжка на вариант на операция map (използвана за запазване на постоянни данни), която поддържа изпълнение в пакетен режим.
- устройството «cpu_cooling», което позволява охлаждането на прегрял CPU, като го превключва в режим на покой (idle) за кратки периоди от време.
- Добавен е системен повик , предлагащ набор от допълнителни флагове за ограничаване разрешението на файловия път (забрана на пресечени точки на монтиране, символични линкове, magic линкове (\/proc\/PID\/fd), компоненти «..\/»).
- За хетерогенни системи на базата на архитектурата big.LITTLE, комбиниращи в един чип мощни и по-малко производителни енергийно ефективни ядра CPU, при изпълнение на задачи в реално време е осигурено задаването на параметъра uclamp_min ( в ядрото 5.3 механизъм за закрепване на натоварването). Посоченият параметър гарантира, че задачата ще бъде разположена от планировчика на ядро CPU с достатъчна производителност.
- Ядрото е освободено от . Заменени са последните оставащи обработчици, при които за брояча на епохалното време е използван 32-битов (signed int) тип time_t, който с оглед на отчет от 1970 г. трябва да прелее през 2038 г.
- Продължено е усъвършенстването на интерфейса за асинхронен вход\/изход , в който поддръжка на нови операции: IORING_OP_FALLOCATE (резервиране на празни области), IORING_OP_OPENAT,
IORING_OP_OPENAT2,
IORING_OP_CLOSE (отваряне и затваряне на файлове),
IORING_OP_FILES_UPDATE (добавяне иPrem-непаление на файлове от списъка с често достъпни файлове),
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). - Добавен е системен повик , позволяващо на процеса да извлече от друг процес файлов дескриптор на отворен файл.
- механизмът «bootconfig», който позволява освен опциите на командния ред да определя параметри за работа на ядрото чрез файл с настройки. За добавяне на подобни файлове в образа initramfs е предложен инструмент bootconfig. Посочената възможност може да се използва, например, за настройка на kprobes по време на зареждане.
- механизъм на чакане за запис и четене на данни в неименовани канали (pipe). Промяната ускори изпълнението на задачи, като паралелно компилиране на големи проекти. Въпреки това, оптимизацията може да доведе до състояние на гонка в GNU make поради грешка в версия 4.2.1, която е отстранена в версия 4.3.
- В prctl() е добавен флаг PR_SET_IO_FLUSHER, който може да се използва за маркиране на процеси, ангажирани с освобождаване на памет, за които не трябва да се прилагат ограничения при недостиг на памет в системата.
- На базата на системата за управление на паметта ION, прилагана в Android, е реализирана подсистема , която управлява разпределението на DMA-буфери за споделяне на области от паметта между драйвери, приложения и различни подсистеми.
- Хардуерни архитектури
- Добавена е поддръжка на разширението E0PD, появило се в ARMv8.5 и позволяващо реализиране на защита от атаки, свързани със спекулативно изпълнение на инструкции в CPU. Защитата на базата на E0PD води до по-малки разходи в сравнение с защитата KPTI (Kernel Page Table Isolation).
- За системи на базата на архитектура ARMv8.5 е добавена поддръжка на инструкциите RNG, предоставящи достъп до хардуерния генератор на псевдослучайни числа. В ядрото, инструкцията RNG се използва за генериране на ентропия при инициализацията на генератора на псевдослучайни числа, предоставян от ядрото.
- Премахната е поддръжката на разширенията MPX (Memory Protection Extensions), добавени в ядрото и позволяващи организиране на проверка на указателите за спазване на границите на областите от паметта. Указаната технология не е разпространена в компилаторите и е премахната от GCC.
- За архитектура RISC-V е реализирана поддръжка на инструмента за отстраняване на грешки KASan (Kernel address sanitizer), осигуряваща откриване на грешки при работа с памет.
- Оборудване
- Реализирана е поддръжка на спецификацията , базирана на протокола Thunderbolt 3 и осигуряваща пропускна способност до 40 Гбит/с, запазвайки обратна съвместимост с USB 2.0 и USB 3.2. Подобно на , интерфейсът USB 4.0 позволява тунелиране на различни протоколи през един кабел с конектор , включително 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 (device local memory), подобрено е парсинга на 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).
- Добавен е нов драйвер «» за безжични чипове Qualcomm с поддръжка на 802.11ax.
Драйверът е базиран на стека mac80211 и поддържа режимите точка на достъп, работна станция и възел Mesh мрежа. - През sysfs е предоставен достъп до четими показания от температурни сензори, използвани на съвременни твърди дискове и SSD.
- съществени промени в звуковата система ALSA, насочени към освобождаването на кода от (изход от използването на 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.
Одновременно латиноамерикански Фонд за свободен софтуер
вариант — , премахнато е съдържанието на фирмени фърмуер и драйвери, съдържащи несвободни компоненти или части от код, чиято употреба е ограничена от производителя. В новата версия е забранено зареждането на блобове в драйверите за AMD TEE, ATH11K и Mediatek SCP. Обновен е кодът за почистване на блобове в драйверите и подсистемите AMD PSP, amdgpu и nouveau.
Източник: opennet.ru
