Как стать автором
Обновить
63
0
Andrei Vagin @avagin

Системный программист

Отправить сообщение

Насколько эффективна виртуальная файловая система procfs и можно ли ее оптимизировать

Время на прочтение9 мин
Количество просмотров8.8K

Файловая система proc (в дальнейшем просто procfs) является виртуальной файловой системой, которая предоставляет информацию о процессах. Она — “прекрасный” пример интерфейсов следующих парадигме “все является файлом”. Procfs была разработана очень давно: во времена, когда серверы в среднем обслуживали несколько десятков процессов, когда открыть файл и вычитать информацию о процессе не было проблемой. Однако время не стоит на месте, и сейчас серверы обслуживают сотни тысяч, а то и больше процессов одновременно. В таком контексте идея “открыть файл для каждого процесса, чтобы вычитать интересующие данные” уже не выглядит такой привлекательной, и первое что приходит на ум чтобы ускорить чтение — это получение информации о группе процессов за одну итерацию. В этой статье мы попробуем найти элементы procfs которые можно оптимизировать.


image

Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии20

Linux все еще не торт

Время на прочтение6 мин
Количество просмотров42K
Эта история началась около месяца назад, когда Кирилл Тхай добавил поддержку вложенных пространств имен в CRIU, после чего наша система CI приказала долго жить. В тот момент ничто не предвещало тех увлекательных приключений, в которые мы оказались вовлечены.

image
Читать дальше →
Всего голосов 101: ↑94 и ↓7+87
Комментарии44

Как обновить ядро в системе без перезапуска сервисов (пошаговая инструкция)

Время на прочтение8 мин
Количество просмотров13K
Как вы думаете насколько реально зайти на машину по ssh, обновить систему, загрузить новое ядро и при этом оставаться в той же ssh сессии. Сейчас есть модное движения по обновлению ядра на лету (ksplice, KernelCare, ReadyKernel, etc), но у этого способа есть много ограничений. Во-первых, он не позволяет применять изменения, которые меняют структуру данных. Во-вторых, объекты в памяти могут уже содержать неверные данные, которые могут вызвать проблемы в дальнейшем. Здесь будет описан более «честный» способ обновить ядро. На самом деле, сам способ уже давно известен [1], а ценность этой статьи в том, что мы разберем все в деталях на реальном примере, поймем, насколько это просто или сложно, и чего стоит ждать от подобных экспериментов.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии11

Новый интерфейс для получения атрибутов процессов в Linux

Время на прочтение8 мин
Количество просмотров19K
Разрабатывая CRIU, мы поняли, что текущий интерфейс получения информации о процессах не идеален. К тому же, подобная проблема была успешно решена для сокетов. Мы попытались перенести эти наработки на процессы и получили достаточно хорошие результаты, о которых вы узнаете, дочитав эту статью до конца.

Недостатки текущего интерфейса


Прочитав заголовок, возникает вопрос:”A чем же старый интерфейс не угодил”? Многие из вас знают, что сейчас информация о процессах собирается по файловой системе procfs. Здесь каждому процессу соответствует директория, которая содержит несколько десятков файлов.

$ ls /proc/self/ 
attr             cwd      loginuid    numa_maps      schedstat  task
autogroup        environ  map_files   oom_adj        sessionid  timers
auxv             exe      maps        oom_score      setgroups  uid_map
cgroup           fd       mem         oom_score_adj  smaps      wchan
clear_refs       fdinfo   mountinfo   pagemap        stack
cmdline          gid_map  mounts      personality    stat
comm             io       mountstats  projid_map     statm
coredump_filter  latency  net         root           status
cpuset           limits   ns          sched          syscall

Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии20

Задачка из реальной жизни: Как восстановить дерево процессов в Linux

Время на прочтение2 мин
Количество просмотров9.4K
Мы разрабатываем проект CRIU (Checkpoint/Restore in Userspace) и у нас возникла достаточно интересная задача о том, как восстановить оригинальное дерево процессов. Я предлагаю вам попытаться решить ее.

Задача


CRIU — это утилита, которая позволяет сохранить состояние процессов на диск и постановить их позднее на этой или на любой другой машине. Одной из подзадач восстановления является нахождение последовательности действий для того, чтобы восстановить дерево процессов. Входные данные содержат набор параметров для каждого процесса: уникальный идентификатор (PID), ссылку на родителя (PPID), идентификатор сессии (SID).

image
Читать дальше →
Всего голосов 20: ↑17 и ↓3+14
Комментарии12

Зачем пользователи GIT-а редактируют свои коммиты

