Какво ново предлага Linux ядрото версия 5.2
След два месеца разработване Линус Торвалдс представи Linux Kernel 5.2. Сред най-важните промени в новото Linux ядро можем да изброим режимът на работа на файловата система Ext4 без да се отчитат главните и малките букви, отделените системни извиквания за монтиране на файлова система, драйверите за GPU Mali 4xx/ 6xx/7xx, възможността за обработване измененията значението на sysctl в BPF програмите, device-mapper модула dm-dust, защитата от MDS атаките, поддръжката на Sound Open Firmware за DSP, оптимизираната производителност на BFQ, възможността за използването на PSI (Pressure Stall Information) в ОС Android и други.
В новата версия на Linux ядрото са направени 15100 промени на сорс кода, извършени от 1882 разработчика. Размерът на пача е 62 MB: промените са засегнали 30889 файла, добавени са нови 625094 реда сорс код, премахнати са 531864 реда код. Около 45% от всички представени в Linux Kernel 5.2 промени са свързани с драйверите за различните устройства, около 21% са промените за специфичен хардуер и нови архитектури, 12% са свързани с мрежовия стек, 3% – с файловите системи и още 3% – с вътрешните подсистеми на ядрото. 12,4% от всички промени са извършени от Intel, 6.3% – Red Hat, 5.4% – Google, 4.0% – AMD, 3.1% – SUSE, 3% – IBM, 2.7% – Huawei, 2.7% – Linaro, 2.2% – ARM, 1.6% – Oracle.
Основните нововъведения в Linux ядрото версия 5.2
Дискова подсистема, вход/изход, файлови системи:
- За Ext4 е добавена поддръжката на работа без значение регистъра на символите в имената на файловете. Тази опция може да се активира само при празните папки, понеже няма как в една из съща папка да бъдат разпознати двата режима на работа – с разпознаване и без разпознаване на главните и малките букви. Активирането на новия режим става с атрибута „+F“ (EXT4_CASEFOLD_FL). В този режим, системата не се съобразява с регистъра: файловете Test.txt, test.txt и test.TXT се считат за еднакви в тези папки. По подразбиране файловата система се съобразява с горния и долния регистър на символите, с изключение на папките, маркирани с атрибута „chattr +F“
- Унифицирани са функциите за обработка на UTF-8 символите в имената на файловете и новите функции вече се използват за търсене и нормализиране на низовете
- В XFS е добавена необходимата инфраструктура за мониторинг състоянието на файловата система и нов ioctl за запитване на статуса за работоспособност. Реализирана е експерименталната проверка в реално време на броячите на суперблоковете
- В device-mapper е добавен новия модул „dm-dust“, който може да симулира появата на лоши дискови блокове или грешки при четене на диска. Модулът значително опростява настройката и тестването на приложенията и системите за съхранение на информация, за поява на сривове
- Значително е оптимизирана производителността на входно/изходните операции. При високо I/O натоварване извършените оптимизации до 80% намаляват операциите, като например времето за стартиране на приложения
- Добавена е нова серия системни извиквания за монтиране на файлови системи: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() и move_mount(). Тези системни извиквания дават възможност за отделна обработка на различните стадии на монтирането – обработване на суперблока, получаване на информация за файловата система, създаване на точка на монтиране и т.н. Разделените извиквания дават възможност за извършването на по-сложни сценарии на монтиране, които досега се извършваха единствено чрез системното извикване mount(). Става възможно отделното изпълнение на операции като пренастройване на суперблок, включване на опции, промяна на точката на монтиране и миграция към друго пространство на имената
- В подсистемата FUSE е предложен нов API за управление на кеширането на данните
Виртуализация и безопасност
- Премахнати са областите в ядрото, допускащи изпълнението на код от достъпните за запис така наречени отразени области на паметта. По този начин се блокират бъдещи потенциални недоглеждания, които биха могли да се използват за атака
- Добавен е новия параметър за стартиране на Linux ядрото „mitigations=“, който е опростен начин за включването и изключването на различните защити срещу хардуерните уязвимости в процесорите на Intel. Използването на параметъра „mitigations=off“ изключва всички налични методи за защита от хардуерните уязвимости. Използваният по подразбиране режим „mitigations=auto“ включва защитите и не влияе на използването на Hyper Threading. Режимът „mitigations=auto,nosmt“ изключва и Hyper Threading
- В Kconfig е добавена отделната секция „kernel hardening“ с опция за засилена защита на ядрото. Засега в новата секция са събрани само опциите за включване проверките на GCC плъгините
- За PowerPC архитектурата е реализирана поддръжката на хардуерните механизми за ограничаване на нежелателните пътища за достъп до ядрото от потребителското пространство
- Добавен е код за блокирането на атаките от клас MDS (Microarchitectural Data Sampling) за процесорите на Intel. Предлагат се два режима на защита: пълен, изискващ нов микрокод, и непълен, който не гарантира пълното изчистване на буферите на процесора. Управлението на тази защита става чрез параметъра „mds=“, който може да има значения „full“, „full,nosmt“ (с изключване на Hyper-Threads) и „off“
Мрежова подсистема
- Добавена е поддръжката на IPv6 шлюзове за IPv4 маршрутите. Така например, възможно е да се указват правила за маршрутизация от типа „ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0“;
- За ICMPv6 са реализирани ioctl извикванията icmp_echo_ignore_anycast и icmp_echo_ignore_multicast за игнориране на ICMP ECHO за anycast и multicast адресите. Добавена е възможност за ограничаване интензивността на обработката на ICMPv6 пакетите
- Добавена е възможност за прикачването на Foo-Over-UDP тунелите към определен адрес, мрежови интерфейс или сокет (досега това ставаше само чрез обща маска)
- В безжичния стек е добавена възможност за реализиране обработването на OWE (Opportunistic Wireless Encryption) в потребителското пространство
Памет и системни процеси
- Във втората версия на cgroups е добавена функционалността freezer, с помощта на която може да бъде спряна работата в cgroup и временно да бъдат освободени някои системни ресурси (процесор, вход/изход и потенциално и памет). Управлението се осъществява чрез управляващите файлове cgroup.freeze и cgroup.events в cgroup дървото
- Довършена е работата по подсистемата PSI (Pressure Stall Information), която дава възможност за точен анализ и информация за времето, което трябва да измине за получаването на системен ресурс (CPU, памет, I/O). С помощта на PSI съвсем точно може да се определи забавянето на системата и каква е причината за забавянето, В новата версия е възможна настройка на прага на чувствителността на времената. Тази опция дава възможност в ОС Android на съвсем ранен стадий да се определи недостига на паметта, да се определи източника на проблемите и временно да се забави работата на приложенията, които не са особено важни за потребителя. По този начин проблемът се решава, преди потребителят да е забелязал промяна в работата на Android устройството. При стрес тестовете, новата система за мониторинг на паметта показва 10 пъти по-малко фалшиви данни в сравнение със статистиката на предишната vmpressure
- Оптимизиран е кодът за проверка на BPF програмите, който сега при големите програми работи 20 пъти по-бързо. Оптимизацията е дала възможност да се вдигне лимита ма размера на BPF програмите от 4096 на един милион инструкции
- За MIPS32 архитектурата е реализиран JIT компилатор за виртуалната машина eBPF
- За 32-битовата архитектура PowerPC е добавена поддръжката на инструмента KASan (Kernel address sanitizer), с който се откриват грешките при работа с паметта
- За архитектурата PA-RISC е добавена поддръжката на дебъгера на ядрото KGDB
Хардуер
- В новото Linux ядро е включен драйвера Lima за графичните процесори Mali 400/450, използван в редица стари ARM чипове. За по-новите интегрирани графични ускорители Mali е добавен драйвера Panfrost, поддържащ чиповете с архитектура Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) и Bifrost (Mali G3x, G5x, G7x)
- Добавена е поддръжката на звукови устройства, използващи отворените фърмуери Sound Open Firmware (SOF). Въпреки наличието на отворени драйвери, кодът на фърмуерите за звуковите чипове и досега е закрит и се предоставя във вид на двоични файлове. Проектът Sound Open Firmware бе иницииран от Intel и има за цел създаването на отворени фърмуери за DSP чиповете, свързани с обработването на звук (по-късно към проекта се присъедини Google). Към днешен ден в рамките на този проект се предлагат отворени фърмуери за звуковите чипове на платформите Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake и IceLake
- В DRM драйвера за Intel (i915) е добавена поддръжката на чиповете Elkhartlake (Gen11). Добавени са PCI идентификатори за чиповете Comet Lake (Gen9). Включен е режим за асинхронно превключване между буферите и видео паметта (async flip) при извършване на запис чрез mmio. По този начин значително е увеличена производителността при някои 3D алгоритми. Така например, в 3DMark Ice Storm теста производителността скача с 300-400%. Добавена е поддръжката на технологията HDCP2.2 (High-bandwidth Digital Content Protection) за криптиране на видеосигнала, преминаващ през HDMI
- В драйвера Nouveau е добавена поддръжката на дънните платки, базирани на чипсета NVIDIA Turing 117 (TU117, използва се в GeForce GTX 1650). В kconfig е добавена допълнителна настройка за изключване на остарелите функции, които вече не се използват в актуалните версии на libdrm
- В API DRM и драйвера amdgpu е добавена поддръжката на timeline обектите за синхронизация, която дава възможност да не се използват бавните класически блокировки
- В драйвера amdgpuн за графичния процесор Vega20 е добавена поддръжката на RAS (Reliability, Availability, Serviceability), както и експерименталната поддръжка на подсистемата SMU 11, заменила предишната технология Powerplay. За GPU Vega12 е добавена поддръжката на режима BACO (Bus Active, Chip Of). Добавена е и поддръжката на XGMI и новата високоскоростна шина PCIe 4.0 за графиката
- Добавен е драйвера aspeed за GFX на системата върху чипа ASPEED
- Добавена е поддръжката на ARM системите върху чипа и платките Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, ,Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510, ST Micro (stm32mp157a, stm32mp157c), NXP ( Eckelmann ci4x10 (i.MX6DL), i.MX8MM EVK (i.MX8MM), ZII i.MX7 RPU2 (i.MX7), ZII SPB4 (VF610), Zii Ultra (i.MX8M), TQ TQMa7S (i.MX7Solo), TQ TQMa7D (i.MX7Dual), Kobo Aura (i.MX50), Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).
Едновременно с това Латиноамериканската фондация за свободен софтуер формира версия на изцяло свободно Linux Kernel 5.2 ядро. Това е ядрото Linux-libre 5.2-gnu, изцяло изчистено от компоненти на фърмуери и драйвери, съдържащи несвободни елементи или участъци код, използването на които по някакъв начин е ограничено от производителя. В новата версия са включени файловете на Sound Open Firmware. Изключена е възможността за зареждането на блобове в драйверите mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp и ucsi_ccg. Обновен е кодът за изчистване от блобове в дфрайверите и подсистемите на ixp4xx, imx-sdma, amdgpu, nouveau и goya, както и от документацията към микрокодовете. Премахнат е r8822be драйвера.