본문 바로가기

리눅스 커널의 구조와 원리/14. 메모리 관리

[mm] anon page debugging

crash64> bt 
...
#20 [ffffffc00932be70] do_el0_svc at ffffffd174227f30
#21 [ffffffc00932be80] el0_svc at ffffffd174d4d328
#22 [ffffffc00932bea0] el0t_64_sync_handler at ffffffd174d4da20
#23 [ffffffc00932bfe0] el0t_64_sync at ffffffd17421160c
     PC: 0000007fa528cb20   LR: 0000007fa5237f94   SP: 0000007fc3fc7ad0
    X29: 0000007fc3fc7ad0  X28: 000000557d72f000  X27: 0000000000000000
    X26: 000000557d6f5000  X25: 0000007fa5339668  X24: 000000000000000a
    X23: 00000055b19f3330  X22: 0000007fa53cb740  X21: 0000007fa5339580
    X20: 00000055b19f3330  X19: 0000000000000001  X18: 0000000000000000
    X17: 0000007fa5234800  X16: 0000007fa52393a0  X15: 0000000000000000
    X14: 0000000000000002  X13: 0000000000000001  X12: 0000000000000000
    X11: 0000000000000000  X10: 0000000000000007   X9: 000000000004804c
     X8: 0000000000000040   X7: 0000000000001030   X6: 0000000000000009
     X5: 0001555100045400   X4: 0000000040100401   X3: 0000007fa53cb040
     X2: 000000000000000a   X1: 00000055b19f3330   X0: 0000000000000001
    ORIG_X0: 0000000000000001  SYSCALLNO: 40  PSTATE: 20000000

crash64> vtop 0000007fc3fc7ad0
7fc3fc7ad0: 7fc3fc7
crash64> vtop 0000007fc3fc7ad0
VIRTUAL     PHYSICAL
7fc3fc7ad0  4aafead0

PAGE DIRECTORY: ffffff806cf0b000
   PGD: ffffff806cf0bff8 => 80000006cf0c003
   PMD: ffffff806cf0c0f8 => 8000000711c9003
   PTE: ffffff80711c9e38 => e800004aafef43
  PAGE: 4aafe000

     PTE        PHYSICAL  FLAGS
e800004aafef43  4aafe000  (VALID|USER|SHARED|AF|NG|PXN|UXN|DIRTY)

      VMA           START       END     FLAGS FILE
ffffff80685fb730 7fc3fa8000 7fc3fc9000 200100173

      PAGE       PHYSICAL      MAPPING       INDEX CNT FLAGS
fffffffe012abf80 4aafe000 ffffff8069edc2d9  7fffffe  1 4000000000080014 uptodate,lru,swapbacked

crash64> kmem ffffff8069edc2d9
CACHE             OBJSIZE  ALLOCATED     TOTAL  SLABS  SSIZE  NAME
ffffff804002a600       96       3535      5148    132     4k  anon_vma
  SLAB              MEMORY            NODE  TOTAL  ALLOCATED  FREE
  fffffffe01a7b700  ffffff8069edc000     0     39         19    20
  FREE / [ALLOCATED]
  [ffffff8069edc2d8]

      PAGE       PHYSICAL      MAPPING       INDEX CNT FLAGS
fffffffe01a7b700 69edc000 ffffff804002a600        0  1 4000000000000200 slab

crash64> kmem ffffff8069edc2e0
CACHE             OBJSIZE  ALLOCATED     TOTAL  SLABS  SSIZE  NAME
ffffff804002a600       96       3535      5148    132     4k  anon_vma
  SLAB              MEMORY            NODE  TOTAL  ALLOCATED  FREE
  fffffffe01a7b700  ffffff8069edc000     0     39         19    20
  FREE / [ALLOCATED]
  [ffffff8069edc2d8]

      PAGE       PHYSICAL      MAPPING       INDEX CNT FLAGS
fffffffe01a7b700 69edc000 ffffff804002a600        0  1 4000000000000200 slab


  (struct anon_vma *) (struct anon_vma*)0xffffff8069edc2d8 = 0xFFFFFF8069EDC2D8 -> (
    (struct anon_vma *) root = 0xFFFFFF8069EDC2D8,
    (struct rw_semaphore) rwsem = ((atomic_long_t) count = ((s64) counter = 0x0), (atomic
    (atomic_t) refcount = ((int) counter = 0x1),
    (long unsigned int) num_children = 0x1,
    (long unsigned int) num_active_vmas = 0x1,
    (struct anon_vma *) parent = 0xFFFFFF8069EDC2D8,
    (struct rb_root_cached) rb_root = ((struct rb_root) rb_root = ((struct rb_node *) rb_

In case of anon page, struct page->mapping is pointing to ( &(struct anon_vma) + 1 )