Re: [PATCH v3] staging: android: ion: Add per-heap counters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 09/21/2018 05:40 PM, Laura Abbott wrote:
> On 09/11/2018 04:29 AM, Alexey Skidanov wrote:
>> Heap statistics have been removed and currently even basics statistics
>> are missing.
>>
>> This patch creates per heap debugfs directory
>> /sys/kernel/debug/<heap_name>
>> and adds the following counters:
>> - the number of allocated buffers;
>> - the number of allocated bytes;
>> - the number of allocated bytes watermark.
>>
>> Signed-off-by: Alexey Skidanov <alexey.skidanov@xxxxxxxxx>
>> ---
>>
>>   v3:
>>     Removed debugfs_create_dir() return value checking
>>
>>   drivers/staging/android/ion/ion.c | 46
>> ++++++++++++++++++++++++++++++++-------
>>   drivers/staging/android/ion/ion.h |  6 ++---
>>   2 files changed, 41 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/staging/android/ion/ion.c
>> b/drivers/staging/android/ion/ion.c
>> index 9907332..ba4c6e6 100644
>> --- a/drivers/staging/android/ion/ion.c
>> +++ b/drivers/staging/android/ion/ion.c
>> @@ -95,6 +95,11 @@ static struct ion_buffer *ion_buffer_create(struct
>> ion_heap *heap,
>>           goto err1;
>>       }
>>   +    heap->num_of_buffers++;
>> +    heap->num_of_alloc_bytes += len;
>> +    if (heap->num_of_alloc_bytes > heap->alloc_bytes_wm)
>> +        heap->alloc_bytes_wm = heap->num_of_alloc_bytes;
>> +
>>       INIT_LIST_HEAD(&buffer->attachments);
>>       mutex_init(&buffer->lock);
>>       mutex_lock(&dev->buffer_lock);
>> @@ -117,6 +122,9 @@ void ion_buffer_destroy(struct ion_buffer *buffer)
>>           buffer->heap->ops->unmap_kernel(buffer->heap, buffer);
>>       }
>>       buffer->heap->ops->free(buffer);
>> +    buffer->heap->num_of_buffers--;
>> +    buffer->heap->num_of_alloc_bytes -= buffer->size;
>> +
>>       kfree(buffer);
>>   }
>>   @@ -528,6 +536,8 @@ void ion_device_add_heap(struct ion_heap *heap)
>>   {
>>       struct ion_device *dev = internal_dev;
>>       int ret;
>> +    struct dentry *heap_root;
>> +    char debug_name[64];
>>         if (!heap->ops->allocate || !heap->ops->free)
>>           pr_err("%s: can not add heap with invalid ops struct.\n",
>> @@ -546,6 +556,34 @@ void ion_device_add_heap(struct ion_heap *heap)
>>       }
>>         heap->dev = dev;
>> +    heap->num_of_buffers = 0;
>> +    heap->num_of_alloc_bytes = 0;
>> +    heap->alloc_bytes_wm = 0;
>> +
>> +    /* Create heap root directory */
>> +    heap_root = debugfs_create_dir(heap->name, dev->debug_root);
>> +    debugfs_create_u64("num_of_buffers",
>> +               0444, heap_root,
>> +               &heap->num_of_buffers);
>> +    debugfs_create_u64("num_of_alloc_bytes",
>> +               0444,
>> +               heap_root,
>> +               &heap->num_of_alloc_bytes);
>> +    debugfs_create_u64("alloc_bytes_wm",
>> +               0444,
>> +               heap_root,
>> +               &heap->alloc_bytes_wm);
>> +
>> +    if (heap->shrinker.count_objects &&
>> +        heap->shrinker.scan_objects) {
>> +        snprintf(debug_name, 64, "%s_shrink", heap->name);
>> +        debugfs_create_file(debug_name,
>> +                    0644,
>> +                    heap_root,
>> +                    heap,
>> +                    &debug_shrink_fops);
>> +    }
>> +
>>       down_write(&dev->lock);
>>       heap->id = heap_id++;
>>       /*
>> @@ -555,14 +593,6 @@ void ion_device_add_heap(struct ion_heap *heap)
>>       plist_node_init(&heap->node, -heap->id);
>>       plist_add(&heap->node, &dev->heaps);
>>   -    if (heap->shrinker.count_objects && heap->shrinker.scan_objects) {
>> -        char debug_name[64];
>> -
>> -        snprintf(debug_name, 64, "%s_shrink", heap->name);
>> -        debugfs_create_file(debug_name, 0644, dev->debug_root,
>> -                    heap, &debug_shrink_fops);
>> -    }
>> -
>>       dev->heap_cnt++;
>>       up_write(&dev->lock);
>>   }
>> diff --git a/drivers/staging/android/ion/ion.h
>> b/drivers/staging/android/ion/ion.h
>> index 16cbd38..bea84b6 100644
>> --- a/drivers/staging/android/ion/ion.h
>> +++ b/drivers/staging/android/ion/ion.h
>> @@ -179,9 +179,9 @@ struct ion_heap {
>>       spinlock_t free_lock;
>>       wait_queue_head_t waitqueue;
>>       struct task_struct *task;
>> -
>> -    int (*debug_show)(struct ion_heap *heap, struct seq_file *s,
>> -              void *unused);
>> +    u64 num_of_buffers;
>> +    u64 num_of_alloc_bytes;
>> +    u64 alloc_bytes_wm;
> 
> What lock is protecting these?
You are correct - I missed it. Will add.
> 
>>   };
>>     /**
>>
> 
Thanks,
Alexey
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux