Re: [PATCH v2] Fix "ps/vm" commands to display the memory usage for exiting tasks

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

 



On 2023/08/25 15:23, Lianbo Jiang wrote:
> When a task is exiting, usually kernel marks its flags as 'PF_EXITING',
> but even so, sometimes the mm_struct has not been freed, it might still
> be valid. For such tasks, the "ps/vm" commands won't display the memory
> usage. For example:
> 
>    crash> ps 47070
>          PID    PPID  CPU       TASK        ST  %MEM      VSZ      RSS  COMM
>        47070       1   0  ffff9ba7c4910000  UN   0.0        0        0  ra_ris.parse
>    crash> vm 47070
>    PID: 47070    TASK: ffff9ba7c4910000  CPU: 0    COMMAND: "ra_ris.parse"
>           MM               PGD          RSS    TOTAL_VM
>           0                 0            0k       0k
> 
> To be honest, this is a corner case, but it has already occurred in
> actual production environments. Given that, let's allow the "ps/vm"
> commands to try to display the memory usage for this case, but it does
> not guarantee that it can work well at any time, which still depends on
> how far the mm_struct deconstruction has proceeded.
> 
> With the patch:
>    crash> ps 47070
>          PID    PPID  CPU       TASK        ST  %MEM      VSZ      RSS  COMM
>        47070       1   0  ffff9ba7c4910000  UN  90.8 38461228 31426444  ra_ris.parse
>    crash> vm 47070
>    PID: 47070    TASK: ffff9ba7c4910000  CPU: 0    COMMAND: "ra_ris.parse"
>           MM               PGD          RSS    TOTAL_VM
>    ffff9bad6e873840  ffff9baee0544000  31426444k  38461228k
>          VMA           START       END     FLAGS FILE
>    ffff9bafdbe1d6c8     400000     8c5000 8000875 /data1/rishome/ra_cu_cn_412/sbin/ra_ris.parse
>    ...
> 
> Reported-by: Buland Kumar Singh <bsingh@xxxxxxxxxx>
> Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx>
> ---
>   memory.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/memory.c b/memory.c
> index 5d76c5d7fe6f..86ccec5e2bac 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -4792,10 +4792,11 @@ get_task_mem_usage(ulong task, struct task_mem_usage *tm)
>   {
>   	struct task_context *tc;
>   	long rss = 0, rss_cache = 0;
> +	int mm_count = 0;
>   
>   	BZERO(tm, sizeof(struct task_mem_usage));
>   
> -	if (IS_ZOMBIE(task) || IS_EXITING(task))
> +	if (IS_ZOMBIE(task))
>   		return;
>   
>   	tc = task_to_context(task);
> @@ -4808,6 +4809,11 @@ get_task_mem_usage(ulong task, struct task_mem_usage *tm)
>   	if (!task_mm(task, TRUE))
>   		return;
>   
> +	mm_count = INT(tt->mm_struct + OFFSET(mm_struct_mm_count));
> +
> +	if (IS_EXITING(task) && mm_count <= 0)
> +		return;
> +
>   	if (VALID_MEMBER(mm_struct_rss))
>   		/*
>   		 *  mm_struct.rss or mm_struct._rss exist.

Thanks, applied.
https://github.com/crash-utility/crash/commit/3253e5ac87c67dd7742e2b2bd9d912f21c1d2711

Kazu
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux