On 12/02/2014 10:00 PM, Dave Anderson wrote:


----- Original Message -----
Hello Dave,

I'd like to discuss about the following feature with you and get some advise.

vm command is used to display virtual memory information of a task. But if the
task is exiting(according to crash, 'tsk->flags&  PF_EXITING' is true), vm will
set mm to 0 in get_task_mem_usage(). But the mm may be not freed yet, the mm and
its related virtual information is helpful when debuging a exiting task.

But it may have been freed, and in the case of CONFIG_SLUB, the mm_struct.mmap 
member
would be overwritten as a free slab object link pointer, making it useless.  Or 
it
could have been freed-and-reused.


I was considering to ignore the IS_EXITING(task) in get_task_mem_usage() and
if tsk->mm is set to NULL but the mm is not freed(see the following case), then 
we
can specify the mm manually.

CASE(the code is from kernel):
<cut>
exit_mm()
{
...
tsk->mm = NULL;              -->  dump after this, and before mmput() freeing mm
...
mmput(mm);
}
<cut>

But I guess it is not a good design to you. So I reconsidered it. What about 
specifying
mm to vm just like task's pid or address. Then vm can retrieve virtual memory 
information
from specified mm directly. And get the owner task from mm->owner.


The thought above is to make specifying mm to be a more common use, just like 
specifying
pid or taskp. Users may get mm from back trace, then he doesn't need to find 
its owner(task)
first. So it is just another way to display virtual memory information of a 
task.

For the special cases, the task->mm is exiting but mm is not freed (or we can 
judge it by
checking whether mm->mm_users is 0), the original vm command is not available 
to display
virtual memory information. But I think there are people care about virtual 
memory even
when the task is exiting. Since the mm is still there, why doesn't crash show 
them?

That might work, at least if:

  (1) the mm_struct has not been freed (SLUB),
  (2) the mm_struct has not been freed-and-reused, and
  (3) the kernel is configured with CONFIG_MEMCG and mm->owner points to the 
exiting task.

But how would a typical user of this option know what the mm_struct address is?

It is true there are people who don't know what mm_struct is. But there are 
still some people
who know what mm is, especially for those who tries to debug exiting tasks.


Dave

--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility



--
Regards
Qiao Nuohan

--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility

Reply via email to