Излезе ядрото Linux 5.10 LTS – нововъведения и промени

9
1161

След два месеца разработване Линус Торвалдс представи ядрото Linux 5.10 TLS. Версията 5.10 е с дълъг срок на поддръжка (LTS), обновяванията за която ще излизат в продължение на не по-малко от две години. Сред най-значителните нововъведения са: поддръжката на механизма за защита MemTag за ARM64 системите, опцията за монтиране nosymfollow, значителни оптимизации на файловата система Ext4, решението на проблема с 2038 година в XFS, добавянето на новото системно извикване process_madvise, разширената поддръжка на AMD SEV с криптиране регистрите на централния процесор, възможност за спиране изпълнението на BPF програмите и други.

В новата версия са направени 17 470 промени от 2 062 разработчика. Размерът на ъпдейта е  64MB, като промените са засегнали 15 101 файла (добавени са 891 932 реда сорс-код, премахнати са 619 716 реда). Около 42% от всички представени в новия Linux Kernel са свързани с драйверите на различни устройства, около 16% от промените имат отношения към обновяването на кода специфичен за някои хардуерни архитектури, 13% е свързан с мрежовия стек, 3% с файловите системи и 3% с вътрешните подсистеми на Linux ядрото.

Основни нововъведения и промени в Linux 5.10 TLS

Дискова подсистема, вход изход и файлови системи
  • Във файловата система ext4 е добавен режим за бързи комити (fast_commit), който значително намалява латентносттите при извършване на голям брой операции с файлове, което става чрез по-бързото освобождаване от метаданните на диска при изпълнението на извикването  fsync(). В стандартни условия при изпълняването на  fsync() се осъществява синхрон на излишните комплекти метаданни. В режима fast_commit в журнала се прехвърлят единствено метаданните, необходими за възстановяване на файловата система в случай на краш, което ускорява fsync() извикванията и повишава производителността на операциите, които активно манипулират с метаданни.

Новият режим се включва по време на създаването на файловата система с помощта на помощната програма mkfs. Съчетан с направените оптимизации в буферирането на записването и презаписването на данни, се отбелязва съществено увеличаване на производителността при натоварвания, свързани с паралелното извършване на многобройни операции за запис на информация. Така например, на компютърна система с 96 логически процесорни ядра се наблюдава повишаване скоростта на преминаване на теста fio.write_iops със сериозните 330,6%.

  • В реализацията на файловата система Btrfs са направени съществени оптимизации на производителността, свързани с изпълнението на операцията fsync(). Намаляването на конкуренцията на мютексите при логовете е довело до увеличаване на пропускателната способност с 4% и намаляване на латентността с 14% в теста dbench с 32 клиента. Отхвърлянето на различните комити за препратките и използваното преименуване е увеличило пропускателната способност с 6% и е намалило латентностите с цели 30%. Ограничаването на изчакването на fsync единствено за операциите за обратен запис е повишило пропускателната способност с от 10 до 40%.

Освен това, реализирането на директния вход/изход (direct io) в Btrfs е прехвърлено към инфраструктурата iomap. Добавени са нови sysfs параметри с информация за статута на ексклузивните операции с файловете система – балансиране, добавяне или замяна на устройства и други.

  • В XFS са добавени промени в метаданните inode, решаващи проблемите с препълването на 32-битовия тип данни time_t за годините след 2038-ма. Променен е и кодът за пресмятането на времето на дисковите квоти
  • Във файловата система ZoneFS е добавена опцията за монтиране „-o explicit-open“, при използването на която отварянето на файла за запис води до активирането на асоциирана зона в устройството. По този начин се гарантира, че успешното отваряне на подобна зона гарантира успешното изпълнение на операцията за запис на информация
  • Предложена е новата опция за монтиране „nosymfollow“, забраняваща обработването на символни препратки при определение на пътищата, но без да се пречи на приложенията да използват readlink() за самостоятелното разкриване на подобни символни линкове
