Pull to refresh
  • by relevance
  • by date
  • by rating

Linux Page Cache для SRE: основные файловые операции и syscall'ы (часть 1)

High performance *System administration *System Programming *Development for Linux *DevOps *
Translation

В этой серии постов я хотел бы поговорить о Linux Page Cache. Я считаю, что данные знания теори и инструментов жизненно необходимы и важны для каждого SRE. Общее понимание как работает Page Cache помогает и в рутинных повседневных задачах, и в экстренной отладке на продакшене. При этом Page Cache часто оставляют без внимания, а ведь его лучшее понимание. как правило, приводит к:

- более точному планированию емкости системы и лимитов сервисов и контейнеров;
- улучшенным навыкам отладки приложений, интенсивно использующих память и диски (СУБД и храанилища данных);
- созданию безопасных и предсказуемых сред выполнения специальных задач, связанных с памятью и/или вводом-выводом (например: сценарии резервного копирования и восстановления, rsyncоднострочники и т.д.).

Я покажу, какие утилиты вы можете использовать, когда имеете дело с задачами и проблемами, связанными с Page Cache, как правильно к ним подходить, и как понять реальное использование памяти.

Читать далее
Total votes 18: ↑18 and ↓0 +18
Views 2.2K
Comments 6

Состоялся релиз Linux 5.5

Configuring Linux *Development for Linux *

26 января 2020 года Линус Торвальдс представил первый стабильный релиз ядра Linux 5.5 под кодовым названием Kleptomaniac Octopus. Выпуск новой версии ядра Linux вышел в соответствии с графиком, спустя два месяца после выхода предыдущей стабильной версии.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Views 5.8K
Comments 1

Состоялся релиз ядра Linux 5.10

Configuring Linux *Open source *Development for Linux *


13 декабря 2020 года Линус Торвальдс представил первый стабильный релиз ядра Linux 5.10. Выпуск новой версии ядра Linux вышел в соответствии с графиком, спустя два месяца после выхода предыдущей стабильной версии. Исходный код ядра Linux 5.10 уже доступен для загрузки на портале kernel.org.

Новое ядро Linux 5.10 получило долгосрочную поддержку (LTS, long-term support). Разработчики будут не менее двух лет (вероятно, что это будет делаться даже до 6 лет) выпускать обновления для ядра Linux 5.10. Предыдущая версия ядра Linux с LTS — 5.4, которая будет поддерживаться до декабря 2025 года.
Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Views 9.4K
Comments 3

Релиз ядра Linux 5.12

Дата-центр «Миран» corporate blog Configuring Linux **nix *Development for Linux *


Вчера, 25 апреля 2021 года, после двух месяцев разработки, Линус Торвальдс представил ядро Linux 5.12. Как пишет сам Торвальдс, эта версия — спокойная и без каких-то глобальных изменений. Более радикальный патч ожидается в версии 5.13, в которой разработчики будут «наверстывать упущенное». Само обновление вышло с недельной задержкой от графика.

Размер патча ядра — 38 Мб, а основные изменения в кодовой базе коснулись драйверов — на них приходится более 40% (43%) внесенных правок и обновлений. Примерно 17% изменений относятся к обновлению кода аппаратных архитектур, 12% — сетевой стек, 5% — файловые системы и 4% — внутренние подсистемы ядра.
Читать дальше →
Total votes 14: ↑9 and ↓5 +4
Views 4.7K
Comments 6

CFS vs O(1) scheduler

Configuring Linux *
Думаю многие слышали, что помимо стандартного O(1) планировщика в linux, появился CFS(Completely Fair Scheduler; «абсолютно справедливый планировщик»), над которым работает Ingo Molnar. Собственно эту заметку я хотел бы посвятить сравнению этих двух планировщиков и краткому рассмотрению их основных алгоритмов. В конце заметки можно немного почитать по FreeBSD'шный планировщие ULE.

