Материалы по тегу: ядро

29.08.2020 [20:41], Илья Коваль

Ещё капельку: Microsoft занимается оптимизацией Linux для серверных ARM

Microsoft является платиновым членом Linux Foundation, в её облаке Azure доминирует Linux и, в целом, уже пора перестать удивляться работе корпорации с этой ОС. Но она всё равно порой преподносит сюрпризы. На конференции Linux Plumbers Conference 2020 разработчики компании рассказали об экспериментах по оптимизации сборки ядра Linux.

Любопытно, что эта работа выполняется по внутреннему запросу, а оптимизация делается для повышения производительности Linux на ARM-процессорах Marvell ThunderX2. Это особенно интересно в свете резко изменившихся планов Marvel относительно будущих ThunderX3: компания займётся достаточно глубокой оптимизацией CPU под нужды конкретных заказчиков и не будет выпускать «общие» версии. Теперь она ориентирована в первую очередь на гиперскейлеров, к которым относится и Microsoft.

Так вот, разработчики Microsoft изучают использование LTO (Link Time Optimization) вместе с PGO (Profile-guided optimization) для ускорения работы ядра. Обе техники не являются чем-то новым сами по себе, однако LTO лишь относительно недавно стала применяться для сборки ядра Linux и других пакетов в некоторых дистрибутивах, что было связано с незрелостью её поддержки в популярных открытых наборах компиляторов GCC и LLVM. А вот применение PGO для ядра всё ещё довольно редко. Интересно, что Microsoft активно использует LTO и PGO в Windows — PGO даёт улучшение производительности на 5% – 20 %.

LTO позволяет компилятору перед компоновкой «окинуть взглядом» весь проект целиком, а не только отдельные объекты во время компиляции, и сделать оптимизацию. PGO же ещё подразумевает множественные тестовые запуски итоговых бинарных файлов и отслеживание их поведения с целью дальнейшей оптимизации на основе собранной статистики. Обе техники заметно повышают требования компиляторов к ресурсам (особенно памяти) и увеличивают время сборки, порой весьма существенно.

На той же конференции разработчики Google поделились своим опытом оптимизации сборки ядра. В частности, продукты под брендом Pixel с 2018 года получают ядра с LTO. А сейчас корпорация изучает работу AutoFDO — ещё одной техники, которая собирает данные о работе от perf-подсистемы ядра и аппаратных счётчиков CPU. Собранные профили «скармливаются» компилятору. Таким образом для x86-64 удалось на 12% сократить число используемых циклов CPU. На других платформах результат тоже положительный, но уже не такой заметный.

Постоянный URL: http://servernews.ru/1019418
14.08.2020 [15:44], Илья Коваль

Дроворуб: вредоносный Linux-фреймворк с руткит-модулем ядра

ЦРУ и ФБР опубликовали совместный отчёт об обнаружении ранее неизвестного комплексного зловреда «Дроворуб» (Drovorub), разработчики которого, как утверждают исследователи, связаны с российскими спецслужбами и хакерской группировкой Fancy Bear, также известной под именами APT28, Group 74, Iron Twilight, PawnStorm, Sednit, Sofacy и Strontium.

«Дроворуб» включает четыре основных исполняемых компонента: клиентский модуль-имплант, руткит в виде модуля ядра Linux, клиентские модуль для передачи файлов и перенаправления портов/трафика, управляющий сервер. Сервер отвечает за регистрацию, аутентификацию и отправку задачи клиентам. Для связи используется протокол WebSocket.

Клиентская часть поставляется с готовыми настройками для подключения к серверу и может выполнять произвольные команды от имени root-пользователя, скачивать и отправлять любые файлы, перенаправлять трафик на другие хосты и клиенты, в том числе организуя туннели до других заражённых хостов в скомпрометированной сети, которые могут не иметь выхода в Интернет.

После установки клиента загружается модуль ядра (руткит), и вот тут начинается самое интересное. Модуль Drovorub-kernel ставит хуки на системные вызовы самого ядра и перехватывает их. Модуль скрывает в списке процессов присутствие самого себя, клиента и его дочерних процессов — в /proc невозможно увидеть хоть какие-то следы присутствия лишнего ПО в системе. Также он скрывает любые файлы и директории самого клиента и любые другие по запросу. Кроме того, руткит занимается фильтрацией пакетов, сокетов (включая raw) и правил netfilter.

Общение между клиентом и модулем ядра организовано любопытным способом. Модуль создаёт псевдоустройство (такое как /dev/zero) и «прослушивает» весь поток данных, проходящих через него, вычленяя данные от клиента. Для обратной связи модуль посылает сигнал клиенту и когда тот обращается к псевдоустройству отдаёт необходимую порцию данных. И это, кстати, даёт один из самых простых способов проверить наличие руткита в системе, отправив на псевдоустройство команду скрыть какой-либо файл.

Остальные локальные методы включают более затратные анализ памяти и образа диска. Также можно заметить следы деятельности в сети и логах самого ядра. Для предотвращения заражения рекомендуется обновить ядро Linux до версии 3.7 или старше, устанавливать обновления, запретить загрузку недоверенных и неподписанных модулей ядра, а также использовать UEFI Secure Boot.

Постоянный URL: http://servernews.ru/1018272
30.07.2020 [14:48], Илья Коваль

Новая уязвимость? В Linux 5.8 появился «тихий» патч для генератора случайных чисел

Ресурс Phoronix обратил внимание на необычный патч, принятый Линусом Торвальдсом в ядро Linux 5.8, который, согласно описанию, «усложняет удалённое наблюдение, которое может привести к угадыванию внутреннего состояния сетевого генератора [псевдо]случайных чисел».

Flickr/foxtongue

Flickr/foxtongue

Патч меняет первые 32 из 128 бит переменной net_rand_state при появлении прерывания или активности CPU. Проще говоря, состояние генератора будет чаще обновляться вне зависимости от аппаратной конфигурации и настроек конкретной системы. Необычность патча в том, что он не попал в списки рассылки и предварительно публично не обсуждался в отличие от обычных правок. Кроме того, он будет портирован в предыдущие релизы ядра и попадёт таким образом во все мажорные Linux-дистрибутивы.

Ну а самое интригующее в этой истории то, что автором патча является Амит Клайн (Amit Klein), известный специалист в области информационной безопасности с почти 30-летним стажем. Ранее он неоднократно находил уязвимости в ядре Linux. Так что за довольно абстрактным описанием патча может скрываться ещё одна «дыра» и притом серьёзная, так как наличие хорошего источника случайных чисел крайне важно для шифрования и защиты.

Постоянный URL: http://servernews.ru/1017050
15.06.2020 [22:28], Алексей Степин

Релиз Linux 5.8 станет одним из самых больших и важных за всю историю ядра

В последние несколько недель публикуется много новостей, относящихся к грядущему выпуску новой версии ядра Linux. Уже на сегодня версия Linux 5.8 признана релизом с самым большим количеством изменений за всю историю — в него входит уже 1 026 178 строк нового кода. 

Ожидается, что Линус Торвальдс, создатель Linux, выпустит RC1 в течение двух ближайших недель. В течение этого времени будет завершено объединение нового кода. Изменений действительно очень много, поэтому сложно ожидать стабильной (stable) версии ранее середины августа, но многое известно уже сейчас.

В частности, новое ядро получит оптимизации под новейшие процессоры Intel и AMD, равно как и ряд оптимизаций под архитектуру ARM, поддержку новых аппаратных компонентов, серьёзные изменения в коде сетевой части и новые открытые драйверы графики AMD Radeon. Скорее всего, осенью выйдут такие дистрибутивы с новым ядром ветки 5.8, как Ubuntu 20.10 и Fedora 33.

Среди всех нововведений особенно стоит отметить следующие дополнения:

  • Поддержка шифрования с использованием Trusted Memory Zones на GPU AMD;
  • Поддержка буферов обмена P2P/DMA между графическими ускорителями (в частности, для свежих AMD);
  • Обновления драйверов AMD, NVIDIA и Intel (включая начальную поддержку Gen12), а также Habana Gaudi.
  • Драйвер AMD Energy наконец-то откроет для доступа сенсоры Zen/Zen 2;
  • Появится поддержка «живой миграции» с KVM для процессоров AMD;
  • Драйвер CPUFreq получит поддержку boost;
  • Появится поддержка PCIe NTB для Intel Ice Lake Xeon;
  • Реализована начальная поддержка архитектуры POWER10; 
  • Уже ставшие традиционными патчи против side-channel уязвимостей для основных архитектур и оптимизации для них.

