Автор Тема: /proc source code  (Прочетена 4023 пъти)

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
/proc source code
« -: Sep 12, 2011, 15:27 »
Здравейте,
   Бихте ли могли да ме упътите къде в ядрото мога да намеря source кода на програмата която генерира информацията в /proc. Интересува ме конкретно какви system calls прави програмата за да генерира инфо в /proc

Поздрави
Активен

triel

  • Напреднали
  • *****
  • Публикации: 36
    • Профил
Re: /proc source code
« Отговор #1 -: Sep 12, 2011, 17:03 »
https://github.com/torvalds/linux/tree/master/fs/proc
Активен

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: /proc source code
« Отговор #2 -: Sep 12, 2011, 22:42 »
благодаря, нещо не намирам това което ми трябва.
Има ли начин да взема натоварването на CPU, RAM, HDD като правя system calls от С демон, без да вземам информацията от /proc?
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: /proc source code
« Отговор #3 -: Sep 13, 2011, 00:59 »
Ядрото не вика syscalls за да вземе въпросната информация. Всъщност, викането на syscalls от kernel кода, въпреки че е възможно, е много лоша идея и никой нормален човек няма да те посъветва да го правиш. syscall-а е механизъм, който предоставя на userspace-ския код да влиза в ring0 и да вика някакъв kernel-ски код, а не kernel-а да вика себе си и да проверява доколко въпросните syscall функции са reentrant-ни.

Няма syscall-ове които да ти връщат "натоварването" на CPU-тата.

"Генерирането" на информацията в proc става от страна на kernel кода. Това е виртуална файлова система и четенето от нея "прескача" приятно голяма част от глупостите свързани с vfs слоя. Има си API за това, което е просто за ползване. Регистрираш си няколко callback функции - при четене от обекта и писане в обекта. Единственото усложнение е че трябва да ползваш copy_from_user()/copy_to_user(), поради ред причини, като например че ако върнеш на userspace-ския процес указател към kernel-ска памет, твърде вероятно ще го segfault-неш. Освен което силно те съветвам да не си пишеш kernel module, който да ти връща каквото ти трябва, след като 1) е написано вече и 2) една проверка за дължината на буфера да пропуснеш и отваряш вратичка за local DoS или нещо по-лошо.


И като цяло въобще не виждам смисъла от това. Прекалено бавно изчиташ информацията от procfs??? Искаш да следиш въпросните натоварвания с гранулярност милисекунди? Какъв е смисъла от упражнението?
Активен

"Knowledge is power" - France is Bacon

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: /proc source code
« Отговор #4 -: Sep 13, 2011, 10:12 »
Ядрото не вика syscalls за да вземе въпросната информация. Всъщност, викането на syscalls от kernel кода, въпреки че е възможно, е много лоша идея и никой нормален човек няма да те посъветва да го правиш. syscall-а е механизъм, който предоставя на userspace-ския код да влиза в ring0 и да вика някакъв kernel-ски код, а не kernel-а да вика себе си и да проверява доколко въпросните syscall функции са reentrant-ни.

Няма syscall-ове които да ти връщат "натоварването" на CPU-тата.

"Генерирането" на информацията в proc става от страна на kernel кода. Това е виртуална файлова система и четенето от нея "прескача" приятно голяма част от глупостите свързани с vfs слоя. Има си API за това, което е просто за ползване. Регистрираш си няколко callback функции - при четене от обекта и писане в обекта. Единственото усложнение е че трябва да ползваш copy_from_user()/copy_to_user(), поради ред причини, като например че ако върнеш на userspace-ския процес указател към kernel-ска памет, твърде вероятно ще го segfault-неш. Освен което силно те съветвам да не си пишеш kernel module, който да ти връща каквото ти трябва, след като 1) е написано вече и 2) една проверка за дължината на буфера да пропуснеш и отваряш вратичка за local DoS или нещо по-лошо.


И като цяло въобще не виждам смисъла от това. Прекалено бавно изчиташ информацията от procfs??? Искаш да следиш въпросните натоварвания с гранулярност милисекунди? Какъв е смисъла от упражнението?

Съществува ли друга възможност освен kernel module и /proc?

Целта ми е да правя мониторинг на сървъри. Ето за сега възможностите:
1. Кernel module който да събира данни от таблици в ядрото и daemon да прави запитвания към kernel module за стойностите

Плюсове - покривам всички linux дистрибуции на веднъж
минуси - трудно за писане

2. Да се прави демон който да чете от /proc стойности.
плюсове - най-лесно
минуси - за всяка архитектура proc е различно, някъде липсва proc, някъде не е mounted, за всяка linux дистрибуция и архитектура трябва да се тества, информацията не е пълна, дори с времето може да се промени информацията е него

Нещо важно - ако HDD си замине при решението с proc демона блокира, а да си замине HDD се случва

Мисля че ако трябва да се слагат нещата на кантар kernel module печели ако гледаме в дългосрочен план

« Последна редакция: Sep 13, 2011, 10:16 от rcbandit »
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: /proc source code
« Отговор #5 -: Sep 13, 2011, 10:58 »


Целта ми е да правя мониторинг на сървъри. Ето за сега възможностите:
1. Кernel module който да събира данни от таблици в ядрото и daemon да прави запитвания към kernel module за стойностите

Плюсове - покривам всички linux дистрибуции на веднъж
минуси - трудно за писане

И твърде вероятно част от информацията няма да ти е достъпна, дори за kernel модула. Не е задължително функциите и структурите от данни да са ти достъпни. Ако пачнеш самото ядро - да, всичко ти е налично. Ако пишеш kernel модул - не, достъпни са ти само изрично export-натите неща. Дали ще успееш да си събереш нужната информация - не знам.


Цитат
2. Да се прави демон който да чете от /proc стойности.
плюсове - най-лесно
минуси - за всяка архитектура proc е различно, някъде липсва proc, някъде не е mounted, за всяка linux дистрибуция и архитектура трябва да се тества, информацията не е пълна, дори с времето може да се промени информацията е него

Що се отнася до load avg, interrupts, утилизация на памет и т.н. на всяка архитектура нещата са същите и няма разлики.

Да - с времето може да се промени, обаче те уверявам, че kernel-ските API-та се променят още по-често и ще имаш много повече ядове с това.

Ако сървъра няма procfs това е резултат от нечия секюрити параноя предполагам...такива хора заслужават да не може да им се мониторясват машините. Съвсем сериозно, не виждам защо трябва да се покриват всички случаи, включай тези включващи тъпанарски изпълнения на потребителите.

Цитат
Нещо важно - ако HDD си замине при решението с proc демона блокира, а да си замине HDD се случва

Това пък как го реши? Защо блокира?

Цитат
Мисля че ако трябва да се слагат нещата на кантар kernel module печели ако гледаме в дългосрочен план

О,да, особено ако си биеш шута след един месец и оставиш някой нещастник да го съпортва в следващите няколко години.
Активен

"Knowledge is power" - France is Bacon

Neo2SHYAlien

  • Напреднали
  • *****
  • Публикации: 93
  • Distribution: Debian Sid
  • Window Manager: Gnome3, E17
    • Профил
    • WWW
Re: /proc source code
« Отговор #6 -: Sep 13, 2011, 11:00 »
само за мониторинг един елементарен bash с ps ax да речем не върши ли работа и пак покриваш всички дистрибуции :)
Активен

- Би ли ми казал кой път да хвана оттук? - попита Алиса.
- Зависи накъде отиваш - отвърна Котаракът.
- Все едно накъде...- каза малкото момиче.
- Тогава е все едно кой път ще вземеш - рече Котаракът.

rcbandit

  • Напреднали
  • *****
  • Публикации: 144
    • Профил
Re: /proc source code
« Отговор #7 -: Sep 13, 2011, 11:24 »


Целта ми е да правя мониторинг на сървъри. Ето за сега възможностите:
1. Кernel module който да събира данни от таблици в ядрото и daemon да прави запитвания към kernel module за стойностите

Плюсове - покривам всички linux дистрибуции на веднъж
минуси - трудно за писане

И твърде вероятно част от информацията няма да ти е достъпна, дори за kernel модула. Не е задължително функциите и структурите от данни да са ти достъпни. Ако пачнеш самото ядро - да, всичко ти е налично. Ако пишеш kernel модул - не, достъпни са ти само изрично export-натите неща. Дали ще успееш да си събереш нужната информация - не знам.


Цитат
2. Да се прави демон който да чете от /proc стойности.
плюсове - най-лесно
минуси - за всяка архитектура proc е различно, някъде липсва proc, някъде не е mounted, за всяка linux дистрибуция и архитектура трябва да се тества, информацията не е пълна, дори с времето може да се промени информацията е него

Що се отнася до load avg, interrupts, утилизация на памет и т.н. на всяка архитектура нещата са същите и няма разлики.

Да - с времето може да се промени, обаче те уверявам, че kernel-ските API-та се променят още по-често и ще имаш много повече ядове с това.

Ако сървъра няма procfs това е резултат от нечия секюрити параноя предполагам...такива хора заслужават да не може да им се мониторясват машините. Съвсем сериозно, не виждам защо трябва да се покриват всички случаи, включай тези включващи тъпанарски изпълнения на потребителите.

Цитат
Нещо важно - ако HDD си замине при решението с proc демона блокира, а да си замине HDD се случва

Това пък как го реши? Защо блокира?

Цитат
Мисля че ако трябва да се слагат нещата на кантар kernel module печели ако гледаме в дългосрочен план

О,да, особено ако си биеш шута след един месец и оставиш някой нещастник да го съпортва в следващите няколко години.

Май ще трябва да се търси друго универсално решение.

п.с
Със скриптове няма как да стане работата.

p.s

Свалих кода на ядрото и намерих в linux-2.6.39/fs/proc директорията кода на /proc който генерира информацията.
Дали ще се получи да взема сорс кода само там където взема например CPU RAM etc. - meminfo.c, cpuinfo.c
И го сложа в kernel module, като модифицирам малко кода да не пише в файл взетите стойности а само стойностите да взема.
Дали ще има проблем с permissions когато модула рови из ядрото да взема данни заедно с оригиналния proc?
« Последна редакция: Sep 13, 2011, 11:53 от rcbandit »
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: /proc source code
« Отговор #8 -: Sep 13, 2011, 14:14 »
....
Човече, какво толкова искаш да гледаш, защо не си облекчиш живота и не инсталираш nagios с няколко прости чека. То ако тръгнат нещата ако ще и сто модула да си сложил няма да имаш полза
Активен

0x2B|~0x2B

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Source Code
Общ форум
Йордан 5 3725 Последна публикация Nov 28, 2003, 15:26
от Йордан
Windows98 Source Code & Errors
Хумор
empty 1 2446 Последна публикация Sep 21, 2004, 09:35
от
SOURCE CODE?
Общ форум
ferfaks 2 2509 Последна публикация Sep 09, 2009, 14:07
от laskov
Oracle C driver source code
Общ форум
rcbandit 6 3848 Последна публикация Feb 16, 2011, 22:27
от rcbandit
Проблем с VLC 0.8.6d - source code
Настройка на програми
Nik123 7 3152 Последна публикация Jan 03, 2013, 11:06
от jivco_t