From b4e77efd1f8259cc98077100424f154c9ebc33af Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 3 Jun 2009 19:27:19 +0200 Subject: [PATCH] --- yaml --- r: 147631 b: refs/heads/master c: 021e9f476511ebe23d7f45854a52dfe74c09b6ee h: refs/heads/master i: 147629: 31031cacfb25339af1023b2f3450ba1f3b139731 147627: 7471b15abb9c5eff2aacf2208bb9ae0131053baf 147623: 776327be9ecf95e15fbc561f14aa8eb202d4ea33 147615: dc50df1f7a678b9198d8cf68baf2c5cba818d234 v: v3 --- [refs] | 2 +- .../perf_counter/builtin-record.c | 34 +++++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index 1e4d3893ed71..3bb0c233bdc1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f2521b6e4c365bd0aac61b2c346e6e9f22607e31 +refs/heads/master: 021e9f476511ebe23d7f45854a52dfe74c09b6ee diff --git a/trunk/Documentation/perf_counter/builtin-record.c b/trunk/Documentation/perf_counter/builtin-record.c index fa625258315e..efa2eb498e9c 100644 --- a/trunk/Documentation/perf_counter/builtin-record.c +++ b/trunk/Documentation/perf_counter/builtin-record.c @@ -67,6 +67,8 @@ static unsigned int mmap_read_head(struct mmap_data *md) static long events; static struct timeval last_read, this_read; +static __u64 bytes_written; + static void mmap_read(struct mmap_data *md) { unsigned int head = mmap_read_head(md); @@ -114,28 +116,34 @@ static void mmap_read(struct mmap_data *md) buf = &data[old & md->mask]; size = md->mask + 1 - (old & md->mask); old += size; + while (size) { int ret = write(output, buf, size); - if (ret < 0) { - perror("failed to write"); - exit(-1); - } + + if (ret < 0) + die("failed to write"); + size -= ret; buf += ret; + + bytes_written += ret; } } buf = &data[old & md->mask]; size = head - old; old += size; + while (size) { int ret = write(output, buf, size); - if (ret < 0) { - perror("failed to write"); - exit(-1); - } + + if (ret < 0) + die("failed to write"); + size -= ret; buf += ret; + + bytes_written += ret; } md->prev = old; @@ -467,8 +475,14 @@ static int __cmd_record(int argc, const char **argv) ret = poll(event_array, nr_poll, 100); } - - fprintf(stderr, "[ perf record: Captured and wrote %ld events. ]\n", events); + /* + * Approximate RIP event size: 24 bytes. + */ + fprintf(stderr, + "[ perf record: Captured and wrote %.3f MB %s (~%lld events) ]\n", + (double)bytes_written / 1024.0 / 1024.0, + output_name, + bytes_written / 24); return 0; }