О сетевых нововведениях, таких, как поддержка тестирования кабелей Ethernet, мы уже рассказывали, как и о том, что флеш-массивы на базе MLC можно будет сконфигурировать в качестве SLC. Не забыто развитие драйвера Microsoft exFAT, улучшена работа SMB3, EXT4 и Btrfs, введена поддержка DAX для прямого доступа к энергонезависимой памяти.

Слой для поддержки блочных устройств получит поддержку шифрования

Слой для поддержки блочных устройств получит поддержку шифрования

Не останется без улучшений часть, касающаяся вопросов безопасности. Будет улучшен генератор RNG, появится поддержка ARM CryptoCell и AMD PSP SEV-ES. А вот функция сброса кеша L1 при переключении контекста отозвана самим Линусом Торвальдсом — он считает её «идиотской».

Около 37% всех изменений в Linux 5.8 связано с драйверами, 16% — к обновлению кода различных процессорных архитектур, 10% относится к сетевому стеку, 3% к файловым системам и 4% к прочим подсистемам ядра. Всего в новую ветку принято 14 206 наборов изменений, затрагивающих 20% всех файлов в репозитории, размер патча 5.8-rc1 составляет 61 Мбайт. Тесты производительности нового ядра в ближайшее время планирует опубликовать популярный ресурс Phoronix.

Постоянный URL: http://servernews.ru/1013459
13.06.2020 [00:08], Алексей Степин

MTD в Linux 5.8 позволит использовать MLC-память в режиме SLC

Большая часть массовых флеш-накопителей использует память типа TLC, дешёвую, но медленную. Реже встречается MLC, совсем редко — сверхнадёжная однобитовая SLC. Но в новом ядре Linux 5.8 подсистема MTD получит интереснейшую возможность эмулировать SLC NAND, пусть и только для «чистых» флеш-массивов.

Уникальная флеш-память Samsung 3D V-NAND SLC

Уникальная флеш-память Samsung 3D V-NAND SLC

Идея неиспользования «лишних» бит в ячейках флеш-памяти не нова, она позволяет добиться от априори менее надёжных типов NAND повышенной устойчивости и производительности, пусть и путём потери ёмкости. В подавляющем большинстве стандартных SSD-накопителей часть флеш-массива TLC/MLC работает в режиме SLC. Объём этой части может варьироваться, используется же она как быстрый кеш.

Типы и характеристики флеш-памяти NAND

Типы и характеристики флеш-памяти NAND

В ряде случае использольвание «чистых» флеш-массивов NAND, с которым система может работать программно и использовать по своему усмотрению, более чем оправдано, например, во встраиваемых и промышленных системах. Именно здесь тем, кому нужна повышенная надёжность хранения данных, может помочь ядро Linux 5.8.

В нём разработчики реализовали поддержку эмуляции SLC-памяти для MLC-массивов. За нововведение ответственна компания Bootlin. Разумеется, MLC-память остаётся двухячеечной, но в режиме эмуляции SLC программируется только «нижняя половина». Новый режим был добавлен в рамках внесения изменений в подсистему Linux MTD. Она также получила ряд улучшений, в частности, в части различных драйверов.

Постоянный URL: http://servernews.ru/1013187
10.06.2020 [21:11], Алексей Степин

Linux 5.8 получит инструментарий для тестирования сетевых кабелей

Проблемы с кабельной инфраструктурой в компьютерных сетях могут быть очень раздражающими — далеко не всегда место повреждения очевидно или найти его удаётся вовсе не сразу. В некоторых системных платах в BIOS/UEFI есть функции тестирования витой пары в сетевых кабелях. Подобная, но более широкая функциональность станет частью нового ядра Linux версии 5.8.

Интегрированное в некоторые BIOS/UEFI программное обеспечение, в частности, ASUS AI Net2 (иногда пункт называется LAN Cable Status) умеет отображать состояние каждой витой пары в кабеле. Это позволяет локализовать базовые проблемы физического уровня. Существуют и более продвинутые системы тестирования, которые умеют показывать не только наличие контакта и правильность разводки, но примерное расстояние до проблемного места. 

ASUS AI Net2

ASUS AI Net2. Короткое замыкание в 3 и 4 парах, показана примерная дистанция до дефектных мест

Однако в новой ветке ядра Linux 5.8 будет реализована поддержка тестирования кабелей на программном уровне. Список нововведений уже известен, однако пока эта функция будет поддерживаться лишь для некоторых 1GbE-контроллеров Marvell. Естественно, она сама по себе требует определённой поддержки со стороны сетевого чипа, поэтому вообще для всех адаптеров она волшебным образом не появится. Зато чипы, умеющие определять расстояние до места замыкания или разрыва со временем тоже будут поддерживаться.

