[4/6] qcow2: add tracepoints for qcow2_co_write_zeroes
diff mbox

Message ID 1463227273-27523-5-git-send-email-den@openvz.org
State New
Headers show

Commit Message

Denis V. Lunev May 14, 2016, 12:01 p.m. UTC
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Kevin Wolf <kwolf@redhat.com>
---
 block/qcow2.c | 5 +++++
 trace-events  | 2 ++
 2 files changed, 7 insertions(+)

Comments

Eric Blake May 16, 2016, 4:32 p.m. UTC | #1
On 05/14/2016 06:01 AM, Denis V. Lunev wrote:
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Kevin Wolf <kwolf@redhat.com>
> ---
>  block/qcow2.c | 5 +++++
>  trace-events  | 2 ++
>  2 files changed, 7 insertions(+)
> 
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 9a54bbd..97bf870 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -2435,6 +2435,9 @@ static coroutine_fn int qcow2_co_write_zeroes(BlockDriverState *bs,
>      int head = sector_num % s->cluster_sectors;
>      int tail = (sector_num + nb_sectors) % s->cluster_sectors;
>  
> +    trace_qcow2_write_zeroes_start_req(qemu_coroutine_self(), sector_num,
> +                                       nb_sectors);
> +

Can we trace these by byte locations rather than by sector count?
Ultimately, I think we want to move write_zeroes to a byte-based
interface, even if we still assert internally that it is at least
sector-aligned.
Denis V. Lunev May 16, 2016, 4:48 p.m. UTC | #2
On 05/16/2016 07:32 PM, Eric Blake wrote:
> On 05/14/2016 06:01 AM, Denis V. Lunev wrote:
>> Signed-off-by: Denis V. Lunev <den@openvz.org>
>> CC: Kevin Wolf <kwolf@redhat.com>
>> ---
>>   block/qcow2.c | 5 +++++
>>   trace-events  | 2 ++
>>   2 files changed, 7 insertions(+)
>>
>> diff --git a/block/qcow2.c b/block/qcow2.c
>> index 9a54bbd..97bf870 100644
>> --- a/block/qcow2.c
>> +++ b/block/qcow2.c
>> @@ -2435,6 +2435,9 @@ static coroutine_fn int qcow2_co_write_zeroes(BlockDriverState *bs,
>>       int head = sector_num % s->cluster_sectors;
>>       int tail = (sector_num + nb_sectors) % s->cluster_sectors;
>>   
>> +    trace_qcow2_write_zeroes_start_req(qemu_coroutine_self(), sector_num,
>> +                                       nb_sectors);
>> +
> Can we trace these by byte locations rather than by sector count?
> Ultimately, I think we want to move write_zeroes to a byte-based
> interface, even if we still assert internally that it is at least
> sector-aligned.
>
we can, but this patches traces for qcow2_co_writev

static coroutine_fn int qcow2_co_writev(BlockDriverState *bs,
                            int64_t sector_num,
                            int remaining_sectors,
                            QEMUIOVector *qiov)
{
     [...]
     trace_qcow2_writev_start_req(qemu_coroutine_self(), sector_num,
                                  remaining_sectors);

Thus I'd better either stick to this implementation or change
all tracepoints in QEMU code.

Patch
diff mbox

diff --git a/block/qcow2.c b/block/qcow2.c
index 9a54bbd..97bf870 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2435,6 +2435,9 @@  static coroutine_fn int qcow2_co_write_zeroes(BlockDriverState *bs,
     int head = sector_num % s->cluster_sectors;
     int tail = (sector_num + nb_sectors) % s->cluster_sectors;
 
+    trace_qcow2_write_zeroes_start_req(qemu_coroutine_self(), sector_num,
+                                       nb_sectors);
+
     if (head != 0 || tail != 0) {
         int64_t cl_start = sector_num - head;
 
@@ -2457,6 +2460,8 @@  static coroutine_fn int qcow2_co_write_zeroes(BlockDriverState *bs,
         qemu_co_mutex_lock(&s->lock);
     }
 
+    trace_qcow2_write_zeroes(qemu_coroutine_self(), sector_num, nb_sectors);
+
     /* Whatever is left can use real zero clusters */
     ret = qcow2_zero_clusters(bs, sector_num << BDRV_SECTOR_BITS, nb_sectors);
     qemu_co_mutex_unlock(&s->lock);
diff --git a/trace-events b/trace-events
index 4fce005..627f34f 100644
--- a/trace-events
+++ b/trace-events
@@ -612,6 +612,8 @@  qcow2_writev_done_req(void *co, int ret) "co %p ret %d"
 qcow2_writev_start_part(void *co) "co %p"
 qcow2_writev_done_part(void *co, int cur_nr_sectors) "co %p cur_nr_sectors %d"
 qcow2_writev_data(void *co, uint64_t offset) "co %p offset %" PRIx64
+qcow2_write_zeroes_start_req(void *co, int64_t sector, int nb_sectors) "co %p sector %" PRIx64 " nb_sectors %d"
+qcow2_write_zeroes(void *co, int64_t sector, int nb_sectors) "co %p sector %" PRIx64 " nb_sectors %d"
 
 # block/qcow2-cluster.c
 qcow2_alloc_clusters_offset(void *co, uint64_t offset, int num) "co %p offset %" PRIx64 " num %d"