Новый Интерфейс Для Получения Атрибутов Процесса В Linux

Разрабатывая CRIU, мы поняли, что текущий интерфейс получения информации о процессах не идеален.

Кроме того, аналогичная проблема была успешно решена для сокетов.

Мы попытались перенести эти разработки в процессы и получили неплохие результаты, о которых вы узнаете, дочитав эту статью до конца.

Недостатки текущего интерфейса После прочтения заголовка возникает вопрос: «А чем вам старый интерфейс не понравилсяЭ» Многие из вас знают, что информация о процессах теперь собирается через файловую систему.

прокфс .

Здесь каждому процессу соответствует каталог, содержащий несколько десятков файлов.

  
   

$ 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

Каждый файл содержит ряд атрибутов.

Первая проблема заключается в том, что нам придется прочитать хотя бы один файл на каждый процесс, т. е.

сделать три системных вызова.

Если вам нужно собрать данные о сотнях тысяч процессов, это может занять много времени даже на мощной машине.

Некоторые, вероятно, помнят, что утилиты ps или top работают медленно на загруженных машинах.

Вторая проблема связана с тем, как свойства процесса разбиваются на файлы.

У нас есть хороший пример, показывающий, что текущее разбиение не очень хорошее.

Задача CRIU — получить данные обо всех областях памяти процесса.

Если мы заглянем в файл /proc/PID/maps, то обнаружим, что он не содержит флагов, необходимых для восстановления областей памяти.

К счастью для нас, есть еще один файл — /proc/PID/smaps, в котором содержится необходимая информация, а также статистика потраченной физической памяти (которая нам не нужна).

Простой эксперимент показывает, что генерация первого файла занимает на порядок меньше времени.



$ time cat /proc/*/maps > /dev/null real

Теги: #linux #opensourse #procfs #criu #openvz #virtuozzo #task_diag #kernel #netlink #linux kernel #ps #top #containers #open source #Системное программирование #Разработка Linux

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.