05 Jun, 2010

1 commit

  • This patch adds the ability to specify an alternate directory to store the
    buildid cache (buildids, copy of binaries). By default, it is hardcoded to
    $HOME/.debug. This directory contains immutable data. The layout of the
    directory is such that no conflicts in filenames are possible. A modification
    in a file, yields a different buildid and thus a different location in the
    subdir hierarchy.

    You may want to put the buildid cache elsewhere because of disk space
    limitation or simply to share the cache between users. It is also useful for
    remote collect vs. local analysis of profiles.

    This patch adds a new config option to the perfconfig file. Under the tag
    'buildid', there is a dir option. For instance, if you have:

    $ cat /etc/perfconfig
    [buildid]
    dir = /var/cache/perf-buildid

    All buildids and binaries are be saved in the directory specified. The perf
    record, buildid-list, buildid-cache, report, annotate, and archive commands
    will it to pull information out.

    The option can be set in the system-wide perfconfig file or in the
    $HOME/.perfconfig file.

    Cc: David S. Miller
    Cc: Frédéric Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: Tom Zanussi
    LKML-Reference:
    Signed-off-by: Stephane Eranian
    Signed-off-by: Arnaldo Carvalho de Melo

    Stephane Eranian
     

24 Mar, 2010

1 commit


03 Mar, 2010

1 commit

  • To avoid these error:

    [root@doppio ~]# perf archive
    tar: .build-id/00/00000000000000000000000000000000000000: Cannot stat:
    No such file or directory
    tar: .build-id/00/00000000000000000000000000000000000000: Cannot stat:
    No such file or directory
    tar: .build-id/00/00000000000000000000000000000000000000: Cannot stat:
    No such file or directory
    tar: .build-id/00/00000000000000000000000000000000000000: Cannot stat:
    No such file or directory
    tar: Exiting with failure status due to previous errors
    [root@doppio ~]#

    More work is needed to support archiving symtabs for binaries
    without a build-id, perhaps creating a perf.data UUID + adding
    build-ids for the binaries copied into the cache and then have
    this perf.data session UUID be a directory with symlinks to the
    by now calculated build-id of the files inside it.

    Or just do an extra pass and insert the calculated build-ids in
    the perf.data header.

    Reported-by: Ingo Molnar
    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     

16 Jan, 2010

1 commit

  • It uses 'perf buildid-list --with-hits' to create a tarball with
    what is needed to have in the destination machine ~/.debug
    hierarchy to properly decode the perf.data file specified.

    Here is an example where a perf.data file collected on a x86-64
    machine running Fedora 12 is used and then the data is packaged,
    transferred and decoded on a PARISC64 machine running Debian
    Testing, 32-bit userspace:

    [root@doppio linux-2.6-tip]# uname -a
    Linux doppio.ghostprotocols.net 2.6.33-rc4-tip+ #3 SMP Wed Jan 13 11:58:15 BRST 2010 x86_64 x86_64 x86_64 GNU/Linux
    [root@doppio linux-2.6-tip]# perf archive
    [root@doppio linux-2.6-tip]# ls -la perf.data*
    -rw------- 1 root root 737696 2010-01-14 23:36 perf.data
    -rw-r--r-- 1 root root 8840025 2010-01-15 12:27 perf.data.tar.bz2
    [root@doppio linux-2.6-tip]# scp perf.data.* parisc64:.
    Password:
    perf.data.tar.bz2 100% 8633KB 1.4MB/s 00:06
    [root@doppio linux-2.6-tip]# ssh parisc64
    Password:
    Linux parisc 2.6.19-g2bbf29ac-dirty #1 Sun Dec 3 17:24:04 BRST 2006 parisc64

    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.

    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    Last login: Thu Jan 14 11:23:24 2010 from d
    parisc:~# uname -a
    Linux parisc 2.6.19-g2bbf29ac-dirty #1 Sun Dec 3 17:24:04 BRST 2006 parisc64 GNU/Linux
    parisc:~# mkdir .debug
    parisc:~# tar xvf perf.data.tar.bz2 -C ~/.debug
    tar: Record size = 8 blocks
    .build-id/74/f9930ee94475b6b3238caf3725a50d59cb994b
    [kernel.kallsyms]/74f9930ee94475b6b3238caf3725a50d59cb994b
    .build-id/9f/fdcac0a7935922d1f04b6cc9029dfef0f066ef
    lib/modules/2.6.33-rc4-tip+/kernel/arch/x86/crypto/aes-x86_64.ko/9ffdcac0a7935922d1f04b6cc9029dfef0f066ef
    .build-id/3a/af89c32ebfc438ff546c93597d41788e3e65f3
    lib/modules/2.6.33-rc4-tip+/kernel/drivers/net/wireless/iwlwifi/iwl3945.ko/3aaf89c32ebfc438ff546c93597d41788e3e65f3
    .build-id/19/f46033f73e1ec612937189bb118c5daba5a0c8
    lib/modules/2.6.33-rc4-tip+/kernel/net/mac80211/mac80211.ko/19f46033f73e1ec612937189bb118c5daba5a0c8
    .build-id/17/72f014a7a7272859655acb0c64a20ab20b75ee
    lib/modules/2.6.33-rc4-tip+/kernel/drivers/net/e1000e/e1000e.ko/1772f014a7a7272859655acb0c64a20ab20b75ee
    .build-id/eb/4ec8fa8b2a5eb18cad173c92f27ed8887ed1c1
    lib64/libc-2.10.2.so/eb4ec8fa8b2a5eb18cad173c92f27ed8887ed1c1
    .build-id/5c/68f7afeb33309c78037e374b0deee84dd441f6
    lib64/libpthread-2.10.2.so/5c68f7afeb33309c78037e374b0deee84dd441f6
    .build-id/e9/c9ad5c138ef882e4507d2605645b597da43873
    bin/dbus-daemon/e9c9ad5c138ef882e4507d2605645b597da43873
    .build-id/bc/da7d09eb6c9ee380dae0ed3d591d4311decc31
    lib64/libdbus-1.so.3.4.0/bcda7d09eb6c9ee380dae0ed3d591d4311decc31
    .build-id/7c/c449a77f48b85d6088114000e970ced613bed8
    usr/lib64/libcrypto.so.0.9.8k/7cc449a77f48b85d6088114000e970ced613bed8
    .build-id/fd/d1ccd1ff7917ab020653147ab3bacf0a85b5b9
    lib64/libglib-2.0.so.0.2000.5/fdd1ccd1ff7917ab020653147ab3bacf0a85b5b9
    .build-id/e4/417ebb8762e5f2eee93c8011a71115ff5edad8
    lib64/libgobject-2.0.so.0.2000.5/e4417ebb8762e5f2eee93c8011a71115ff5edad8
    .build-id/93/1e49461f6df99104f0febcc52f6fed5e2efce6
    usr/sbin/sshd/931e49461f6df99104f0febcc52f6fed5e2efce6
    .build-id/da/b5f724c088f89fbd8304da553ed6cb30bbec96
    usr/lib64/libgdk-x11-2.0.so.0.1600.6/dab5f724c088f89fbd8304da553ed6cb30bbec96
    .build-id/f2/037a091ef36b591187a858d75e203690ea9409
    usr/sbin/openvpn/f2037a091ef36b591187a858d75e203690ea9409
    .build-id/a8/e4f743b40fb1fd8b85e2f9b88d93b661472b8f
    bin/find/a8e4f743b40fb1fd8b85e2f9b88d93b661472b8f
    .build-id/81/120aada06e68b1e85882925a0fc6d7345ef59a
    home/acme/bin/perf/81120aada06e68b1e85882925a0fc6d7345ef59a
    parisc:~# perf report 2> /dev/null | head -25
    9.07% find find [.] 0x0000000000fb0e
    3.29% perf libc-2.10.2.so [.] __GI_strcmp
    3.19% find [kernel.kallsyms] [k] _raw_spin_unlock_irqrestore
    2.70% find libc-2.10.2.so [.] __GI_memmove
    2.62% perf [kernel.kallsyms] [k] vsnprintf
    2.03% find libc-2.10.2.so [.] _int_malloc
    2.02% perf [kernel.kallsyms] [k] format_decode
    1.70% find [kernel.kallsyms] [k] n_tty_write
    1.70% find [kernel.kallsyms] [k] half_md4_transform
    1.67% find libc-2.10.2.so [.] _IO_vfprintf_internal
    1.66% perf [kernel.kallsyms] [k] audit_free_aux
    1.62% swapper [kernel.kallsyms] [k] mwait_idle_with_hints
    1.58% find [kernel.kallsyms] [k] __kmalloc
    1.35% find [kernel.kallsyms] [k] sched_clock_local
    1.35% find [kernel.kallsyms] [k] ext4_check_dir_entry
    1.35% find [kernel.kallsyms] [k] ext4_htree_store_dirent
    1.35% find [kernel.kallsyms] [k] sys_write
    1.35% find [e1000e] [k] e1000_clean
    1.35% find [kernel.kallsyms] [k] _atomic_dec_and_lock
    1.34% find [kernel.kallsyms] [k] __d_lookup
    parisc:~#

    Probably the next step is to have 'perf report' notice that there is a
    perf.data.tar.bz2 file in the same directory and look if it was already
    added to ~/.debug/.

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo