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

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

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

Основната иновации:

  • Мрежова подсистема
    • Добавено от внедряване на VPN интерфейс WireGuard, който е внедрен въз основа на съвременни методи за криптиране (ChaCha20, Poly1305, Curve25519, BLAKE2s), е лесен за използване, без усложнения, доказал се е в редица големи реализации и осигурява много висока производителност (3,9 пъти по-бързо от OpenVPN по отношение пропускателна способност). WireGuard използва концепцията за маршрутизиране на ключове за криптиране, което включва прикачване на частен ключ към всеки мрежов интерфейс и използването му за обвързване на публичните ключове. Публичните ключове се обменят за установяване на връзка по начин, подобен на SSH. Криптографски примитиви, необходими за работа на WireGuard бяха пренесени от библиотеката цинк като част от стандартния Crypto API и включени в сърцевината 5.5.
    • Започната интегриране на компоненти, необходими за поддържане на 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_PROG_TYPE_STRUCT_OPS, което ви позволява да внедрите манипулатори на функции на ядрото чрез BPF. Понастоящем тази функция вече може да се използва за прилагане на TCP алгоритми за контрол на задръстванията под формата на BPF програми. Като пример предложено BPF програма с реализация на алгоритъм DCTCP.
    • Приет в ядрото промени, инструменти за превод ет с ioctl() за използване netlink интерфейс. Новият интерфейс улеснява добавянето на разширения, подобрява обработката на грешки, позволява да се изпращат известия при промяна на състоянието, опростява взаимодействието между ядрото и потребителското пространство и намалява броя на именуваните списъци, които трябва да бъдат синхронизирани.
    • Добавена реализация на алгоритъма за управление на мрежови опашки FQ-PIE (Flow Queue PIE), насочен към намаляване на отрицателното въздействие на междинното буфериране на пакети върху крайното мрежово оборудване (bufferbloat). FQ-PIE демонстрира висока ефективност при използване в системи с кабелни модеми.
  • Дискова подсистема, I/O и файлови системи
    • За файлова система Btrfs добави асинхронна реализация на операцията DISCARD (маркиране на освободени блокове, които вече не трябва да се съхраняват физически). Първоначално операциите DISCARD се изпълняваха синхронно, което можеше да доведе до влошаване на производителността, поради това, че устройствата чакат изпълнението на съответните команди. Асинхронното внедряване ви позволява да не чакате устройството да завърши ИЗХВЪРЛЯНЕ и да извършите тази операция във фонов режим.
    • В XFS извършено Почистване на код, който използва стари 32-битови броячи на време (типът time_t беше заменен с time64_t), което доведе до проблема 2038. Коригирани грешки и повреда на паметта, възникнали на 32-битови платформи. Кодът е преработен, за да работи с разширени атрибути.
    • Към файловата система ext4 въведени Оптимизации на производителността, свързани с обработката на заключването на inode по време на операции за четене и запис. Подобрена производителност при пренаписване в режим Direct I/O. За да се опрости диагностицирането на проблеми, първият и последният код за грешка се съхраняват в суперблока.
    • Във файловата система F2FS изпълнени възможност за съхраняване на данни в компресиран вид. За отделен файл или директория, компресията може да бъде активирана с помощта на командата "chattr +c файл" или "chattr +c dir; докоснете директория/файл". За да компресирате целия дял, можете да използвате опцията „-o compress_extension=ext“ в помощната програма за монтиране.
    • Ядрото включва файлова система ZoneFS, което опростява работата на ниско ниво със зонирани устройства за съхранение. Зонираните устройства означават устройства на твърди магнитни дискове или NVMe SSD, пространството за съхранение в които е разделено на зони, които съставляват групи от блокове или сектори, в които е разрешено само последователно добавяне на данни, актуализирайки цялата група от блокове. FS ZoneFS е разработен от Western Digital и свързва всяка зона в устройството с отделен файл, който може да се използва за съхраняване на данни в необработен режим без манипулиране на ниво сектор и блок, т.е. Позволява на приложенията да използват файловия API вместо директен достъп до блоковото устройство с помощта на ioctl.
    • В NFS монтирането на дялове през UDP е деактивирано по подразбиране. Добавена е поддръжка за възможността за директно копиране на файлове между сървъри, дефинирани в спецификацията на NFS 4.2. Добавена е нова опция за монтиране „softreval“, която позволява да се използват кеширани стойности на атрибути в случай на повреда на сървъра. Например, когато зададете тази опция, след като сървърът е недостъпен, остава възможно да се движите по пътищата в NFS дяла и да получите достъп до информация, която се е установила в кеша.
    • Проведено оптимизиране на производителността на механизма fs-verity, използван за наблюдение на целостта и удостоверяването на отделни файлове. Повишена скорост на последователно четене благодарение на използването на хеш дърво на Merkle. Производителността на FS_IOC_ENABLE_VERITY е оптимизирана, когато няма данни в кеша (приложено е предварително четене на страници с данни).
  • Виртуализация и сигурност
    • Възможността за деактивиране на модула SELinux по време на работа е отхвърлена и разтоварването на вече активиран SELinux ще бъде забранено в бъдеще. За да деактивирате SELinux, ще трябва да подадете параметъра "selinux=0" в командния ред на ядрото.
    • Добавено от поддръжка за пространства от имена за време (времеви пространства от имена), което ви позволява да свържете състоянието на системния часовник към контейнера (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), използвайте собственото си време в контейнера и, когато мигрирате контейнера към друг хост, уверете се, че показанията CLOCK_MONOTONIC и CLOCK_BOOTTIME остават непроменени (вземете предвид времето след зареждането, със или без отчитане на режим на заспиване ).

    • Блокиращият пул /dev/random е премахнат. Поведението на /dev/random е подобно на /dev/urandom по отношение на предотвратяването на блокиране на ентропията след инициализация на пула.
    • Ядрото на ядрото включва драйвер, който позволява на системите за гости, работещи с VirtualBox, да монтират директории, експортирани от хост средата (споделена папка на VirtualBox).
    • Към подсистемата BPF е добавен набор от корекции (БНФ диспечер), когато използвате механизма Retpoline за защита срещу атаки от клас Spectre V2, той ви позволява да увеличите ефективността на извикване на BPF програми, когато възникнат събития, свързани с тях (например, прави възможно да се ускори извикването на XDP манипулатори, когато пристига мрежов пакет).
    • Добавен драйвер за поддръжка на TEE (Trusted Execution Environment), вграден в AMD APU.
  • Памет и системни услуги
    • BPF добави поддръжка за глобални функции. Разработката се извършва като част от инициатива за добавяне на поддръжка за библиотеки от функции, които могат да бъдат включени в програмите на BPF. Следващата стъпка ще бъде да се поддържат динамични разширения, които позволяват зареждане на глобални функции, включително замяна на съществуващи глобални функции, докато се използват. Подсистемата BPF също така добавя поддръжка за вариант на операцията с карта (използвана за съхраняване на постоянни данни), която поддържа изпълнение в пакетен режим.
    • Добавен Устройството “cpu_cooling” ви позволява да охладите прегрял процесор, като го поставите в неактивно състояние за кратки периоди от време.
    • Добавено системно повикване openat2(), който предлага набор от допълнителни флагове за ограничаване на разделителната способност на файловия път (забрана за пресичане на точки на монтиране, символни връзки, магически връзки (/proc/PID/fd), компоненти „../”).
    • За хетерогенни системи, базирани на архитектурата big.LITTLE, комбиниращи мощни и по-малко ефективни енергийно ефективни CPU ядра в един чип, параметърът uclamp_min се задава при изпълнение на задачи в реално време (се появи в ядрото 5.3 има механизъм за осигуряване на натоварването). Този параметър гарантира, че задачата ще бъде поставена от планировчика на процесорно ядро, което има достатъчна производителност.
    • Ядрото е освободено от проблеми от 2038 г. Замениха последните останали манипулатори, които използваха 32-битовия (подписан int) тип time_t за епохален времеви брояч, който, като се вземе предвид докладът от 1970 г., трябва да препълни през 2038 г.
    • Продължаващо подобряване на асинхронния I/O интерфейс 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 по време на зареждане.
    • Преработен механизъм за изчакване на запис и четене на данни в неименувани канали. Промяната направи възможно ускоряването на задачи като паралелно сглобяване на големи проекти. Оптимизацията обаче може да доведе до състояние на състезание в GNU make поради грешка във версия 4.2.1, която беше коригирана във версия 4.3.
    • Добавен е флагът PR_SET_IO_FLUSHER към prctl(), който може да се използва за маркиране на процеси без памет, които не трябва да подлежат на ограничения, когато паметта на системата е недостатъчна.
    • Въз основа на системата за разпределение на паметта ION, използвана в Android, е внедрена подсистема dma-buf купчини, което ви позволява да контролирате разпределението на DMA буфери за споделяне на области на паметта между драйвери, приложения и различни подсистеми.
  • Хардуерни архитектури
    • Добавена е поддръжка за разширението E0PD, което се появи в ARMv8.5 и позволява защита срещу атаки, свързани със спекулативно изпълнение на инструкции на процесора. Защитата, базирана на E0PD, води до по-ниски разходи в сравнение с KPTI (изолиране на таблица на ядрото) защита.
    • За системи, базирани на архитектура ARMv8.5, е добавена поддръжка за RNG инструкция, осигуряваща достъп до хардуерен генератор на псевдослучайни числа. В ядрото инструкцията RNG се използва за генериране на ентропия при инициализиране на осигурения от ядрото генератор на псевдослучайни числа.
    • Премахната поддръжка за MPX (разширения за защита на паметта), добавена в ядрото 3.19 и ви позволява да организирате проверка на указатели, за да сте сигурни, че границите на областите на паметта се спазват. Тази технология не беше широко използвана в компилаторите и беше премахната от GCC.
    • За архитектурата RISC-V е внедрена поддръжка за инструмента за отстраняване на грешки KASan (Kernel address sanitizer), който помага за идентифициране на грешки при работа с памет.
  • Оборудование
    • Реализирана поддръжка на спецификации USB 4.0, който е базиран на протокола Thunderbolt 3 и осигурява пропускателна способност до 40 Gbps, като същевременно поддържа обратна съвместимост с USB 2.0 и USB 3.2. По аналогия с гръм Интерфейсът USB 4.0 ви позволява да тунелирате различни протоколи през един кабел с конектор Тип C, включително PCIe, Display Port и USB 3.x, както и софтуерни реализации на протоколи, например за организиране на мрежови връзки между хостове. Внедряването се основава на драйвера Thunderbolt, който вече е включен в ядрото на Linux, и го адаптира да работи с USB4-съвместими хостове и устройства. Промените също добавят поддръжка за Thunderbolt 3 устройства към софтуерната реализация на Connection Manager, който е отговорен за създаването на тунели за свързване на множество устройства чрез един конектор.
    • В amdgpu драйвер добави първоначална поддръжка за HDCP 2.x (High-bandwidth Digital Content Protection) технология за защита от копиране. Добавена е поддръжка за чипа AMD Pollock ASIC, базиран на 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 (за дискретни графични процесори, като Fiji, Tonga, Polaris) с драйвера amdgpu.
    • Драйверът k10temp е преработен, добавяйки поддръжка за показване на параметри за напрежение и ток за AMD Zen CPU, както и разширена информация от температурни сензори, използвани в Zen и Zen 2 CPU.
    • В драйвера nouveau добави поддръжка за проверен режим на зареждане на фърмуера за графични процесори NVIDIA, базирани на микроархитектурата Turing (GeForce RTX 2000), което направи възможно активирането на поддръжка за 3D ускорение за тези карти (изисква се изтегляне на официален фърмуер с цифров подпис на NVIDIA). Добавена е поддръжка за графичния двигател TU10x. Проблемите с HD Audio са решени.
    • Добавена е поддръжка за компресиране на данни, когато се предават през DisplayPort MST (Multi-Stream Transport).
    • Добавен нов драйвер "ath11k» за безжични чипове Qualcomm, поддържащи 802.11ax.
      Драйверът е базиран на стека mac80211 и поддържа режими на точка за достъп, работна станция и мрежов възел.

    • Чрез 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,
      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

Добавяне на нов коментар