Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 3087
b: refs/heads/master
c: 0c0a400
h: refs/heads/master
i:
  3085: fb96689
  3083: fb85c55
  3079: 7c25d8e
  3071: 13184a5
v: v3
  • Loading branch information
John Levon authored and Linus Torvalds committed Jun 24, 2005
1 parent ac27b92 commit c8f706b
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 391cd727eac2e10be7685efd739a3ea9de87393c
refs/heads/master: 0c0a400d1debb172c596b24ab82efab4975990a9
2 changes: 1 addition & 1 deletion trunk/Documentation/Changes
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
o nfs-utils 1.0.5 # showmount --version
o procps 3.2.0 # ps --version
o oprofile 0.5.3 # oprofiled --version
o oprofile 0.9 # oprofiled --version

Kernel compilation
==================
Expand Down
10 changes: 7 additions & 3 deletions trunk/Documentation/basic_profiling.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,13 @@ dump output readprofile -m /boot/System.map > captured_profile

Oprofile
--------
Get the source (I use 0.8) from http://oprofile.sourceforge.net/
and add "idle=poll" to the kernel command line

Get the source (see Changes for required version) from
http://oprofile.sourceforge.net/ and add "idle=poll" to the kernel command
line.

Configure with CONFIG_PROFILING=y and CONFIG_OPROFILE=y & reboot on new kernel

./configure --with-kernel-support
make install

Expand All @@ -46,7 +50,7 @@ start opcontrol --start
stop opcontrol --stop
dump output opreport > output_file

To only report on the kernel, run opreport /boot/vmlinux > output_file
To only report on the kernel, run opreport -l /boot/vmlinux > output_file

A reset is needed to clear old statistics, which survive a reboot.

29 changes: 18 additions & 11 deletions trunk/drivers/oprofile/buffer_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ static inline unsigned long fast_get_dcookie(struct dentry * dentry,
*/
static unsigned long get_exec_dcookie(struct mm_struct * mm)
{
unsigned long cookie = 0;
unsigned long cookie = NO_COOKIE;
struct vm_area_struct * vma;

if (!mm)
Expand Down Expand Up @@ -234,35 +234,42 @@ static unsigned long get_exec_dcookie(struct mm_struct * mm)
*/
static unsigned long lookup_dcookie(struct mm_struct * mm, unsigned long addr, off_t * offset)
{
unsigned long cookie = 0;
unsigned long cookie = NO_COOKIE;
struct vm_area_struct * vma;

for (vma = find_vma(mm, addr); vma; vma = vma->vm_next) {

if (!vma->vm_file)
continue;

if (addr < vma->vm_start || addr >= vma->vm_end)
continue;

cookie = fast_get_dcookie(vma->vm_file->f_dentry,
vma->vm_file->f_vfsmnt);
*offset = (vma->vm_pgoff << PAGE_SHIFT) + addr - vma->vm_start;
if (vma->vm_file) {
cookie = fast_get_dcookie(vma->vm_file->f_dentry,
vma->vm_file->f_vfsmnt);
*offset = (vma->vm_pgoff << PAGE_SHIFT) + addr -
vma->vm_start;
} else {
/* must be an anonymous map */
*offset = addr;
}

break;
}

if (!vma)
cookie = INVALID_COOKIE;

return cookie;
}


static unsigned long last_cookie = ~0UL;
static unsigned long last_cookie = INVALID_COOKIE;

static void add_cpu_switch(int i)
{
add_event_entry(ESCAPE_CODE);
add_event_entry(CPU_SWITCH_CODE);
add_event_entry(i);
last_cookie = ~0UL;
last_cookie = INVALID_COOKIE;
}

static void add_kernel_ctx_switch(unsigned int in_kernel)
Expand Down Expand Up @@ -317,7 +324,7 @@ static int add_us_sample(struct mm_struct * mm, struct op_sample * s)

cookie = lookup_dcookie(mm, s->eip, &offset);

if (!cookie) {
if (cookie == INVALID_COOKIE) {
atomic_inc(&oprofile_stats.sample_lost_no_mapping);
return 0;
}
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/oprofile/event_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ void wake_up_buffer_waiter(void);
#define TRACE_BEGIN_CODE 8
#define TRACE_END_CODE 9

#define INVALID_COOKIE ~0UL
#define NO_COOKIE 0UL

/* add data to the event buffer */
void add_event_entry(unsigned long data);

Expand Down

0 comments on commit c8f706b

Please sign in to comment.