[rh7,v3,2/4] vz_latency: don't account allocations in interrupts to random tasks

Submitted by Andrey Ryabinin on Aug. 23, 2018, 4:12 p.m.

Details

Message ID 20180823161248.18657-2-aryabinin@virtuozzo.com
State New
Series "Series without cover letter"
Headers show

Commit Message

Andrey Ryabinin Aug. 23, 2018, 4:12 p.m.
When we in interrupt, the 'current' is just any random task. We shouldn't
account per-task atomic allocations latency to random tasks. Use in_task()
macro to identify task context, and account per-task latency iff we in
task.

https://jira.sw.ru/browse/PSBM-87797
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
---
 mm/page_alloc.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 0038474f6c82..179bb0c351b2 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3234,8 +3234,10 @@  static void __alloc_collect_stats(gfp_t gfp_mask, unsigned int order,
 	cpu = smp_processor_id();
 	KSTAT_LAT_PCPU_ADD(&kstat_glob.alloc_lat[ind], time);
 
-	current->alloc_lat[ind].totlat += time;
-	current->alloc_lat[ind].count++;
+	if (in_task()) {
+		current->alloc_lat[ind].totlat += time;
+		current->alloc_lat[ind].count++;
+	}
 
 	if (!page)
 		kstat_glob.alloc_fails[cpu][ind]++;

Comments

Denis V. Lunev Aug. 30, 2018, 11:07 a.m.
On 08/23/2018 07:12 PM, Andrey Ryabinin wrote:
> When we in interrupt, the 'current' is just any random task. We shouldn't
> account per-task atomic allocations latency to random tasks. Use in_task()
> macro to identify task context, and account per-task latency iff we in
> task.
>
> https://jira.sw.ru/browse/PSBM-87797
> Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
> ---
>  mm/page_alloc.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 0038474f6c82..179bb0c351b2 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -3234,8 +3234,10 @@ static void __alloc_collect_stats(gfp_t gfp_mask, unsigned int order,
>  	cpu = smp_processor_id();
>  	KSTAT_LAT_PCPU_ADD(&kstat_glob.alloc_lat[ind], time);
>  
> -	current->alloc_lat[ind].totlat += time;
> -	current->alloc_lat[ind].count++;
> +	if (in_task()) {
> +		current->alloc_lat[ind].totlat += time;
> +		current->alloc_lat[ind].count++;
> +	}
>  
>  	if (!page)
>  		kstat_glob.alloc_fails[cpu][ind]++;
Reviewed-by: Denis V. Lunev <den@openvz.org>