Памет и системни услуги
  • Добавено е системното извикване process_madvise(), даващо възможност на един процес да извърши системното извикване madvise() от името на друг процес. С помощта на madvise() е възможно информирането на ядрото за особеностите на работа с паметта, с което се постига оптимизация на управлението на паметта на процесите. Така например, на базата на тази информация ядрото може да инициира освобождение на допълнителна свободна памет. Извикването на madvise() от друг процес е необходимо за платформите, включително и Android, в които информацията, необходима за оптимизация е неизвестна на текущия процес и се координира с помощта на отделен фонов управляващ процес (ActivityManagerService в Android), който може да инициира и вземане на неизползваната, но заеманата от другите процеси памет
  • В интерфейса за асинхронния вход/изход io_uring е добавена възможност за създаването на ограничени ring области (restricted rings), които могат съвместно и безопасно да се използват с процес, незаслужаваш доверие. Тази възможност позволява на базовото приложение по избор да ограничава достъпа само до отделни свои файлове дескриптори за тяхното използване в други приложения чрез io_uring
  • Реализирана е възможност за спиране изпълнението на BPF програмите чрез прехвърлянето на тези програми в режим на хибернация
  • За MIPS архитектурата е реализирана поддръжката на зареждането на Linux ядрото, компресирано с помощта на ZSTD алгоритъма
  • За RISC-V архитектурата е добавена поддръжка на зареждането системи с EFI фърмуер
Виртуализация и безопасност
  • Добавена е поддръжката на анклавите Nitro Enclave (NE), предложени в Amazon Elastic Compute Cloud (EC2) за обработката на конфиденциални данни във виртуалните машини
  • Добавена е и поддръжката на технологията AMD SEV (secure encrypted virtualization), която на хардуерно ниво осигурява прозрачно криптиране паметта на виртуалните машини, при които достъп до декриптираните данни има единствено текущата система гост, а останалите виртуални машини и хипервайзора при опит за четене от тази памет получават криптирани данни. В новата версия на ядрото освен криптирането на паметта е реализирана и възможност за криптиране на регистрите на процесора, използвани в системата гост
  • От подсистемата за криптиране е премахната реализацията на  KerberosV алгоритъма RC4-HMAC-MD5, кодът на който преди време бе добавен за съвместимост с операционните системи Windows NT/2000, обновяванията за които бяха прекратени през 2008 година
  • В IOMMU е включена възможността за блокиране на ACS (Access Control Services) транслациите за външни PCI устройства, като по този начин е изградена защитата от атаките чрез директен достъп до паметта с използването на вредоносни PCI устройства
  • Добавена е поддръжката на криптографските хешове SM2, които са стандарт за китайските учреждения
  • Реализирана е емулацията на инструкциите SLDT и STR, като по този начин се решава проблема с краха на някои Windows приложения във Wine среда при компютърни системи с включена UMIP (User-Mode Instruction Prevention) защита, която на ниво CPU забранява изпълнението на процесорните инструкции SGDT, SLDT, SIDT, SMSW и STR в пространството на потребителя, понеже те могат да се използват при атаки, които имат за цел повишаване на правата в системата
  • Добавена е поддръжката за зареждане на сертификатите MOK (Machine Owner Key) от EFI таблиците
Мрежова подсистема
  • За BPF програмите е предоставена възможност за промяна и анализ на опциите в заглавията на TCP мрежовите пакети
  • Продължава интеграцията на MPTCP (MultiPath TCP) в Linux ядрото – разширението на TCP протокола за организацията на TCP връзки с доставката на мрежови пакети едновременно по няколко маршрута чрез различни мрежови интерфейси с различни IP адреси
  • Добавена е възможност за използване на протоколите IGMPv3 и MLDv2 в режим Source-Specific Multicast (RFC 4604)
  • Разрешено е създаването на над 255 IPv4 интерфейса в multicast режим
  • В безжичния стек mac80211 е добавена поддръжката на сканирането за достъпни услуги в диапазона от 6 GHz. Вече се поддържа технологията за бърза настройка на FILS (Fast Initial Link Setup) връзките, с което изчезват латентностите при роуминг с мигриране от една точка към друга
  • В NetFilter е добавена поддръжката на ingress последователности, даващи възможност за филтриране на IPv4 и IPv6 мрежовите пакети на едно и също ниво, както и ingress манипулатора в netdev (hook ingress) веригите – тоест, когато драйверът подава съответния пакет на мрежовия стек на ядрото
