1. 16 1月, 2009 8 次提交
  2. 15 1月, 2009 6 次提交
    • I
      tracing: trace_stat.c cleanup · 55922173
      Ingo Molnar 提交于
      Impact: cleanup
      
      - whitespace / code alignment cleanups
      - avoid unnecessary forward prototype by reordering functions
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      55922173
    • L
      tracing/ftrace: add missing unlock in register_stat_tracer() · 42fab4b2
      Li Zefan 提交于
      We should unlock all_stat_sessions_mutex before returning failure.
      Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      42fab4b2
    • F
      tracing/function-graph-tracer: fix a regression while suspend to disk · 4a2b8dda
      Frederic Weisbecker 提交于
      Impact: fix a crash while kernel image restore
      
      When the function graph tracer is running and while suspend to disk, some racy
      and dangerous things happen against this tracer.
      
      The current task will save its registers including the stack pointer which
      contains the return address hooked by the tracer. But the current task will
      continue to enter other functions after that to save the memory, and then
      it will store other return addresses, and finally loose the old depth which
      matches the return address saved in the old stack (during the registers saving).
      
      So on image restore, the code will return to wrong addresses.
      And there are other things: on restore, the task will have it's "current"
      pointer overwritten during registers restoring....switching from one task to
      another... That would be insane to try to trace function graphs at these
      stages.
      
      This patch makes the function graph tracer listening on power events, making
      it's tracing disabled for the current task (the one that performs the
      hibernation work) while suspend/resume to disk, making the tracing safe
      during hibernation.
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      4a2b8dda
    • S
      trace: stop all recording to ring buffer on ftrace_dump · 0ee6b6cf
      Steven Rostedt 提交于
      Impact: limit ftrace dump output
      
      Currently ftrace_dump only calls ftrace_kill that is a fast way
      to prevent the function tracer functions from being called (just sets
      a flag and clears the function to call, nothing else). It is better
      to also turn off any recording to the ring buffers as well.
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      0ee6b6cf
    • L
      ring_buffer: reset write when reserve buffer fail · 6f3b3440
      Lai Jiangshan 提交于
      Impact: reset struct buffer_page.write when interrupt storm
      
      if struct buffer_page.write is not reset, any succedent committing
      will corrupted ring_buffer:
      
      static inline void
      rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer)
      {
      	......
      		cpu_buffer->commit_page->commit =
      			cpu_buffer->commit_page->write;
      	......
      }
      
      when "if (RB_WARN_ON(cpu_buffer, next_page == reader_page))", ring_buffer
      is disabled, but some reserved buffers may haven't been committed.
      we need reset struct buffer_page.write.
      
      when "if (unlikely(next_page == cpu_buffer->commit_page))", ring_buffer
      is still available, we should not corrupt it.
      Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      6f3b3440
    • S
      trace: print ftrace_dump at KERN_EMERG log level · 428aee14
      Steven Rostedt 提交于
      Impact: fix to print out ftrace_dump when expected
      
      I was debugging a hard race condition to only find out that
      after I hit the race, my log level was not at level to show
      KERN_INFO. The time it took to trigger the race was wasted because
      I did not capture the trace.
      
      Since ftrace_dump is only called from kernel oops (and only when
      it is set in the kernel command line to do so), or when a
      developer adds it to their own local tree, the log level of
      the print should be at KERN_EMERG to make sure the print appears.
      
      ftrace_dump is not called by a normal user setup, and will not
      add extra unwanted print out to the console. There is no reason
      it should be at KERN_INFO.
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      428aee14
  3. 14 1月, 2009 5 次提交
  4. 11 1月, 2009 5 次提交
  5. 08 1月, 2009 1 次提交
    • R
      ring_buffer: fix ring_buffer_event_length() · 465634ad
      Robert Richter 提交于
      Function ring_buffer_event_length() provides an interface to detect
      the length of data stored in an entry. However, the length contains
      offsets depending on the internal usage. This makes it unusable. This
      patch fixes this and now ring_buffer_event_length() returns the
      alligned length that has been used in ring_buffer_lock_reserve().
      
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NRobert Richter <robert.richter@amd.com>
      465634ad
  6. 07 1月, 2009 3 次提交
  7. 06 1月, 2009 2 次提交
  8. 01 1月, 2009 2 次提交
  9. 31 12月, 2008 1 次提交
  10. 30 12月, 2008 2 次提交
    • I
      tracing/kmemtrace: export kmemtrace_mark_alloc_node() / kmemtrace_mark_free() · 3fd4bc01
      Ingo Molnar 提交于
      Impact: build fix
      
      Also fix up Kconfig dependencies and include files.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      3fd4bc01
    • F
      tracing/kmemtrace: normalize the raw tracer event to the unified tracing API · 36994e58
      Frederic Weisbecker 提交于
      Impact: new tracer plugin
      
      This patch adapts kmemtrace raw events tracing to the unified tracing API.
      
      To enable and use this tracer, just do the following:
      
       echo kmemtrace > /debugfs/tracing/current_tracer
       cat /debugfs/tracing/trace
      
      You will have the following output:
      
       # tracer: kmemtrace
       #
       #
       # ALLOC  TYPE  REQ   GIVEN  FLAGS           POINTER         NODE    CALLER
       # FREE   |      |     |       |              |   |            |        |
       # |
      
      type_id 1 call_site 18446744071565527833 ptr 18446612134395152256
      type_id 0 call_site 18446744071565585597 ptr 18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
      type_id 1 call_site 18446744071565585534 ptr 18446612134405955584
      type_id 0 call_site 18446744071565585597 ptr 18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
      type_id 0 call_site 18446744071565636711 ptr 18446612134345164672 bytes_req 240 bytes_alloc 240 gfp_flags 208 node -1
      type_id 1 call_site 18446744071565585534 ptr 18446612134405955584
      type_id 0 call_site 18446744071565585597 ptr 18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
      type_id 0 call_site 18446744071565636711 ptr 18446612134345164912 bytes_req 240 bytes_alloc 240 gfp_flags 208 node -1
      type_id 1 call_site 18446744071565585534 ptr 18446612134405955584
      type_id 0 call_site 18446744071565585597 ptr 18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
      type_id 0 call_site 18446744071565636711 ptr 18446612134345165152 bytes_req 240 bytes_alloc 240 gfp_flags 208 node -1
      type_id 0 call_site 18446744071566144042 ptr 18446612134346191680 bytes_req 1304 bytes_alloc 1312 gfp_flags 208 node -1
      type_id 1 call_site 18446744071565585534 ptr 18446612134405955584
      type_id 0 call_site 18446744071565585597 ptr 18446612134405955584 bytes_req 4096 bytes_alloc 4096 gfp_flags 208 node -1
      type_id 1 call_site 18446744071565585534 ptr 18446612134405955584
      
      That was to stay backward compatible with the format output produced in
      inux/tracepoint.h.
      
      This is the default ouput, but note that I tried something else.
      
      If you change an option:
      
      echo kmem_minimalistic > /debugfs/trace_options
      
      and then cat /debugfs/trace, you will have the following output:
      
       # tracer: kmemtrace
       #
       #
       # ALLOC  TYPE  REQ   GIVEN  FLAGS           POINTER         NODE    CALLER
       # FREE   |      |     |       |              |   |            |        |
       # |
      
         -      C                            0xffff88007c088780          file_free_rcu
         +      K   4096   4096   000000d0   0xffff88007cad6000     -1   getname
         -      C                            0xffff88007cad6000          putname
         +      K   4096   4096   000000d0   0xffff88007cad6000     -1   getname
         +      K    240    240   000000d0   0xffff8800790dc780     -1   d_alloc
         -      C                            0xffff88007cad6000          putname
         +      K   4096   4096   000000d0   0xffff88007cad6000     -1   getname
         +      K    240    240   000000d0   0xffff8800790dc870     -1   d_alloc
         -      C                            0xffff88007cad6000          putname
         +      K   4096   4096   000000d0   0xffff88007cad6000     -1   getname
         +      K    240    240   000000d0   0xffff8800790dc960     -1   d_alloc
         +      K   1304   1312   000000d0   0xffff8800791d7340     -1   reiserfs_alloc_inode
         -      C                            0xffff88007cad6000          putname
         +      K   4096   4096   000000d0   0xffff88007cad6000     -1   getname
         -      C                            0xffff88007cad6000          putname
         +      K    992   1000   000000d0   0xffff880079045b58     -1   alloc_inode
         +      K    768   1024   000080d0   0xffff88007c096400     -1   alloc_pipe_info
         +      K    240    240   000000d0   0xffff8800790dca50     -1   d_alloc
         +      K    272    320   000080d0   0xffff88007c088780     -1   get_empty_filp
         +      K    272    320   000080d0   0xffff88007c088000     -1   get_empty_filp
      
      Yeah I shall confess kmem_minimalistic should be: kmem_alternative.
      
      Whatever, I find it more readable but this a personal opinion of course.
      We can drop it if you want.
      
      On the ALLOC/FREE column, + means an allocation and - a free.
      
      On the type column, you have K = kmalloc, C = cache, P = page
      
      I would like the flags to be GFP_* strings but that would not be easy to not
      break the column with strings....
      
      About the node...it seems to always be -1. I don't know why but that shouldn't
      be difficult to find.
      
      I moved linux/tracepoint.h to trace/tracepoint.h as well. I think that would
      be more easy to find the tracer headers if they are all in their common
      directory.
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      36994e58
  11. 29 12月, 2008 5 次提交
    • I
      tracing/selftest: remove TRACE_CONT reference · a103e2ab
      Ingo Molnar 提交于
      Impact: build fix
      
      TRACE_CONT is gone - fix up the self-test too.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      a103e2ab
    • I
      tracing/ftrace: make trace_find_cmdline() generally available · f7d48cbd
      Ingo Molnar 提交于
      Impact: build fix
      
      On !CONFIG_CONTEXT_SWITCH_TRACER trace_find_cmdline() is not defined:
      
       kernel/trace/trace_output.c: In function 'trace_ctxwake_print':
       kernel/trace/trace_output.c:499: error: implicit declaration of function 'trace_find_cmdline'
       kernel/trace/trace_output.c:499: warning: assignment makes pointer from integer without a cast
      
      Move it to the generic section in trace.h.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f7d48cbd
    • F
      tracing/branch-tracer: adapt to the stat tracing API · e302cf3f
      Frederic Weisbecker 提交于
      Impact: refactor the branch tracer
      
      This patch adapts the branch tracer to the tracing API.
      
      This is a proof of concept because the branch tracer implements two
      "stat tracing" that were split in two files.
      
      So I added an option to the branch tracer: stat_all_branch.
      If it is set, then trace_stat will output all of the branches
      entries stats. Otherwise, it will print the annotated branches.
      
      Its is a kind of quick trick, waiting for a better solution.
      
      By default, the annotated branches stat are sorted by incorrect branch
      prediction percentage.
      
      Ie:
      
       correct incorrect  %        Function                  File              Line
       ------- ---------  -        --------                  ----              ----
             0        1 100 native_smp_prepare_cpus        smpboot.c            1228
             0        1 100 hpet_rtc_timer_reinit          hpet.c               1057
             0    18032 100 sched_info_queued              sched_stats.h        223
             0      684 100 yield_task_fair                sched_fair.c         984
             0      282 100 pre_schedule_rt                sched_rt.c           1263
             0    13414 100 sched_info_dequeued            sched_stats.h        178
             0    21724 100 sched_info_switch              sched_stats.h        270
             0        1 100 get_signal_to_deliver          signal.c             1820
             0        8 100 __cancel_work_timer            workqueue.c          560
             0      212 100 verify_export_symbols          module.c             1509
             0       17 100 __rmqueue_fallback             page_alloc.c         793
             0       43 100 clear_page_mlock               internal.h           129
             0      124 100 try_to_unmap_anon              rmap.c               1021
             0       53 100 try_to_unmap_anon              rmap.c               1013
             0        6 100 vma_address                    rmap.c               232
             0     3301 100 try_to_unmap_file              rmap.c               1082
             0      466 100 try_to_unmap_file              rmap.c               1077
             0        1 100 mem_cgroup_create              memcontrol.c         1090
             0        3 100 inotify_find_update_watch      inotify.c            726
             2    30163  99 perf_counter_task_sched_out    perf_counter.c       385
             1     2935  99 percpu_free                    allocpercpu.c        138
          1544   297672  99 dentry_lru_del_init            dcache.c             153
             8     1074  99 input_pass_event               input.c              86
          1390    76781  98 mapping_unevictable            pagemap.h            50
           280     6665  95 pick_next_task_rt              sched_rt.c           889
           750     4826  86 next_pidmap                    pid.c                194
             2        8  80 blocking_notifier_chain_regist notifier.c           220
            36      130  78 ioremap_pte_range              ioremap.c            22
          1093     3247  74 IS_ERR                         err.h                34
          1023     2908  73 sched_slice                    sched_fair.c         445
            22       60  73 disk_put_part                  genhd.h              206
      [...]
      
      It enables a developer to quickly address the source of incorrect branch
      predictions.  Note that this sorting would be better with a second sort on
      the number of incorrect predictions.
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      e302cf3f
    • F
      tracing/ftrace: provide the base infrastructure for histogram tracing · dbd0b4b3
      Frederic Weisbecker 提交于
      Impact: extend the tracing API
      
      The goal of this patch is to normalize and make more easy the
      implementation of statistical (histogram) tracing.
      
      It implements a trace_stat file into the /debugfs/tracing directory where
      one can print a one-shot output of statistics/histogram entries.
      
      A tracer has to provide two basic iterator callbacks:
      
        stat_start() => the first entry
        stat_next(prev, idx) => the next one.
      
      Note that it is adapted for arrays or hash tables or lists.... since it
      provides a pointer to the previous entry and the current index of the
      iterator.
      
      These two callbacks are called to get a snapshot of the statistics at each
      opening of the trace_stat file because. The values are so updated between
      two "cat trace_stat". And the tracer is free to lock its datas during the
      iteration to keep consistent values.
      
      Since it is almost always interesting to sort statisticals values to
      address the problems by priority, this infrastructure provides a "sorting"
      of the stat entries too if desired. A tracer has just to provide a
      stat_cmp callback to compare two entries and the stat tracing
      infrastructure will build a sorted list of the given entries.
      
      A last callback, called stat_headers, can be implemented by a tracer to
      output headers on its trace.
      
      If one of these callbacks is changed on runtime, it just have to signal it
      to the stat tracing API by calling the init_tracer_stat() helper.
      
      Changes in V2:
      
      - Fix a memory leak if the user opens multiple times the trace_stat file
        without closing it. Now we always free our list before rebuilding it.
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      dbd0b4b3
    • S
      ftrace: change trace.c to use registered events · f633cef0
      Steven Rostedt 提交于
      Impact: rework trace.c to use new event register API
      
      Almost every ftrace event has to implement its output display in
      trace.c through a different function. Some events did not handle
      all the formats (trace, latency-trace, raw, hex, binary), and
      this method does not scale well.
      
      This patch converts the format functions to use the event API to
      find the event and and print its format. Currently, we have
      a print function for trace, latency_trace, raw, hex and binary.
      A trace_nop_print is available if the event wants to avoid output
      on a particular format.
      
      Perhaps other tracers could use this in the future (like mmiotrace and
      function_graph).
      Signed-off-by: NSteven Rostedt <srostedt@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f633cef0