-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux…
…/kernel/git/acme/linux into perf/core Pull perf/core fixes and improvements from Arnaldo Carvalho de Melo: * libtraceevent build fixes from Namhyung Kim * Prevent overflow when calculating annotation buckets size, from Cody Schafer * Set breakpoint events sample period to 1, just like trace events, from Jovi Zhang * Fix strerror_r usage, from Kirill Shutemov * Fix duplicate function declaration problems with bison 2.6, from Kirill Shutemov * Add DSO caching facility (and perf test entry) to speed up binary file reading, will be used by the DWARF unwind code, from Jiri Olsa * Fix trace event storms by setting PERF_SAMPLE_PERIOD, from Frederic Weisbecker * perf kvm fixes from David Ahern Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
- Loading branch information
Showing
18 changed files
with
657 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
TRACEEVENT-CFLAGS |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
#include "util.h" | ||
|
||
#include <stdlib.h> | ||
#include <sys/types.h> | ||
#include <sys/stat.h> | ||
#include <fcntl.h> | ||
#include <string.h> | ||
|
||
#include "symbol.h" | ||
|
||
#define TEST_ASSERT_VAL(text, cond) \ | ||
do { \ | ||
if (!(cond)) { \ | ||
pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \ | ||
return -1; \ | ||
} \ | ||
} while (0) | ||
|
||
static char *test_file(int size) | ||
{ | ||
static char buf_templ[] = "/tmp/test-XXXXXX"; | ||
char *templ = buf_templ; | ||
int fd, i; | ||
unsigned char *buf; | ||
|
||
fd = mkostemp(templ, O_CREAT|O_WRONLY|O_TRUNC); | ||
|
||
buf = malloc(size); | ||
if (!buf) { | ||
close(fd); | ||
return NULL; | ||
} | ||
|
||
for (i = 0; i < size; i++) | ||
buf[i] = (unsigned char) ((int) i % 10); | ||
|
||
if (size != write(fd, buf, size)) | ||
templ = NULL; | ||
|
||
close(fd); | ||
return templ; | ||
} | ||
|
||
#define TEST_FILE_SIZE (DSO__DATA_CACHE_SIZE * 20) | ||
|
||
struct test_data_offset { | ||
off_t offset; | ||
u8 data[10]; | ||
int size; | ||
}; | ||
|
||
struct test_data_offset offsets[] = { | ||
/* Fill first cache page. */ | ||
{ | ||
.offset = 10, | ||
.data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, | ||
.size = 10, | ||
}, | ||
/* Read first cache page. */ | ||
{ | ||
.offset = 10, | ||
.data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, | ||
.size = 10, | ||
}, | ||
/* Fill cache boundary pages. */ | ||
{ | ||
.offset = DSO__DATA_CACHE_SIZE - DSO__DATA_CACHE_SIZE % 10, | ||
.data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, | ||
.size = 10, | ||
}, | ||
/* Read cache boundary pages. */ | ||
{ | ||
.offset = DSO__DATA_CACHE_SIZE - DSO__DATA_CACHE_SIZE % 10, | ||
.data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, | ||
.size = 10, | ||
}, | ||
/* Fill final cache page. */ | ||
{ | ||
.offset = TEST_FILE_SIZE - 10, | ||
.data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, | ||
.size = 10, | ||
}, | ||
/* Read final cache page. */ | ||
{ | ||
.offset = TEST_FILE_SIZE - 10, | ||
.data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, | ||
.size = 10, | ||
}, | ||
/* Read final cache page. */ | ||
{ | ||
.offset = TEST_FILE_SIZE - 3, | ||
.data = { 7, 8, 9, 0, 0, 0, 0, 0, 0, 0 }, | ||
.size = 3, | ||
}, | ||
}; | ||
|
||
int dso__test_data(void) | ||
{ | ||
struct machine machine; | ||
struct dso *dso; | ||
char *file = test_file(TEST_FILE_SIZE); | ||
size_t i; | ||
|
||
TEST_ASSERT_VAL("No test file", file); | ||
|
||
memset(&machine, 0, sizeof(machine)); | ||
|
||
dso = dso__new((const char *)file); | ||
|
||
/* Basic 10 bytes tests. */ | ||
for (i = 0; i < ARRAY_SIZE(offsets); i++) { | ||
struct test_data_offset *data = &offsets[i]; | ||
ssize_t size; | ||
u8 buf[10]; | ||
|
||
memset(buf, 0, 10); | ||
size = dso__data_read_offset(dso, &machine, data->offset, | ||
buf, 10); | ||
|
||
TEST_ASSERT_VAL("Wrong size", size == data->size); | ||
TEST_ASSERT_VAL("Wrong data", !memcmp(buf, data->data, 10)); | ||
} | ||
|
||
/* Read cross multiple cache pages. */ | ||
{ | ||
ssize_t size; | ||
int c; | ||
u8 *buf; | ||
|
||
buf = malloc(TEST_FILE_SIZE); | ||
TEST_ASSERT_VAL("ENOMEM\n", buf); | ||
|
||
/* First iteration to fill caches, second one to read them. */ | ||
for (c = 0; c < 2; c++) { | ||
memset(buf, 0, TEST_FILE_SIZE); | ||
size = dso__data_read_offset(dso, &machine, 10, | ||
buf, TEST_FILE_SIZE); | ||
|
||
TEST_ASSERT_VAL("Wrong size", | ||
size == (TEST_FILE_SIZE - 10)); | ||
|
||
for (i = 0; i < (size_t)size; i++) | ||
TEST_ASSERT_VAL("Wrong data", | ||
buf[i] == (i % 10)); | ||
} | ||
|
||
free(buf); | ||
} | ||
|
||
dso__delete(dso); | ||
unlink(file); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.