Аппаратный тестер LAN-кабелей

Аппаратный тестер LAN-кабелей

Также новое ядро получит и другие нововведения, связанные с сетевой частью:

  • Поддержку протокола Media Redundancy Protocol (MRP), помогающую комплексу сетевых коммутаторов пережить сбой одного из них без потери связи;
  • Новый драйвер Intel IGC с поддержкой разгрузки при сегментации (generic segmentation offload);
  • Новый драйверы Realtek r8169 и Freescale, содержащие множество улучшений и исправлений;
  • Оптимизации планировщика;
  • Поддержку сетевых контроллеров Marvell/Aquantia A2, которые официально ещё не были представлены.
  • Повышение производительности SMB3, улучшение поддержки многоканальных подключений, исправления в работе DFS.

С полным списком улучшений и нововведений можно ознакомиться здесь. Сетевые подсистемы нового ядра получат 152 тысячи строк нового кода, но при этом 64 тысяч строк существующего кода будет удалено.

Постоянный URL: http://servernews.ru/1013119
05.06.2020 [22:54], Илья Коваль

Поддержка LTS-ядер Linux 4.19 и 5.4 продлена ещё на несколько лет

Грег Кроа-Хартман (Greg Kroah-Hartman), отвечающий за сопровождение стабильной ветки ядра Linux, обновил предполагаемые даты окончания поддержки версий 4.19 и 5.4. Для версии 5.4, выпущенной в ноябре прошлого года, срок продлён до декабря 2025 года, а для версии 4.19 от октября 2018 года — до декабря 2024 года. Таким образом для обеих веток итоговый срок сопровождения составит 6 лет.

В отличие от обычных релизов, которые получают обновления только до выхода следующей версии ядра, ядра 4.19 и 5.4 теперь относятся к категории LTS (Long Term Support). На текущий момент LTS-релизов уже пять, включая версии 4.4, 4.9 и 4.14. Формально есть ещё релиз ядра 3.16, выпущенный в августе 2014 года, но его поддержка заканчивается уже в этом месяце. А на базе ядер 4.4 и 4.19 фондом Linux Foundation поддерживаются ветки SuperLTS, имеющие уже десятилетний срок сопровождения.

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

Кроме того, LTS-релизы являются основой для ядер Android, так что желание Google внести специфичные для этой ОС патчи в основную ветку ядра вполне понятно. Впрочем, некоторые крупные вендоры поддерживают собственные LTS-версии, отличные от предоставляемых разработчиками ядра Linux. Но, как и в случае упомянутой мобильной ОС, своевременный выход патчей даже для относительно редко обновляемых LTS-релизов остаётся целиком на совести производителя.

Постоянный URL: http://servernews.ru/1012766
02.06.2020 [22:24], Алексей Степин

Линус Торвальдс назвал идиотской опцию сброса L1-кеша при переключении контекста в Linux 5.8

Борьба с различными уязвимостями семейства Spectre уже приводила к неоднозначным результатам. Даже сам создатель Linux, Линус Торвальдс, с негодованием отметил, что падение производительности на 50% явно не стоит такой «защиты». Речь шла об исправлении STIBP (Single Thread Indirect Branch Predictors) для процессоров с SMT/HT. На этот раз он выступил против включения в ядро Linux 5.8 опции сброса кеша данных L1 при переключении контекста.

Окно внесения различных нововведений в новое ядро Linux 5.8 открывается: так, мы уже писали о том, что эта ветка получит поддержку процессорной архитектуры MIPS R5. Как оказалось, в рамках борьбы с уязвимостями класса Spectre, а также другими потенциальными утечками из кешей, которым ещё нет названия, в ядре 5.8 должна была появиться такая неоднозначная функция, как сброс кеша данных L1 при переключении контекста. К счастью, Торвальдс не одобрил этой идеи и даже назвал её безумной.

Дело в том, что речь идёт не просто о сбросе кеша в действительно требующей этого ситуации. Это функция, позволяющая делать такой сброс по «приказу» любого приложения, причём это приложение в многозадачной ОС, каковой является Linux, будет замедлять не только себя, но и остальные процессы. Для высоконагруженных серверных систем это крайне вредная практика. Кроме того, сам сброс является осмысленной задачей только для процессоров Intel, и Торвальс закономерно посчитал навязывание сброса L1 даже тем конфигурациям, где оно не требуется, плохой идеей.

