Jump to content
    

Сделал инструмент для трассировки фунцкий ядра Линукс

Вернее сделал удобный интерфейс для инструмента, который находится в ядре и имеет интерфейс в debugfs.

Инструмент находится здесь:
https://github.com/stepanovr/Linux_kernel_trace

Пока только две функции.
kprobe  и измеритель количества и времени раборы функций.

Вот такую информацию дает:
Функции, содержащие "icmp" вызванные за 4 секунды по ядрам:

core 0
  Function                               Hit    Time            Avg             s^2
  --------                               ---    ----            ---             ---
  icmp_rcv                                35    232.480 us      6.642 us        42.858 us
  icmp_echo                                1    39.519 us       39.519 us       0.000 us
  icmp_reply                               1    38.112 us       38.112 us       0.000 us
  icmp_unreach                            34    35.740 us       1.051 us        0.101 us
  icmp_push_reply                          1    26.186 us       26.186 us       0.000 us
  icmp_glue_bits                           1    1.833 us        1.833 us        0.000 us
  icmpv4_global_allow                      1    1.000 us        1.000 us        0.000 us
  icmpv4_xrlim_allow                       1    0.723 us        0.723 us        0.000 us
  icmp_out_count                           1    0.722 us        0.722 us        0.000 us

core 1
  Function                               Hit    Time            Avg             s^2
  --------                               ---    ----            ---             ---

core 2
  Function                               Hit    Time            Avg             s^2
  --------                               ---    ----            ---             ---

core 3
  Function                               Hit    Time            Avg             s^2
  --------       

 

А это kprobе за 4 секунды

 

          <idle>-0       [000] D.s2. 1814073.886416: icmp_out_p: (icmp_out_count+0x0/0xb0)
          <idle>-0       [000] b.s2. 1814073.886424: icmp_out_r: (__ip_make_skb+0x3dc/0x480 <- icmp_out_count)
          <idle>-0       [000] D.s2. 1814074.364198: icmp_out_p: (icmp_out_count+0x0/0xb0)
          <idle>-0       [000] b.s2. 1814074.364205: icmp_out_r: (__ip_make_skb+0x3dc/0x480 <- icmp_out_count)
          <idle>-0       [000] D.s2. 1814075.182794: icmp_out_p: (icmp_out_count+0x0/0xb0)
          <idle>-0       [000] b.s2. 1814075.182802: icmp_out_r: (__ip_make_skb+0x3dc/0x480 <- icmp_out_count)


где icmp_out_p -- вход в функцию icmp_out_count, а  icmp_out_r -- возврат из функции icmp_out_count.
Опции позволяют включить backtrace, заголовок растолковывающий знагение  D.s2., отфильтровать по активному в момент вызова функции PID или TID.

Для теста надо пинговать испытуемый компьютер Иначе обозначенные функции появлеться не будут.
Или пинговать другие функции. Системные вызовы, переключатель контекста:

Например:
schedule
invoke_syscall
schedule_idle
__do_softirq
rcu_note_context_switch

Эти всегда вызываются.

 

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...