Знайомимося з новим ядром Linux 4

Зміст статті
Найбільшу кількість рядків внесли Даг Ледфорд (Doug Ledford) з Red Hat, який займався в основному чисткою коду (7,7%), Томі Валкейнен (Tomi Valkeinen) з Texas Instruments, який працював над підтримкою субархітектури OMAP (5,3%), три розробники зосередили увагу на драйверах графічних карт AMD: Ерік Хуан (Eric Huang) – 3,3%, Алекс Дойхер (Alex Deucher) – 2,4% та yanyang1 – 1,6%. Лідери по чейнджсетах - Лінус Валлей (Linus Walleij) з Linaro, який реалізував безліч низькорівневих змін, у тому числі до GPIO (2,0%), Арнд Вергман (Arnd Bergmann), який проробив велику роботу для підтримки ARM (1,9%). ), і Лео Кім (Leo Kim), який займався драйвером wilc1000 (1,7%). Як і раніше, багато корпорацій зацікавлені у розвитку ядра. Роботу над версією 4.5 підтримало понад 200 компаній, серед яких Red Hat, Intel, AMD, Texas Instruments, Linaro, Linux Foundation, Samsung, IBM, Google. Більшість з них розвивають підтримку своїх пристроїв та пов'язаних підсистем та інструментів, але, наприклад, Google традиційно вносить дуже багато змін до мережевої підсистеми Linux.

Ядро та драйвери
Продовжилося перенесення складного та погано підтримуваного коду, написаного на асемблері (x86/asm) на С, розпочатий ще в 4.0. Тепер ядро можна збирати з параметром -fsanitize=undefined. Сам параметр з'явився два роки тому в GCC 4.9+ та активує налагоджувальний режим UBSan (Undefined Behavior Sanitizer), який детектує невизначену поведінку, властиву мовам C та C++: використання нестатичних змінних до ініціалізації, поділ на нуль, цілісне переповнення тощо. Компілятор зазвичай припускає, що такі операції ніколи невідбудуться, а у разі настання результат може бути будь-яким і залежить від самого компілятора. Тепер компілятор виявляє такі ситуації, видає runtime error: (можна відключити -fno-sanitize-recover) і продовжує виконання.

У драйвер AMDGPU додана експериментальна підтримка технології динамічного керування живленням PowerPlay, що дозволяє підвищити продуктивність GPU для GPU Tonga та Fiji та інтегрованих Carrizo та Stoney. У режимі PowerPlay GPU запускається в режимі низького споживання енергії, але у разі зростання навантаження на графічну підсистему автоматично збільшує частоту. За промовчанням PowerPlay вимкнено, для включення слід передати ядру параметр amdgpu.powerplay=1 .
Нова версія Media controller API розширює підтримку пристроїв Video4Linux та дозволяє використовувати функціональність мультимедіаконтролера в інших підсистемах, таких як DVB, ALSA та IIO.
У KVM (Kernel-Based Virtual Machine) багато зроблено для підтримки архітектури s390 (тепер вона може використовувати до 248 vCPU), ARM/ARM64 та покращення роботи x86 у Hyper-V.
Установка ядра 4.5 в Ubuntu
Найпростіший спосіб познайомитися з новим ядром – використовувати збірку від Ubuntu Kernel Team. Після всебічного тестування нове ядро потрапляє в ppa:canonical-kernel-team/ppa, але зазвичай на це йде час.
Після перезавантаження можемо працювати.
Підтримка ARM
ARM-комп'ютери використовуються як міні-сервери під певні завдання або як контролери автоматизації, що робить їх дуже популярними і затребуваними. ARM-спільнота Linux за останні п'ять років перетворилася на одну з найактивніших, провівши колосальну роботу з підтримки 32-розрядних ARM-платформ, що займаютьсерйозну частку ринку, і це робота загалом завершилася до виходу гілки 4.5. Раніше для кожного ARM-пристрою необхідно було зібрати власне ядро, яке забезпечує підтримку лише певних пристроїв. Але проблема в тому, що пристрої ставали складнішими, з'явилася можливість зміни конфігурації, та й самі користувачі на ARM-пристроях хотіли використовувати без зайвих рухів тіла звичайні дистрибутиви. Але в результаті ми мали кілька сотень варіантів збирання ядра, що дуже ускладнює використання Linux.
Результатом очищення та рефакторингу великої кількості коду стало можливим включення до ядра коду підтримки ARMv6 та ARMv7, тобто тепер можемо зібрати універсальне ядро, здатне завантажуватись на обох системах. Тут, напевно, треба згадати і про специфікації Device Tree, що просувається останнім часом, що виникла як частина розробок Open Firmware. Device Tree дозволяє конфігурувати обладнання під час завантаження за допомогою спеціальних dts-файлів, що зберігаються в /boot/dtbs, та змінювати установки без перескладання ядра. Використання Device Tree стає обов'язковим для всіх нових розробок ARM, а не лише пристроїв. Все це разом дає впевненість, що дистрибутиви Linux у майбутньому можна буде спокійно запускати на будь-якому пристрої ARM. Паралельно Грег Кроу-Хартман (Greg Kroah-Hartman) із Linux Foundation випустив патч, що реалізує таку можливість для ранніх версій ядра. В arch/arm64 знайдемо код, який забезпечує підтримку нової 64-бітної архітектури ARM (ARMv8). Додано нові функції для всіх популярних архітектур ARM - Allwinner, Amlogic, Samsung, Qualcomm та підтримка нових ARM-плат різних розробників.
Системні сервіси
Для доступу до даних прошивок UEFI (Unified Extensible Firmware Interface) у Linux використовується спеціальнапсевдофайлова система efivars (налаштовується EFIVAR_FS), яка монтується в /sys/firmware/efi/efivars. У деяких реалізаціях при виконанні команди rm -rf /* видалявся вміст цього каталогу, що призводило до руйнування прошивки. Компанії - розробники пристроїв не вважають це серйозним недоліком, адже ситуація, звичайно, не найпоширеніша, та й навряд чи якомусь користувачеві спаде на думку це перевірити. Тим не менш, проблема є, і письменники вірусів цілком реально можуть скористатися такою можливістю. Тепер в ядрі 4.5 додано спеціальний захист каталогу /sys/firmware/efi/efivars , що не дозволяє видаляти файли всередині.