В своём посте, посвященном этой теме, он прямо заявил, что не желает видеть опции в стиле «я могу заставить делать ядро глупые вещи». Такая опция должна иметь двойное подтверждение. Кроме того, использование SMT делает всю идею практически бессмысленной. Далее Торвальдс отметил, что будет счастлив получить больше информации о том, почему он может быть неправ, но на данный момент он отзывает данную опцию ядра 5.8 по причине «нехватки информации».

За патч со сбросом данных из L1 при смене контекстов отвечает разработчик из Amazon, но пока с его стороны, а также со стороны Intel не поступало никаких комментариев и заверений в том, что этот патч действительно необходим и действительно спасает от реальных угроз. 

Постоянный URL: http://servernews.ru/1012487
28.05.2020 [15:42], Алексей Степин

Предложен новый механизм Statfs для получения статистики работы ядра Linux

Механизм получения статистических данных, генерируемых ядром Linux, использует DebugFS и устроен таким образом, что обычно требует root-доступа, а sysfs не всегда удобна. Более того, в ряде случаев требуется создание пользователями собственного инструментария.

Один из разработчиков Red Hat вынес предложение изменить столь неудобное положение дел. Для этого предлагается использовать новую, специально предназначенную для сбора статистики виртуальную файловую систему Statfs.

Изначально единого механизма сбора статистики ядра в Linux не существует. Как отмечает в своём посте Эмануэль Джузеппе Эспосито (Emanuele Giuseppe Esposito), подсистемы ОС вынуждены использовать свои механики сбора, например, в виде файлов в пространстве debugfs. Так, KVM имеет свой блок кода, отвечающий за эту функцию (обработчики debugfs находятся в файле virt/kvm/kvm_main.c). Из этого, отмечает разработчик, вытекает две основные проблемы: избыточный код и то, что debugfs далеко не всегда подходит для накопления статистики, хотя бы потому, что эта файловая система подвержена механизму локдауна (lockdown).

Решение проблемы он видит в использовании специальной виртуальной файловой системы statsfs, которая располагается в оперативной памяти. Эта система создана Паоло Бонзини (Paolo Bonzini), она достаточно проста и имеет стабильный API. В общем дереве она монтируется как /sys/kernel/stats, и в этом виде KVM уже может использовать statsfs. Данная ФС поддерживает любую структуру файлов и директорий, различные типы данных, а также их агрегацию, причём, не только в виде суммы, но также и в виде значений average, max, min и count_zero.

Применение statsfs позволяет избежать необходимости root-доступа, «загрязнения» пространства debugfs и существенно упрощает саму процедуру сбора статистики. Подробности можно узнать в этой ветке обсуждения ядра.

Постоянный URL: http://servernews.ru/1012091
10.01.2020 [17:10], Андрей Галадей

Линус Торвальдс выступил против ФС ZFS в Linux

Одной из проблем Linux, как сообщалось ранее, является некорректная работа планировщика задач. Тогда Линус Торвальдс заявил, что планировщик работает штатно, а также ответил на слова одного из участников дискуссии на тему модуля ядра ZFS on Linux.

Дело в том, что последние обновления в ядре частично нарушили работоспособность этой файловой системы.

Торвальдс же заявил, что этот модуль является внешней надстройкой над ядром, потому корректность его работы не гарантируется, разработчикам ZFS on Linux самим нужно отслеживать все проблемы.

Кроме того, «отец Linux» заявил, что модуль ZFS несовместим с лицензией GPLv2, поскольку предлагается под собственной лицензией Oracle (ранее Sun) CDDL. Из-за этого модуль и не принимают в ядро системы, поскольку его правовой статус до сих пор остаётся неопределённым.

По словам Торвальдса, если бы Oracle дала официальное разрешение, заверенное главным юристом или основателем компании Ларри Эллисоном, тогда бы он дал «добро» на включение кода ZFS в основную ветку ядра. На данный момент модуль ZFS on Linux распространяется под смешанной лицензией.

Создатель Linux резюмировал, что использование ZFS на текущий момент является данью моде, а не реальной необходимостью ввиду отсутствия нормальной поддержки и наличия проблем с лицензиями.

Постоянный URL: http://servernews.ru/1001190
Система Orphus