Релиз ядра Linux 4.6
16 мая 2016 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.6. Среди наиболее заметных изменений: новая файловая система OrangeFS, поддержка USB 3.1 SuperSpeedPlus (10Gbps), возможность использования интерфейса датаграмм для отправки/приёма отдельных сообщений по TCP, поддержка шифрования на уровне кадров Ethernet, реализация mesh-протокола B.A.T.M.A.N V, поддержка cgroup namespaces, слой pNFS SCSI для NFSv4.1, поддержка 3D-ускорения для GPU NVIDIA GeForce GTX 900 "Maxwell", режим монтирования "nologreplay" в Btrfs, более агрессивное забирание памяти в OOM killer.
В новую версию принято более 12 тысяч исправлений от примерно 1500 разработчиков, размер патча - 37 Мб (изменения затронули 9990 файлов, добавлено 517234 строк кода, удалено 249061 строк). Около 46% всех представленных в 4.6 изменений связаны с драйверами устройств, примерно 20% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% - файловыми системами и 4% c внутренними подсистемами ядра.
Из наиболее интересных новшеств ядра Linux 4.6 можно отметить:
- Дисковая подсистема, ввод/вывод и файловые системы
- В состав добавлена распределённая файловая система OrangeFS, рассчитанная на применение в высокотехнологичных high-end-серверах и кластерах для достижения максимальной производительности доступа к данным из распараллеленных приложений. OrangeFS позиционируется как продолжение разработки проекта PVFS, развивая его в таких областях как отказоустойчивость и расширенные механизмы контроля доступа. Из типичных областей применения OrangeFS называются высокопроизводительные вычисления (HPC), обработка больших объёмов данных (BigData), потоковое вещание видео, решение задач геномики и биоинформатики;
- Для файловой системы OCFS2 (Oracle Cluster File System) реализована(недоступная ссылка) система проверки целостности файлов, которая позволяет без отмонтирования ФС восстановить работу в случае возникновения некоторых видов сбоев. Если ранее при выявлении ошибок с числом inode для файла вся ФС переводилась в режим только для чтения, то теперь реализован специальный простой механизм проверки, который в случае проблем с числом inode, выполняет проверку и корректировку inode;
- В сервер NFSv4.1 добавлена раскладка pNFS SCSI с реализацией варианта раскладки блочного устройства, использующего команды SCSI для улучшенной изоляции и идентификации устройства. При использовании pNFS SCSI сервер NFS выступает в роли сервера метаданных для pNFS, который кроме обработки всех запросов к метаданным предоставляет клиентам прямой доступ к хранилищу через логические устройства SCSI (SCSI LUN), которые могут быть совместно использованы всеми клиентами. Для работы раскладок pNFS SCSI требуется их поддержка на стороне экспортируемой файловой системы, которая пока доступна только в XFS;
- В Btrfs уменьшено с 4 до 2 Кб значение по умолчанию параметра max_inline, т.е. теперь только файлы меньше 2 Кб будут упаковываться вместе с метаданными внутри inode.
Представлена новая опция монтирования "nologreplay", отключающая ведение replay-лога, что полностью блокирует возможность изменения данных в ФС. В сочетании с опцией "ro" позволяет получить действительно доступные только для чтения разделы, аналогичные ФС ext и xfs в режиме "norecovery" (невозможно перемонтировать в режим записи через "remount,rw" без полного отмонтирования ФС).
Добавлена новая опция монтирования "usebackuproot", которая заменила собой опцию "recovery", вводящую в заблуждение своим не совсем точным названием;
- В XFS добавлен новый ioctl для управления квотами (Q_XGETNEXTQUOTA), позволяющий утилите quotactl быстро найти все активные квоты, путём перебора только inode с параметрами квот, пропуская незадействованные inode;
- В Ext4 переписана реализация кэша mbcache, что положительно повлияло на масштабируемость xattr;
- В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, ускорена обработка пустот в карте распределения блоков и экспортирована статистика записанных во время работы ФС данных (/sys/fs/f2fs/disk/lifetime_write_kbytes);
- Для файловой системы FAT в настройки сборки ядра добавлена опция CONFIG_FAT_DEFAULT_UTF8 для включения UTF-8 по умолчанию при монтировании разделов с FAT;
- Сетевая подсистема
- Добавлена подсистема Kernel Connection Multiplexor (KCM), предоставляющая средства для эффективного приёма и отправки сообщений по TCP, используя при этом программный интерфейс датаграмм. Т.е. предлагаются средства для построения протоколов уровня приложения, манипулирующих отправкой отдельных сообщений, при том, что для передачи сообщений используется TCP для гарантии доставки, но API похож на UDP и не требует возни с установкой соединения (операции установки и завершения соединения выполняются автоматически);
- Поддержка пятой версии mesh-протокола B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы. Новая редакция примечательная разделением протокола OGM на два отдельных компонента - ELP (Echo Location Protocol) и OGMv2. ELP отвечает за обнаружение соседей и оценку качества линка, а OGMv2 реализует алгоритм распространения метрик по сети и определяет оптимальные маршруты. Кроме того, протокол больше не полагается на потерю пакетов, а отталкивается от определённой пропускной способности;
- Добавлен новый API "devlink", предоставляющий возможность изменять различные сетевые параметры, специфичные для определённого класса устройств. Например, можно узнать или установить тип порта (Ethernet/InfiniBand), настраивать параметры коммутации и управлять разбиением порта для подключения разветвителя;
- В ядро интегрирован механизм LCO (Local Checksum Offload), позволяющий ускорить выполнение операций расчёта контрольных сумм пакетов для тунелированных протоколов;
- В сокеты, открытые в режиме TCP_INFO, добавлена поддержка RFC-4898 (tcpEStatsPerfDataSegsOut/In с результатами подсчёта принятых/отправленных сегментов с данными с учётом повторной передачи потерянных сегментов) и новые опции tcpi_min_rtt и tcpi_notsent_bytes, выдающие минимальный RTT для потока и размер очереди ещё не отправленных данных;
- Память и системные сервисы
- В USB-стеке обеспечена поддержка протокола SuperSpeedPlus, определённого в спецификации USB 3.1 и позволяющего добиться скорости передачи данных до 10Gbps, например, при подключении внешних накопителей класса USB 3.1 Gen2;
- Проведена работа по увеличению надёжности кода, отвечающего за принудительное завершение задач в условиях нехватки памяти в системе (OOM killer). В частности, решена проблема с задержками высвобождения памяти в случае принудительного завершения процессов, завершение которых задерживается из-за нахождения в непрерываемом состоянии ожидания события от другого процесса, который оказывается заблокирован системой распределения страниц памяти. Для решения этой проблемы добавлен специализированный поток ядра oom_reaper, который пытается сразу вернуть системе анонимную или вытесненную в раздел подкачки память убиваемого OOM killer процесса, полагая, что процессу эта память уже не нужна так как он всё равно будет завершён;
- Поддержка управления питанием хост-контроллера AHCI во время работы, что позволяет перейти к более глубоким режимам энергосбережения, инициировав прекращение подачи энергии на контроллер в случае перевода всех SATA-портов в режим сна;
- В API DMA-BUF, позволяющем организовать совместное использования буферов драйверами и различными подсистемами (V4L2, DRI и т.п.), добавлен новый ioctl DMA_BUF_IOCTL_SYNC для управления согласованностью кэша между CPU и GPU. Новый ioctl позволяет решить проблемы с согласованностью кэша при одновременном доступе к ресурсам CPU и GPU через dma-buf;
- Новые системные вызовы preadv2() и pwritev2(), которые отличаются от preadv() и pwritev() наличием ещё одного аргумента для передачи ядру дополнительных флагов. Первым поддерживаемым флагом стал RWF_HIPRI для полинга высокоприоритетных запросов;
- Выполнена достаточно большая переработка и реструктуризация подсистемы perf. Расширены возможности утилиты perf, например, в командах 'perf top' и 'perf report' появился режим отображения многоуровневых гистограмм ("perf top --hierarchy -s comm,dso");
- Добавлена новая опция загрузки ядра "irqaffinity=", которая позволяет ограничить число ядер CPU, на которые будет направляться обработка прерываний (например, пользователь может выделить процессор для каких-то задач, будучи уверенным, что он не будет прерываться на обработку прерываний);
- В состав интегрирована первая часть изменений, подготовленных в рамках проекта по переработке механизма горячего подключения CPU;
- В отладочном инструменте KASan (Kernel address sanitizer) появилась поддержка выявления ошибок работы с памятью в Slab memory allocator;
- Добавлена поддержка механизма проверки корректности обращений к стеку, работающего во время компиляции ядра;
- Виртуализация и безопасность
- Представлен "cgroup namespaces", механизм виртуализации точек монтирования cgroups и представления /proc/$PID/cgroup, что позволяет использовать в разных контейнерах отдельные иерархии cgroup, не позволяющие получить доступ к информации из системной иерархии. Например, без cgroup namespaces из изолированного процесса через /proc/$PID/cgroup можно получить такую информацию как полный путь cgroup процесса. Для создания пространства имён cgroup в вызовы clone(2) и unshare(2) добавлен новый флаг CLONE_NEWCGROUP;
- Добавлена поддержка механизма ключей защиты памяти Intel MPK (Memory Protection Keys), реализованного в готовящемся к выпуску новом поколении процессоров Intel. MPK даёт возможность приложениям пользовательского уровня разбить используемую память на зоны, применив к каждой зоне дополнительные ограничения, например, можно установить права при которых код может быть запущен, но не может быть прочитан.
MPK позволяет закодировать управляемые пользователем маски прав доступа в элементах таблицы страниц памяти (PTE): вместо одной фиксированной маски доступа в PTE, которая требует системного вызова для изменения и работает в привязке к странице памяти, MPK позволяет пользователю определить несколько вариантов масок через специальный регистр (PKRU). В PKRU для каждой маски можно задать раздельные флаги запрета доступа и запрета записи. Подобный подход позволяет динамически переключать флаги доступа для очень больших областей памяти, манипулируя лишь регистром CPU, без внесения изменений для каждой страницы памяти. Кроме того появляется возможность более точного управления флагами прав доступа MMU, например, отделить обработку флагов исполнения и чтения;
- Возможность шифрования в Ethernet на уровне MAC (MACsec), определённая в стандарте IEEE 802.1AE. Позволяет шифровать и аутентифицировать весь трафик в локальной сети, используя алгоритм GCM-AES-128, что позволяет защитить от перехвата трафик DHCP и VLAN, а также помешать модификации заголовков кадров Ethernet;
- Интегрирована разработанная проектом grsecurity технология защиты (__ro_after_init), позволяющая создавать доступные на чтение и запись области памяти, используемые только во время инициализации и переводимые в режим только для чтения после инициализации;
- На архитектурах i386 и X86_32 (в том числе для 32-разрядных программ, запускаемых в 64-разрядном окружении) включена полная рандомизация адресного пространства: ранее применялась только рандомизация стека и исполняемых областей, теперь ASLR применяется для любых областей, выделенных через mmap(), области системных вызовов vDSO и размещения библиотек;
- Оборудование
- В DRM-драйвер для видеокарт NVIDIA (Nouveau) добавлена поддержка чипсета GM200 и возможность загрузки прошивок для карт GM20x (GeForce GTX 900 "Maxwell"), верифицируемых по цифровой подписи, что позволило задействовать механизмы аппаратного 3D-ускорения для GPU Maxwell (для прошивок без цифровой подписи закрыт доступ к средствам ускорения 3D-операций);
- Расширены возможности DRM-драйвера для видеокарт Intel: Для процессоров Haswell, Broadwell, Valleyview и Cherryview включена по умолчанию поддержка PSR (Panel Self Refresh). Для процессоров Haswell и Broadwell включена по умолчанию поддержка технологии FBC (Frame-Buffer Compression), которая позволяет добиться существенного снижения энергопотребления в условиях отображения необновляемой картинки на экране. Продолжена работа над поддержкой атомарного подключения дисплеев. Улучшены средства адаптивного управления питанием;
- В драйвере AMDGPU появилась поддержка звука i2s, возможность сброса состояния GPU и представлен новый интерфейс sysfs для ручного изменения параметров powerplay, влияющих на производительность и энергопотребление;
- Для архитектуры ARM64 реализована поддержка ASLR (рандомизация адресного пространства) и добавлена доступная в ARMv8.2 возможность "user access override" для дополнительной защиты от непредусмотренного функциональностью обращения из ядра к памяти пользовательских процессов;
- Значительно переработана реализация устройства GPIO;
- Поддержка гигабитных Ethernet-контроллеров MediaTek MT7623 и карт Intel Ethernet X722 iWARP;
- Поддержка новых ARM SoC Axis Artpec-6, TI Keystone k2g, Mediatek MT7623, Allwinner A83T, NXP i.MX6QP, ST Microelectronics stm32f469, Annapurna Labs Alpine v2, Marvell Armada 3700, Marvell Armada 7000/8000, Amlogic S905, Qualcomm Snapdragon 820, Socionext UniPhier, ARM Juno, Allwinner A64 и Broadcom Vulcan.
- Начальная поддержка CPU POWER9.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.