LINUX.ORG.RU

Linux 4.12

 ,


3

7

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.12. Среди наиболее заметных изменений: в состав включены планировщики ввода/вывода BFQ и Kyber, для live-патчей реализована гибридная модель обеспечения непротиворечивости, добавлен модуль dm-integrity, интегрирован фреймворк TEE (Trusted Execution Environment), в MD RAID5 добавлена поддержка частичного лога чётности, в blk-throttle обеспечена поддержка «мягких» лимитов, в поставку добавлена утилита «AnalyzeBoot», включён по умолчанию механизм защиты KASLR.

В новую версию принято более 13 тысяч исправлений от 1500 разработчиков, размер патча - 89 Мб, что примерно в два раза больше, чем патч для ядра 4.11 (изменения затронули 12364 файлов, добавлено 1300537 строк кода, удалено 266937 строк). Около 45% всех представленных в 4.12 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 3% - файловыми системами и 3% c внутренними подсистемами ядра.

Основные новшества:

Дисковая подсистема, ввод/вывод и файловые системы

  • Для многоуровневой системы очередей (multiqueue) реализованы планировщики ввода/вывода BFQ (Budget Fair Queueing) и Kyber, специально рассчитанные на организацию многопоточного доступа к данным на многоядерных системах. Ранее реализация multiqueue считалась незавершённой из-за отсутствия планировщиков, специально созданных для работы с многоуровневыми очередями. BFQ манипулирует распределением бюджетов на ввода/вывод между процессами и позволяет добиться хороших показателей отзывчивости для интерактивных приложений при использовании дисковых носителей или медленных моделей SSD-накопителей.
  • Kyber минималистичен (около 1000 строк кода), оптимизирован для работы с быстрыми SSD-накопителями и манипулирует двумя основными очередями - очередь для синхронных запросов (операции чтения) и очередь для асинхронных запросов (операции записи). Операции чтения рассматриваются как синхронные, так как они, как правило, блокируют работу процесса пока данные не будут получены. А запись отнесена к асинхронным, так как процесс может сразу продолжить работу после операции записи, которая может быть фактически завершена позднее. Kyber считает операции чтения более приоритетными, но не настолько, чтобы сильно задерживать запись;
  • В модуль управления пропускной способностью ввода/вывода blk-throttle добавлен новый лимит «low», который можно использовать для задания мягких ограничений ресурсов ввода/вывода. Группа (cgroup) может превысить low-ограничение, но только при условии, что все активные группы уже достигли данного лимита. Через настройки можно корректировать период выборки, используемый контроллером cgroup, для тонкого контроля над нагрузкой на CPU. Кроме того в blk-throttle реализован масштабируемый фреймворк для управления приоритезацией ввода/вывода;
  • В подсистему LightNVM добавлен обработчик «pblk», который позволяет работать с экзотическими SSD-накопителями типа open-channel (не имеют прошивки с FTL/Flash Translation Layer) как с обычными блочными устройствами;
  • В MD RAID5 добавлена поддержка возможности Partial Parity Log (PPL), присутствующей в RAID-массивах Intel IMSM, которая позволяет снизить вероятность повреждения данных (Write Hole) в случае работы с рассинхронизированным массивом, один из накопителей в котором не соответствует данным на других дисках, а массив находится в состоянии «degraded», т.е. отсутствует возможность пересчитать блоки чётности. Так как PPL требует сохранения дополнительных избыточных данных, включение данного режима приводит к снижению производительности записи на 30-40%. В dm raid для борьбы с Write Hole добавлена поддержка журнала обратной записи для RAID 4/5/6;
  • В MD RAID проведена работа по увеличению эффективности кэширования и увеличению производительности ввода/вывода для массивов RAID 5 и 6 при использовании жестких дисков;
  • Для Device Mapper реализован новый модуль dm-integrity, который обеспечивает эмуляцию блочного устройства с дополнительными метками в секторах, в которых может сохраняться информация для контроля целостности данных на уровне отдельных секторов. Поддержка предоставляемых dm-integrity метаданных добавлена в dm-crypt и может применяться обеспечения для неизменности зашифрованных данных (Authenticated Encryption, гарантирует, что блок данных не был модифицирован обходным путём) и хранения векторов инициализации;
  • Удалён устаревший драйвер hd для жестких дисков с нестандартным интерфейсом, используемым на заре рождения ПК до появления интерфейса IDE. Драйвер был написан Линусом и поставлялся начиная с версии ядра 0.01;
  • Реализована новая ioctl-команда GETFSMAP, которую можно использовать для анализа физического размещения экстентов в файловой системе. Например, при помощи GETFSMAP можно определить данные какого файла связаны с указанным физическим блоком. Поддержка GETFSMAP добавлена для XFS и ext4;
  • В Btrfs устранена серия проблем, проявляющихся в RAID 5 и 6 при проверке целостности данных («Scrubbing») или перемещении дисков;

Виртуализация и безопасность

  • В состав включен фреймворк TEE (Trusted Execution Environment), предоставляющий средства для задействования возможностей процессоров, таких как ARM TrustZone, по организации выполнения защищённых окружений, аппаратно изолированных даже от ядра. Например, подобные окружения могут применяться для изоляции обработчиков ключей шифрования;
  • На системах x86 активировано использование по умолчанию рандомизации адресного пространства ядра (KASLR, Kernel Address Space Layout Randomization), которая позволяет увеличить стойкость к некоторым видам атак, эксплуатирующих уязвимости в ядре, за счёт формирования случайной раскладки кода ядра в памяти при каждой загрузке;
  • Представлен набор макросов, позволяющих отключить некоторые параметры модулей и стадии загрузки с целью усиления защиты при верифицированной загрузке в режиме UEFI Secure Boot. В частности, предоставлены средства для блокировки доступа пользователей к параметрам модулей (порты ввода/вывода, адреса iomem, irq, каналы dma и т.п.), позволяющим изменить поведение оборудования для обхода ограничений Secure Boot;
  • В Xen обеспечена возможность применения сетевой файловой системы 9pfs, разработанной для Plan 9. При помощи 9pfs в системах виртуализации можно организовать передачу данных из одной виртуальной машины к другой;
  • В гипервизор KVM добавлена поддержка механизма виртуализации «VZ», присутствующего на процессорах MIPS. Для архитектуры x86 прекращена поддержка механизма назначения устройств, вместо которого следует применять интерфейс VFIO;
  • В подсистеме FUSE добавлена поддержка пространств имён для идентификаторов процессов (pid namespaces);
  • В подсистему CAN (Controller Area Network) добавлена поддержка пространств имён, которая позволяет изолировать критичные приложения (например, автомобильное ПО), взаимодействующие через данную шину. Для организации обмена данными между контейнерами на базе разных пространств имён CAN подготовлен драйвер vxcan с реализаций виртуального туннеля для CAN, напоминающий виртуальный Ethernet «veth». Новые возможности позволяют поставлять и запускать CAN-приложения в виде изолированных контейнеров, которые можно запускать через LXC или Docker;

Сетевая подсистема

  • Добавлена универсальная реализация технологии высокоскоростной низкоуровневой обработки сетевых пакетов XDP (Express Data Path), которая может использоваться на любых сетевых интерфейсах, даже если связанный с ними драйвер не имеет встроенной поддержки XDP;
  • В системном вызове epoll_wait() обеспечен переход на схему polling-опроса сетевых сокетов при высокой нагрузке для снижения задержек при приёме пакетов;
  • В сетевой файловой системе CIFS значительно улучшена работа асинхронного ввода/вывода, которая переведена на использование штатного интерфейса ядра AIO. Внесены изменения улучшающие совместимость с SMB-стеком macOS;
  • Прекращена поддержка использования параллельного NFS (pNFS) поверх устройств объектных хранилищ (драйвер objlayout), которая оказалась невостребована и длительное время находилась без сопровождения;
  • В подсистеме MPLS количество меток увеличено до 30;
  • В подсистему MPLS добавлена функция ttl propagation;

Память и системные сервисы

  • В инфраструктуру LivePatch, предоставляющую универсальный API для динамического применения к работающему ядру патчей (без перезагрузки и без остановки работы приложений), добавлена поддержка гибридной модели обеспечения непротиворечивости, комбинирующей метод отслеживания непротиворечивости через анализ стека (kPatch) с механизмом оценки отдельных задач (kGraft). Ранее доступный в ядре код позволял создавать лишь простые патчи для горячего устранения некоторых типов уязвимостей, но не мог применятся для более сложных изменений, затрагивающих замену функций или изменение семантики данных. По сравнению с kPatch гибридная модель позволяет избежать задержек во время наложения патча, может применяться в ситуациях выполнения подменяемой функции и предоставляет более предсказуемый прогноз успешности выполнения операции. По сравнению с kGraft гибридный метод более прост в реализации и оказывает меньшее влияние на процессы (не требует отправки сигнала спящим задачам);
  • В системный вызов prctl() добавлены две новые операции: ARCH_SET_CPUID для включения отслеживания инструкций CPUID и ARCH_GET_CPUID для получения текущего состояния отслеживания. Операции поддерживаются только для систем x86 и могут быть полезны для трассировки приложений, которые пытаются перехватить и эмулировать CPUID;
  • В виртуальной машине BPF реализована возможность вложенного (каскадного) использования map-структур. В состав ядра включен встроенный тестовый фреймворк для программ BPF, активируемый командой BPF_PROG_TEST_RUN в системном вызове bpf(). Для архитектуры SPARC64 обеспечена поддержка JIT-компиляции BPF;
  • В поставку добавлена утилита «AnalyzeBoot», позволяющая сформировать HTML-отчёт, отражающий хронологию загрузки различных компонентов ядра, на основании разбора лога dmesg (по сути является HTML-версией bootgraph.pl).
  • Значительно переработан код для доступа из ядра к данным пространства пользователя, который избавлен от множества привязок, специфичных для конкретных архитектур;
  • Прекращена поддержка архитектуры AVR32, которая уже прекратила своё существование, а в ядре не сопровождалась на должном уровне;
  • Добавлен новая опция трассировки «function-fork», которая позволяет ограничить события трассировки только заданным набором процессов с автоматическим добавлением запущенных дочерних процессов в этот набор;
  • Представлена новая функция для распределения памяти kvmalloc(), которая вначале пытается выделить память через kmalloc(), но при необходимости откатывается на vmalloc(). Применение kvmalloc() позволяет избавить ядро от большой порции дублирующегося кода, выполняющего откат на vmalloc();

Оборудование

  • Обеспечена корректная поддержка подключения устройств через 24-контактный разъём USB type-C, разработанный параллельно со спецификацией USB 3.1;
  • Для архитектуры PowerPC реализована возможность работы с виртуальным адресным пространством, размером до 512 Тб. Размер процесса по умолчанию ограничен 128 Тб, но ограничение можно снять через передачу соответствующих опций при вызове mmap();
  • Для архитектуры ARM64 добавлена поддержка сохранения дампов состояния при крахе ядра (crash-dump);
  • Добавлена поддержка PCI-контроллеров, которые могут работать в режиме Endpoint;
  • Отключена сборка звуковых драйверов OSS (Open Sound System). В одном из следующих выпусков ожидается удаление данных драйверов из состава ядра. В качестве причин удаления упоминается плохое сопровождение, невостребованность и желание избавиться от вызовов set_fs(), которые применяются в данных драйверах;
  • Добавлен новый драйвер абстрактного виртуального мультимедийного контроллера («virtual media controller»), который демонстрирует возможности интерфейсов ядра по доступу к мультимедийным устройствам и может использоваться для тестирования пользовательских приложений. Драйвер создан по аналогии с реализацией виртуальной камеры «vivid» с примером правильного написания V4L-драйверов;
  • Представлена поддержка плат Orange Pi PC2, NVIDIA Tegra 186, i/MX28 Duckbill, Motorola DROID4 и Rockchip RK3399/RK3288. Добавлен драйвер для температурных сенсоров Broadcom BCM2835 (Raspberry Pi);
  • В DRM-драйвер (Direct Rendering Manager) Nouveau добавлена поддержка аппаратного ускорения для GPU GTX 1000 «Pascal» (GTX 1050, 1060, 1070 и 1080), при установке соответствующих проприетарных прошивок от NVIDIA. Переработан код для загрузки прошивок NVIDIA с использованием верификации. Решены проблемы с GPU GTX 970;
  • В DRM-драйвере AMDGPU реализована начальная поддержка ещё не выпущенного GPU Radeon RX Vega, добавлена возможность использования встроенных в GPU датчиков и многоуровневых таблиц страниц памяти;
  • В DRM-драйвере для GPU Intel включено по умолчанию применение атомарного переключения видеорежимов, позволяющего разом, в рамках одной атомарной операции, изменить несколько параметров графического режима;

Большая часть новости взята: https://www.opennet.ru/opennews/art.shtml?num=46799#75

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: ne-vlezay (всего исправлений: 3)

Ответ на: комментарий от batya

адекватные

ну во-первых, этому для своей задачи хватило бы и 512-ти метров, а во-вторых, не тебе, mein kleines kind, рассуждать тут об адекватности :)))

metawishmaster ★★★★★
()
Последнее исправление: metawishmaster (всего исправлений: 2)

когда на десктопе? А в продакшене?

targitaj ★★★★★
()

как сломали amdgpu для oland в 4.11.х, так до сих пор и не почилили. Рядятся, что может означать Oland 64 и Oland 128

Eva_Berg
()
Ответ на: комментарий от intelfx

Первый describe показал коммит, от которого отпочковалось то, что Дженс готовит для 4.13.

post-factum ★★★★★
()

Удаление по причине плохой поддержки... Это нормально? Аиесли, скажем, для ssd или usb снизится качество поддержки, их тоже удалят?

normann ★★★
()
Ответ на: комментарий от normann

Да. Иначе кто будет всё адаптировать под новые версии ядра?

Sunderland93 ★★★★★
()
Ответ на: комментарий от zamazan4ik

это канеш круто, что у тебя все ок, но ты немного мне приврал. этому багу лет 15 точно есть уже. он старше бубунты.

bernd ★★★★★
()
Ответ на: комментарий от hobbit

На 1% насрать, 90+% считай == 100% :)

anonymous
()
Ответ на: комментарий от Odalist

А что ты сделал для opensource?

...спросил бесполезный для сообщества хейтер.

anonymous
()
Ответ на: комментарий от Atlant

Йопт, mfm драйвер удалили???

А, штоп. На компах младше i386 уже ведь шел нормальный ide, так ведь?

timdorohin ★★★★
()
Ответ на: комментарий от batya

Да угомонись уже. У всех свои задачи. И если кому-то нужно (достаточно) 32 бита (хоть от интела, хоть от арм, хоть от поверПЦ), то не тебе судить о его адекватности, не зная самой задачи.

dzidzitop ★★
()
Ответ на: комментарий от Singularity

В типе памяти и интерфейсе. Есть дешевое TLC-говно, которое язык не поворачивается назвать SSD, есть MLC + SATA III, которого как и 640к, должно хватить всем, а есть гиперускорители M.2 PCI-E, с которыми даже противный вантуз со всеми слоями в проф.софте загружается менее чем за 1 секунду.

anonymous
()
Ответ на: комментарий от metawishmaster

Но это было в 2010-ом, когда большинство ОС еще не дропнули 32-ух битные сборки и софт. Кстати, угадай, почему они их дропнули:-)?

batya
()
Ответ на: комментарий от batya

ну во-первых, мы говорим не про _большинство_ ОС, а про вполне конкретные, заточеные для своих целей
а во-вторых, большинство ОС это какие? бубунта и ее клоны али венда, прости господи?

p.s. и ты не отвлекайся - читай темку, там тебя ждут интересные факты :)

metawishmaster ★★★★★
()
Ответ на: комментарий от batya

и это, угомони в себе троля, и мир повернется к тебе лицом :)
все, чао! ;)

metawishmaster ★★★★★
()
Ответ на: комментарий от metawishmaster

Это я написал, что не нужно. А тебя попросил опровергнуть. Дерзай же.

batya
()
Ответ на: комментарий от batya

Два чаю. Не понимаю смысла сейчас в 32-х битных сборках. Оставить мультилиб и всё. Вон Арчеводы не парились - дропнули нахрен 32-х битные сборки и всё. Только мультилиб теперь. Чтобы всякие стимы ставить можно было.