preamble:
  • O(1) scheduler — вкратце, политика планировщика была довольно проста: каждый cpu имел 2 очереди: в одной находятся таски, которые в скором времени будут запущены, в другом — спящие таски. когда первая очередь оказывалась пуста, она менялась местами со второй, соответсвенно во второй очереди все спящие процессы 'просыпались', а в первая служила очередью для отработавших и уснувших процессов. посему время работы алгоритма во-первых, не зависит от кл-ва процессов, во-вторых, оно постоянно — O(1).
  • Completely Fair Scheduler — для хранения процессов использует red-black дерево, где ключём является wait_runtime каждого процесса. wait_runtime — это кл-во наносекунд, которое данный процесс недоработал или переработал. т.е. если оно < 0, значит он переработал, если оно > 0, значит он недоработал. эта мера позволяет засечь out-of-ballance от 'идеального случая'. в зависимости от значения wait_runtime, процесс занимает своё место в дереве. если wait_runtime < 0, то, я полагаю, процесс будет сидеть на нижних уровнях, если больше 0, то ближе к вершине. следовательно, CFS — не O(1) scheduler, он O(logN).


Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Views 5.8K
Comments 21

Запускаем VMware Workstation с kernel 2.6.24

Lumber room
Текущая версия VMware Workstation 6.0.2 for Linux (Build: 59824) не поддерживает ядро 2.6.24. Для исправления это ситуации достаточно выполнить несколько шагов, которые описаны ниже.

1. останавливаем рабочую vmware
в ubuntu: sudo /etc/init.rc/vmware stop
в других:
$lsmod | grep vm
sudo rmmod vmmon
sudo ifdown vmnet2. удаляем сервисы
sudo /usr/bin/vmware-uninstall-vix.pl
sudo /usr/bin/vmware-uninstall.pl

3. скачиваем и распаковываем последнюю версию VMware Workstation 6.0.2. Затем инсталируем:
sudo vmware-install.pl
Отвечаем на все вопросы инсталятора и игнорируем ошибки, которые будут выводиться при создании модулей.

4. скачиваем и распаковываем патч vmware-any-any-update-116
запускаем
sudo runme.pl

К сожалению, автор патча не известен, патч найден на форумах vmware.

PS: Метод успешно работает на всех версиях ядра 2.6.24.
Total votes 9: ↑6 and ↓3 +3
Views 293
Comments 2

Обновление kernel'а без ребута или просто Ksplice

Configuring Linux *
После любого обновления или пачта ядра, мы должны перегрузить систему.
Но, мы можем не делать этого, если посмотреть в сторону Ksplice
Ksplice распространяется под GPL 2 и дает возможность патчить ядро и ставить security апдейты — без перезагрузки системы.

Проверено на: kernel 2.6.8 Debain, Ubuntu и RHEl.

Подробное описание и документация
Total votes 22: ↑18 and ↓4 +14
Views 2.9K
Comments 21

Обновление Linux ядра: 2.6.25.14 и 2.6.26.1. Что нового ожидается в 2.6.27

Configuring Linux *
Выпущены обновления Linux ядра — 2.6.26.1 и 2.6.25.14, содержащие исправления ошибок в различных подсистемах. Кроме того, несколько дней назад был выпущен первый релиз-кандидат ядра 2.6.27, по которому можно судить об ожидаемых новшествах. Версия 2.6.27-rc1 включает в себя 12 Мб изменённого кода, что на 50% больше, чем в 2.6.26-rc1. Половина всех изменений связана с драйверами устройств, около 25% с архитектурными изменениями (удаление директории arch/ppc/).

Список основных исправлений и новшеств 2.6.27:
* Улучшения в системном вызове kexec(), позволяющие драйверам выполнять различные задачи, перед переходом системы в спящий режим или после просыпания. Это призвано решить основные проблемы с standby-режимами.
* Улучшенная проверка целостности данных для блочных устройств;
* Система трассировки операций ввода/вывода, отраженных в память (memory-mapped I/O trace mmiotrace). Например, можно использовать для реверс инжиниринга бинарных драйверов, путем отслеживания их взаимодействия с оборудованием;
* Поддержка создания контрольных точек и восстановление из них виртуальных машин в Xen;
* Оболочка трассировки функций для упрощения управления realtime-характеристиками ядра (ftrace);
* Упорядочивание трассировочного кода всех процессов, для работы с ними, как с одним юнитом (tracehook patches);
* Усовершенствование некоторых системных вызовов, оперирующих файловыми дескрипторами, с целью увеличения безопасности при обращении к ним из пользовательских программ (например, более строгий контроль входящих параметров, защита от race condition в многопоточных приложениях);
* Отложенное распределение информации в ext4;
* Multiqueue networkin — организация нескольких очередей пакетов для одного устройства;
* Поддержка файловой системы UBIFS для работы на flash накопителях с ограниченным числом циклов записи данных. Файловая система разработана компанией Nokia;
* Новые драйверы сетевых устройств Atheros AR8121, AR8113 и AR8114 Gigabit LAN для обладателей Asus Eee PC, Broadcom BCM57711, BCM57711E.

Ссылка на источник
Total votes 25: ↑21 and ↓4 +17
Views 746
Comments 3

Программирование в ring0 для Windows: вводная статья

System Programming *

По долгу службы мне пришлось столкнуться с программированием драйверов под Windows. Люди, которые никогда не сталкивались с этой задачей могут предположить, что драйвера — это что-то очень сложное и непосредственно взаимодействующее с железом. Отчасти они правы, а отчасти нет. В этой статье я постараюсь рассказать о том, что же из себя представляют Windows драйвера изнутри и с чем мне пришлось столкнуться. Статья является некоторым введением и не содержит «кусков кода».

Читать дальше →
Total votes 123: ↑113.5 and ↓9.5 +104
Views 27K
Comments 32

Пишем свой первый Windows-драйвер

System Programming *
Итак, после моей предыдущей статьи я понял что тема про программирование драйверов Windows интересна хабровчанам, поэтому продолжу. В этой статье я решил разобрать простую программу-драйвер, которая делает только то, что пишет отладочное сообщение «Hello world!» при старте драйвера и «Goodbye!» при завершении, а также опишу те средства разработки, которые нам понадобятся для того, чтобы собрать и запустить драйвер.

Читать дальше
Total votes 99: ↑95 and ↓4 +91
Views 114K
Comments 35

Crash dump'ы и KeCapturePersistentThreadState

System Programming *
Я тут обнаружил очень занятную недокументированную функцию, экспортируемую ядром, на которую нет ссылок внутри ядра, но которая делает весьма занятную вещь. А именно, записывает в переданный кусок памяти полноценный minidump на данный момент времени.
Весьма полезно с учетом того, что там (в дампе) есть оффсеты неэкспортируемых структур типа PsLoadedModuleList, которые могут пригодиться.
Спасибо Freeman за помощь)

ULONG
NTAPI
KeCapturePersistentThreadState(
PCONTEXT Context,
PKTHREAD Thread,
ULONG BugCheckCode,
ULONG BugCheckParameter1,
ULONG BugCheckParameter2,
ULONG BugCheckParameter3,
ULONG BugCheckParameter4,
PVOID VirtualAddress
);


Входные параметры:
Context — текущий контекст (можно от балды, нужно лишь заполнить EIP & ESP)
Thread — текущий поток. можно указать NULL, тогда она сама возьмет текущий
BugCheckCode, ParametersX — багчек код и аргументы, которые она запишет в дамп.
VirtualAddress — адрес выделенных 16 страниц памяти (64кб), куда она положит аккуратно готовенький крешдамп.

Пример:

Заголовок дампа:
typedef struct _DUMP_HEADER {
/* 00 */ ULONG Signature;
/* 04 */ ULONG ValidDump;
/* 08 */ ULONG MajorVersion;
/* 0c */ ULONG MinorVersion;
/* 10 */ ULONG DirectoryTableBase;
/* 14 */ PULONG PfnDataBase;
/* 18 */ PLIST_ENTRY PsLoadedModuleList;
/* 1c */ PLIST_ENTRY PsActiveProcessHead;
/* 20 */ ULONG MachineImageType;
/* 24 */ ULONG NumberProcessors;
/* 28 */ ULONG BugCheckCode;
/* 2c */ ULONG BugCheckParameter1;
/* 30 */ ULONG BugCheckParameter2;
/* 34 */ ULONG BugCheckParameter3;
/* 38 */ ULONG BugCheckParameter4;
/* 3c */ CHAR VersionUser[32];
/* 5c */ UCHAR PaeEnabled;
UCHAR NotUsed[3];
/* 60 */ PVOID KdDebuggerDataBlock;
} DUMP_HEADER, *PDUMP_HEADER;


Использование функции: www.everfall.com/paste/id.php?mkgmkfg1a057

Кодес получает дамп, показывает адерса MmPfnDatabase, PsActiveProcessHead, PsLoadedModuleList и сбрасывает дамп на диск. Дамп можно спокойно запихать в WinDbg и изучать

Вообщем, весьма занятная штуковина…

Надо будет переписать свой gr8lkd (http://gr8lkd.googlecode.com/) с использованием этой функции.
Total votes 17: ↑11 and ↓6 +5
Views 1.6K
Comments 3

Btrfs вошла в состав основной ветки ядра Linux

Configuring Linux *
Translation
Btrfs, файловая система Linux следующего поколения, задуманная Oracle и предназначенная для того, чтобы конкурировать с некоторыми особенностями файловой системы Sun ZFS, только что вошла в состав ядра Linux 2.6.29.

Сегодня утром Линус Торвальдс, наконец, «запихнул» Btrfs в основное ядро.

С этой файловой системой, которая привносит ряд преимуществ по сравнению с EXT4 в ядро Linux, а так же kernel mode-settings и другими особенностями, ядро Linux 2.6.29 видится очень интересным релизом. Подробнее о файловой системы Btrfs можно прочитать на веб-сайте проекта.

PS. Ранее про файловые системы на Хабре была статья, где кратко описываются основные особенности различных FS, в том числе и Btrfs.

Update. Вышел Linux 2.6.29-rc1. Релиз кандидат.
Total votes 33: ↑29 and ↓4 +25
Views 1.7K
Comments 25

Появился первый релиз-кандидат ядра Linux 2.6.29.

Configuring Linux *
Только вчера я опубликовал новость о включении в состав основной ветки ядра linux 2.6.29 файловой системы Btrfs, а сегодня уже новое сообщение: вышел первый релиз-кандидат ядра Linux 2.6.29.

Официальное объявление можно прочитать здесь.
Полный список изменений Linux 2.6.29-rc1 — здесь.
Total votes 29: ↑27 and ↓2 +25
Views 449
Comments 17

Мысли на полях и сжатый перевод материалов Ubuntu Open Week

Lumber room
Перенесу-ка я пожалуй мои комментарии к этой теме в свой блог. А там посмотрим.

Краткая предыстория. Стремясь быть ближе к народу Canonical проводит UbuntuOpenWeek в формате чатов разработчиков системы с заинтересованными людьми. После прочтения я постарался дать сжато основные мысли, которые были затронуты в живом общении разработчиков с комьюнити. Естественно это не дословный перевод.

Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Views 170
Comments 7

Ubuntu Developer Week: Пакуем модули ядра с DKMS

Configuring Linux *
Краткая компиляция irc-чата в рамках Ubuntu Developer Week на тему «Packaging Kernel modules with DKMS»

Пакуем модули ядра с DKMS. Докладчик: уже известный нам Ben Collins

Смотрю я на список материалов январского Ubuntu Developer Week и глаз радуется. Много хорошего материала было рассмотрено в добровольно-принудительном общении разработчиков с комьюнити. Начнем сегодня с разговора о ядерных модулях и одном замечательном фреймворке для ухода за ними.
Читать дальше →
Total votes 16: ↑14 and ↓2 +12
Views 4.5K
Comments 3

Новая версия ядра Linux 2.6.30

Configuring Linux *
Еще пару дней назад вышла новая версия ядра Linux 2.6.30

Из нового:
  • поддержка файловой системы ориентированной на последовательную запись больших массивов информации, NILFS2 (log-structured filesystem)
  • поддержка высокопроизводительной сетевой распределенной файловой системы POHMELFS (Parallel Optimized Host Message Exchange Layered File System)
  • поддержка файловой системы для устройств с объектно-ориентированным хранением данных EXOFS
  • поддержка кэширующей файловой системы FS-Cache
  • поддержка протокола межпроцессного общения для серверов в кластере RDS (Reliable Datagram Sockets)
  • поддержка быстрой загрузки ядра (Fastboot) от Intel за счет асинхронного опроса устройств
  • поддержка текущей спецификации разрабатываемого стандарта IEEE 802.11w

и т.д. changelog тут
Total votes 53: ↑43 and ↓10 +33
Views 1.2K
Comments 34

Проблемы с ext4 в ubuntu jaunty

Configuring Linux *
Коротко о главном — ext4 в ubuntu jaunty нестабильна. При определённых обстоятельствах, в которые включается относительно малый объём свободного места — несколько Гб, при попытке удаления больших файлов или большого количества файлов, происходит зависание системы. Глухое зависание, что называется «под ресет». Есть соответствующий баг-репорт. Но это лечимо.

Читать дальше →
Total votes 14: ↑10 and ↓4 +6
Views 1K
Comments 27