Хардуер
  • В DRM драйвера i915 за видео картите на Intel е преработен кода за работа с блокиранията в GEM. Разширена е поддръжката на чиповете на базата на архитектурата Rocket Lake. Започнала е подготовката за реализация поддръжката на чиповете Alder Lake. Подобрена е поддръжката за извеждане на информация чрез Type-C и DisplayPort в системите с Tiger Lake (Gen12). За външните видеокарти Intel DG1 е реализирана поддръжката на извеждане на звук чрез HDMI
  • В драйвера amdgpu продължава работата върху реализацията на поддръжката на графичните процесори AMD Navi 21 (Navy Flounder) и Navi 22 (Sienna Cichlid)
  • За AMD Zen 3 чиповете в драйвера k10temp е реализирана поддръжката на мониторинг на температурата
  • Добавян е драйверът mgag200 за поддръжка на графичните карти Matrox G200
  • В драйвера panfrost е добавена поддръжката на GPU ARM Bifrost (Mali G3x, G5x, G7x)
  • Добавена е поддръжката и на преходниците Lontium LT9611 DSI/HDMI, Toshiba TC358775 DSI/LVDS, Toshiba TC358762 DSI/DPI и Cadence DPI/DP
  • Добавен е нов API за достъп до GPIO от потребителското пространство
  • Добавена е поддръжката на звуковите карти Creative Labs SoundBlaster AE-7, както и на звуковите кодеци MediaTek MT6359 и Cirrus Logic CS4234
  • В драйвера vc4 е добавена поддръжката на графичната подсистема на едноплатковите компютри Pi 4 (BCM2711)
  • Добавена е поддръжката на игровите контролери Nintendo Switch като Switch Joy-Cons и Switch Pro при тяхното включване както чрез USB, така и чрез Wi-Fi
  • Добавена е поддръжката на следните ARM платки, устройства и платформи: Librem 5, NVIDIA Tegra234 (Orin), Hisilicon SD5203 (ARM926EJ-S), Cisco Meraki MR32 (BCM53016), BCM2711 (RPi4), Caninos Loucos Labrador, RoseapplePi, Allwinner A100, Libretch S905x CC V2, Hardkernel ODROID-N2+, Wistron Mowgli, Facebook Wedge400, Tolino Shine 2 HD, NanoPi R2S, Rockchip A95X-Z2, Odyssey, Toshiba Visconti и TPMV7708

Едновременно с излизането на ядрото Linux 5.10 TLS, латиноамериканската фондация за отворен код и свободен софтуер, сформира версия на новото Линукс ядро с изцяло отворен и свободен код. Това е версията Linux-libre 5.10-gnu, изчистена от каквито и да било елементи на фърмуери, блобове и драйвери, съдържащи несвободни компоненти или участъци от код, областта на приложение на който е ограничена от производителя. В новата версия на ядрото е добавена поддръжката на появилите се нови примитиви за зареждане на фърмуери. Добавена е поддръжката за проверка наличието на сорс кодове на BPF код, вече подготвен за компилиране. Обновен е кодът за изчистването на блобовете в драйверите и подсистемите на amdgpu, Intel i915, bluetooth hci, IMX SDMA, MLXSW Spectrum, Intel iwlwifi, Qualcomm ath11k, Broadcom STM DPFE, Intel Haswell и HiFi2. Предотвратено е зареждането на блогове в новите драйвери за Cadence MHDP8546 DPI/DP и Marvell Prestera. Изключени са новите блобове в портовете qcom aarch64.

5 5 гласа
Оценете статията
Абонирай се
Извести ме за
guest
9 Коментара
стари
нови оценка
Отзиви
Всички коментари