Sunderland93 ★★★★★
()
Ответ на: комментарий от batya

Назван так за великую ношу - торчать портами в наружу и раздавать вафлю.

На самом деле вполне обычный комп, старый только.

timdorohin ★★★★
()
Ответ на: комментарий от timdorohin

Назван так за великую ношу - торчать портами в наружу и раздавать вафлю.

у меня почти такой же функционал, только у него два инета от разных провайдеров (мой и соседский) :)

metawishmaster ★★★★★
()
Ответ на: комментарий от metawishmaster

А мне вот обещали старую циську подогнать под такое дело, т.к. она умеет сразу с двумя каналами динамически работать... У тебя что, такое без спец оборудования заработало?

timdorohin ★★★★
()
Ответ на: комментарий от timdorohin

да соседский я по вафле получаю с его роутера %)
но была и идейка провести себе второй инет от другого провайдера, а переключатся с помощьюью скриптов - конечно был бы жуткий (и нифига не шустрый) костыль, но куда деваться...

metawishmaster ★★★★★
()

в состав включены планировщики ввода/вывода BFQ

О, наконец-то! Юзал когда-то в составе ядра Zen, но потом надоело самому компилить. Правда тогда пользовался связкой bfq+bfs ради избавления от 12309 (облегчало, да).

FreedomFighter
()
Ответ на: комментарий от bernd

почему я тебе соврал? я прекрасно знаю, что он старый очень. Я просто говорю, что у меня на бубунте начиная с 4.10 бага этого нет.

zamazan4ik ★★
()
Ответ на: комментарий от zamazan4ik

я на бубунте с 5.04 и эта бага преследует до сих пор. уже 4 компа поменять успел.

bernd ★★★★★
()
Ответ на: комментарий от vitalif

FIEMAP: есть файл, узнать, где лежит. GETFSMAP: есть блок на диске, узнать, кому принадлежит (может, и не только).

gag ★★★★★
()

Меня всегда удивляло, что в новостях про ядро не приводят хотя-бы краткий список новых опций, которые вылезают по «make oldconfig». Для ядра 4.12 он такой:

Kyber I/O scheduler (MQ_IOSCHED_KYBER) [Y/n/?] (NEW)
BFQ I/O scheduler (IOSCHED_BFQ) [N/y/?] (NEW)
  Support for deprecated /dev/mcelog character device (X86_MCELOG_LEGACY) [N/y/?] (NEW)
PCI Endpoint Support (PCI_ENDPOINT) [N/y/?] (NEW)
MicroSemi Switchtec PCIe Switch Management Driver (PCI_SW_SWITCHTEC) [N/y/?] (NEW)
Allow override default queue discipline (NET_SCH_DEFAULT) [N/y/?] (NEW)
PCI Endpoint Test driver (PCI_ENDPOINT_TEST) [N/y/?] (NEW)
    Integrity target support (DM_INTEGRITY) [N/y/?] (NEW)
DSA mock-up Ethernet switch chip support (NET_DSA_LOOP) [N/y/?] (NEW)
Mediatek MT7530 Ethernet switch support (NET_DSA_MT7530) [N/y/?] (NEW)
SMSC/Microchip LAN9303 3-ports 10/100 ethernet switch in I2C managed mode (NET_DSA_SMSC_LAN9303_I2C) [N/y/?] (NEW)
SMSC/Microchip LAN9303 3-ports 10/100 ethernet switch in MDIO managed mode (NET_DSA_SMSC_LAN9303_MDIO) [N/y/?] (NEW)
  Synopsys devices (NET_VENDOR_SYNOPSYS) [Y/n/?] (NEW)
LTC LTC4306/5 I2C multiplexer (I2C_MUX_LTC4306) [N/y/?] (NEW)
  ASPEED AST2400/AST2500 PWM and Fan tach driver (SENSORS_ASPEED) [N/y/?] (NEW)
  Emergency poweroff delay in milli-seconds (THERMAL_EMERGENCY_POWEROFF_DELAY_MS) [0] (NEW)
TI Lighting Management Unit driver (MFD_TI_LMU) [N/y/?] (NEW)
    Overallocation of the fbdev buffer (DRM_FBDEV_OVERALLOC) [100] (NEW)
    Backlight driver for the Arctic Sands ARCxCnnnn family (BACKLIGHT_ARCXCNN) [N/y/?] (NEW)
Accutouch touch device (HID_ACCUTOUCH) [N/y/?] (NEW)
Asus (HID_ASUS) [N/y/?] (NEW)
NTI keyboard adapters (HID_NTI) [N/y/?] (NEW)
  PCI based USB host interface (USB_PCI) [Y/n/?] (NEW)
  Intel e752x (e7520, e7525, e7320) and 3100 (EDAC_E752X) [N/y/?] (NEW)
  Intel 82975x (D82975x) (EDAC_I82975X) [N/y/?] (NEW)
  Intel 3000/3010 (EDAC_I3000) [N/y/?] (NEW)
  Intel 3200 (EDAC_I3200) [N/y/?] (NEW)
  Intel e312xx (EDAC_IE31200) [N/y/?] (NEW)
  Intel X38 (EDAC_X38) [N/y/?] (NEW)
  Intel 5400 (Seaburg) chipsets (EDAC_I5400) [N/y/?] (NEW)
  Intel i7 Core (Nehalem) processors (EDAC_I7CORE) [N/y/?] (NEW)
  Intel Greencreek/Blackford chipset (EDAC_I5000) [N/y/?] (NEW)
  Intel San Clemente MCH (EDAC_I5100) [N/y/?] (NEW)
  Intel Clarksboro MCH (EDAC_I7300) [N/y/?] (NEW)
  Intel Sandy-Bridge/Ivy-Bridge/Haswell Integrated MC (EDAC_SBRIDGE) [N/y/?] (NEW)
  Intel Skylake server Integrated MC (EDAC_SKX) [N/y/?] (NEW)
  Intel Pondicherry2 (EDAC_PND2) [N/y/?] (NEW)
  Data acquisition support (comedi) (COMEDI) [N/y/?] (NEW)
  USB Type-C Port Controller Manager (TYPEC_TCPM) [N/y/?] (NEW)
    Type-C Port Controller Interface driver (TYPEC_TCPCI) [N/y/?] (NEW)
    Fairchild FUSB302 Type-C chip driver (TYPEC_FUSB302) [N/y/?] (NEW)
  External LED on Dell Business Netbooks (DELL_WMI_LED) [N/y/?] (NEW)
  Intel Cherry Trail ACPI INT33FE Driver (INTEL_CHT_INT33FE) [N/y/?] (NEW)
  Correctable Errors Collector (RAS_CEC) [N/y/?] (NEW)
  Early printk via the xHCI debug port (EARLY_PRINTK_USB_XDBC) [N/y/?] (NEW)
Provide system-wide ring of blacklisted keys (SYSTEM_BLACKLIST_KEYRING) [N/y/?] (NEW)
Мда, создаётся впечатление, что Линус Торвальдс собирается делать новое ядро, у которого со старым будет общего не более чем 1%. Куда ни ткни пальцем - либо уже названо legacy, либо названо deprecated...

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от dzidzitop

Только вчера работал на 64-х разрядной 17-й убунте с флешки. Иногда подтормаживала во время загрузки больших программ, вроде фаерфокса, но в целом все равно шустрее предустановленной дисятачки. Что за колы и тормоза вы там у себя наблюдаете не пойму.

A-234 ★★★★★
()
Ответ на: комментарий от saahriktu

Меня всегда удивляло, что в новостях про ядро не приводят хотя-бы краткий список новых опций, которые вылезают по «make oldconfig»

Не всем это нужно.

anonymous
()

В новую версию принято более 13 тысяч исправлений от 1500 разработчиков

Запомни раз и навсегда, надмозг, patch в контексте исходников ядра - изменение, а не исправление.

anonymous
()
Ответ на: комментарий от batya

Маргинальность (малочисленность страты и специфичность мотивации) и адекватность (способность здраво оценивать окружающую действительность и действовать рационально) никак не связаны.

dzidzitop ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.