Ядро маркері - Kernel marker

Ядро маркерлері статикалық ядро ​​құралдарын қолдау тетігі болды Linux ядросы сияқты арнайы құралдарға рұқсат беретін бастапқы код LTTng[1] немесе SystemTap[2] дейін із осы зонд нүктелерімен анықталған ақпарат. Ядролық маркерлерді ядро ​​кодында форманың бір сызғыштары жариялады:

trace_mark(аты, format_string, ...);

Қайда аты бұл маркердің ерекше атауы және format_string қалған аргументтер типтерін сипаттайды.

Маркер зондтың оған қосылған-қосылмағанына байланысты қосулы немесе өшірулі болуы мүмкін. Іздеу нүктесіне қосылғысы келетін код алдымен қоңырау шалады:

int marker_probe_register(const char *аты, const char *format_string, marker_probe_func *зонд, жарамсыз *pdata);

оны тіркеу зонд маркер нүктесімен қайта қоңырау шалу (pdata - бұл код бергісі келетін жеке деректер мәні зонд). Кейінірек зонд қосылады және өшіріледі:

int marker_arm(const char *аты);int marker_disarm(const char *аты);

Таңбалауыштарды пайдалану арқасында ішінара қосымша шығындар болады Жедел құндылықтар,[3] жад сілтемесін пайдаланбай және осылайша кэш жолдарын сақтамай, динамикалық қосуға және өшіруге болатын қосқыштарды кодқа қосатын тағы бір қолдау тетігі.[4]

Бұл статикалық аспаптық инфрақұрылымды құрудың бастапқы ынтасы - бұл динамикалық аспаптар механизмі тудырған үлкен өнімділік Kprobe байланысты болатын механизм үзіліс нүктелері. Статикалық аспаптар бастапқы кодтың өзгеруінен оңайырақ өмір сүре алады, себебі маркерлер бастапқы кодта болады.

Ядролық маркерлер негізінен а C алдын-ала өңдеу макро ол аспаптық функцияда а тармағын қосты функционалдық шақыру. Осылайша, екеуі де стек қондырғы іске қосылмаған кезде немесе функционалдық шақыру орындалмайды. Стек орнатуды және функцияны шақыруды орындайтын филиалды анықтау арқылы екіталай (пайдаланып gcc кіріктірілген күту ()), сілтеме беріледі құрастырушы қадағалау нұсқауларын алыс орналастыру үшін кэш сызықтары ядроны стандартты орындауға қатысады.[5]

Екі ядролық маркерлердің кемшіліктері анықталды[5] оны ауыстыруға әкелді Tracepoints:

  • Түрді тексеру скалярлық типтермен шектелді, себебі API форматтық жолдарға негізделген. Көрсеткіштерге трекер кодын беру керек болса, бұл проблема туындауы мүмкін.
  • Маркерлер аспаптың бастапқы регистрінде «жасырады», бұл аспаптың ғаламдық тізілімін сақтамайды. Бұл барлық ядролық ағаш бақыланбаса, атау кеңістігі мен аспаптар модификациясын бақылауды қиындатады.

Оларды іске асыратын патч-жинақ 2.6.24 нұсқасына біріктірілді,[6] ол ядролық маркерлерге қатысты мәселелерді шешу үшін олардың түпнұсқа авторы Матье Деснойерс статикалық зонд нүктелерінің қарапайым және қауіпсіз типтегі нұсқасын енгізді. Tracepoints. Tracepoints-ті енгізетін патч жиынтығы 2.6.28 нұсқасына біріктірілді,[7] ол 2008 жылдың 25 желтоқсанында шығарылды. Содан бастап ядро ​​таңбалаушылары ядро ​​көздерінен баяу алынып тасталды және соңында Linux ядро ​​2.6.32-де толығымен жойылды,[8][9] ол 2009 жылдың 3 желтоқсанында шығарылды.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Tracepoints және маркерлер Мұрағатталды 2009-09-23 сағ Wayback Machine, LTTng қадағалау викиі
  2. ^ Маркерлерді пайдалану, SystemTap Wiki
  3. ^ Mathieu Desnoyers, [08/10 патч] Жедел құндылық - Құжаттама[тұрақты өлі сілтеме ]
  4. ^ Mathieu Desnoyers, [7/8 патч] Жедел құндылықтар - құжаттама[тұрақты өлі сілтеме ]
  5. ^ а б Mathieu Desnoyers, Төмен әсерлі операциялық жүйені бақылау, Ph.D D. Диссертация, Génie informatique et génie logiciel бөлімі, Монреаль École Политехникасы, Монреаль Университеті, желтоқсан, 2009 ж.
  6. ^ Linux 2.6.24 Changelog, Linux Kernel Newbies
  7. ^ Linux 2.6.28 Changelog, Linux Kernel Newbies
  8. ^ Linux 2.6.32 Changelog, Linux Kernel Newbies
  9. ^ Кристоф Хеллвиг, fc537766 Мұрағатталды 2013-04-15 сағ Бүгін мұрағат қадағалау: маркерлерді, Torvalds 'Linux git ағашын алып тастаңыз

Сыртқы сілтемелер