Разрабатывая 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
-
Как Сэкономить Больше На Тонере – Кроме Цены
19 Oct, 24 -
Как Не Пойти На Работу
19 Oct, 24