Время на прочтение2 мин
Количество просмотров57K
В последних двух выпусках Радио-T ведущие пытались обсудить GIT. Евгений (@Umputun) задавался вопросом зачем нужен rebase и очень удивился, когда я спросил, редактирует ли он коммиты. На мой взгляд, чтоб понять GIT, достаточно вникнуть в процесс разработки Linux Kernel, т к создавался он именно для этого.
Читать дальше →
Всего голосов 113: ↑103 и ↓10+93
Комментарии123

В преддверии очередного релиза CRIU

Время на прочтение6 мин
Количество просмотров4.5K
Сегодня я хочу продолжить серию статей о проекте CRIU (Checkpoint/restore mostly in the userspace). Проекту чуть более года, а по возможностям он уже в плотную приблизился к подобной функциональности в OpenVZ.
Первая часть статьи расскажет о новой функциональности, которая появилась в CRIU за последние несколько месяцев. Вторая часть расскажет о нашем опыте внедрения новых технологий для улучшения процесса разработки.

Новая функциональность


Снапшот памяти и итеративная миграция


Киллер фича следующего релиза — итеративные снапшоты состояния процесса и, как следствие, итеративная миграция. В обоих случаях на каждой следующей итерации, сохраняется только та часть памяти, которая изменилась с предыдущего раза. В первом случае это позволяет сократить время и количество данных на диске. В случае миграции существенно сокращается время простоя (downtime) системы, потому что на первой итерации копирования памяти процессы не замораживаются.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии10

Обновляем ядро без перезагрузки

Время на прочтение2 мин
Количество просмотров22K
Сегодня я хочу рассказать о моей самой любимой фиче в последнем релизе Parallels Cloud Server — rebootless update, или обновление без перезагрузки.

Перезагрузка — это простой сервера и потеря состояния текущих активностей. Она нежелательна для сервера, которым пользуется большое количество людей. На данный момент есть популярная технология Ksplice, где изменения накатываются на живую систему. Это ненадежно, не каждое обновление удается так накатить. И вообще, нет гарантий, что проблемный код не успел наследить. Еще одна немаловажная проблема в том, что разработчики с неохотой берутся за баги после таких обновлений. Кто его знает, что в этой солянке варилось.
Читать дальше →
Всего голосов 62: ↑57 и ↓5+52
Комментарии24

CRIU 0.2 и Linux Containers — новые возможности

Время на прочтение3 мин
Количество просмотров4.9K
На Хабре уже выходила статья, приуроченная к выходу CRIU 0.1. Эта версия продукта была недостаточно функциональна и скорее демонстрировала работоспособность уникальной технологии, разрабатываемой компанией Parallels.

С тех пор была проделана большая работа и возможности CRIU вплотную приблизились к главной цели: сохранение и восстановление Linux контейнера. Несмотря на то, что пока поддерживается только пустой контейнер со стандартным набором процессов, есть все основания полагать, что проект обречён на успех.

А если вас не интересуют контейнеры, то вам, возможно, понравится ещё одна новая возможность —
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии0

CRIU — новый амбициозный проект для сохранения и восстановления состояния процессов

Время на прочтение4 мин
Количество просмотров6.2K
CRIU (application Checkpoint/Restore In Userspace) — это амбициозный, быстро развивающийся проект, который позволяет сохранить состояние программы в виде контрольной точки, и впоследствии возобновить работу приложения с этой точки.
Возможности применения программного обеспечения для создания контрольных точек достаточно разнообразны. К примеру, OpenVZ использует похожий механизм для “живой” миграции. Parallels Virtuozzo использует подобный механизм для быстрого возобновления работы контейнеров после обновления ядра. CRIU уже используется в высокопроизводительных кластерах для для сохранения промежуточных результатов вычислительных процессов, используемых для возобновления работы приложения в случае сбоя.
В этой статье рассказывается, как CRIU сохраняет и восстанавливает состояние программы, и почему этот проект может быть успешнее своих предшественников.
Читать дальше →
Всего голосов 52: ↑51 и ↓1+50
Комментарии19

Алгоритм: Как оформить баг на ядро Linux

Время на прочтение4 мин
Количество просмотров2.3K
Мой опыт в разработке и отладке Parallels Virtuozzo Containers позволил обобщить и сформулировать список пожеланий к описанию проблемы пользователя, который позволяет существенно уменьшить время диагностирования и решения проблемы в ядре операционной системы Linux. Прошу отметить, что при всей очевидности некоторых рекомендаций многие участники open-source сообщества по-прежнему пренебрегают ими. Алгоритм представлен подкатом.
Читать дальше →
Всего голосов 95: ↑92 и ↓3+89
Комментарии14

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность