lkml.org 
[lkml]   [2015]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/21] perf tests: Do not rely on dso__data_read_offset() to open dso
    Date
    From: Namhyung Kim <namhyung@kernel.org>

    Do not rely on dso__data_read_offset() will always call dso__data_fd()
    internally. With multi-thread support, accessing a fd will be protected
    by a lock and it'll cause a huge contention. It can be avoided since we
    can skip reading from file if there's a data in the dso cache.

    If one needs to call the dso__data_read_offset(), [s]he also needs to
    call dso__data_fd() (or set dso->binary_type at least) first like the
    dwarf unwind code does.

    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Acked-by: Jiri Olsa <jolsa@redhat.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1422585209-32742-2-git-send-email-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/tests/dso-data.c | 13 ++++++++-----
    1 file changed, 8 insertions(+), 5 deletions(-)

    diff --git a/tools/perf/tests/dso-data.c b/tools/perf/tests/dso-data.c
    index 22a8c428283a..513e5febbe5a 100644
    --- a/tools/perf/tests/dso-data.c
    +++ b/tools/perf/tests/dso-data.c
    @@ -112,6 +112,9 @@ int test__dso_data(void)

    dso = dso__new((const char *)file);

    + TEST_ASSERT_VAL("Failed to access to dso",
    + dso__data_fd(dso, &machine) >= 0);
    +
    /* Basic 10 bytes tests. */
    for (i = 0; i < ARRAY_SIZE(offsets); i++) {
    struct test_data_offset *data = &offsets[i];
    @@ -252,13 +255,13 @@ int test__dso_data_cache(void)
    struct dso *dso = dsos[i];

    /*
    - * Open dsos via dso__data_fd or dso__data_read_offset.
    - * Both opens the data file and keep it open.
    + * Open dsos via dso__data_fd(), it opens the data
    + * file and keep it open (unless open file limit).
    */
    + fd = dso__data_fd(dso, &machine);
    + TEST_ASSERT_VAL("failed to get fd", fd > 0);
    +
    if (i % 2) {
    - fd = dso__data_fd(dso, &machine);
    - TEST_ASSERT_VAL("failed to get fd", fd > 0);
    - } else {
    #define BUFSIZE 10
    u8 buf[BUFSIZE];
    ssize_t n;
    --
    1.9.3


    \
     
     \ /
      Last update: 2015-02-11 22:21    [W:4.132 / U:0.364 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site