EricJeffrey的个人博客

内存syscall行为概览

syscall 行为 条件 约束 备注
mmap create_vma      
  populate_when_mmap MAP_POPULATE    
  lock_when_mmap MAP_LOCKED    
  write_to_disk_directly MAP_SYNC dax+MAP_SHARED_VALIDATE only  
  growsdown_on_fault MAP_GROWSDOWN private+anon only  
  resrv_hugetlb MAP_HUGETLB, ~MAP_NORESERVE    
  do_not_reserve_on_mmap MAP_NORESERVE    
  do_not_clear_anon_page MAP_UNINITIALIZED anon only  
  unmap_addr_before_create MAP_FIXED/FIXED_NO_REPLACE    
munmap remove_mapping      
mremap expand_mapping oldlen < newlen    
  shrink_mapping oldlen > newlen    
  move_mapping oldlen< newlen + no_space + MREMAP_MAYMOVE    
  move_but_not_unmap MREMAP_DONTUNMAP anon only, must have MREMAP_MAYMOVE  
  unmap_addr_before_create MREMAP_FIXED must have MREMAP_MAYMOVE  
  copy_shared_mapping oldlen == 0 shared only, must have MREMAP_MAY_MOVE  
mprotect change_prot_of_mapping      
  change_prot_down_to_mapping_start PROT_GROWSDOWN mapping created by MAP_GROWSDOWN  
  change_prot_up_to_mapping_end PROT_GROWSUP    
madvise mark_mapping_normal/random/sequential MADV_NORMAL/RANDOM/SEQUENTIAL    
  swap_in/read_from_pagecache MADV_WILLNEED    
  unpopulate_mapping MADV_DONTNEED can not be VM_PFNMAP pages  
  fallocate_mapping MADV_REMOV    
  no_copy_when_fork MADV_DONTFORK    
  copy_when_fork MADV_DOFORK    
  no_dump_when_coredump MADV_DONTDUMP    
  dump_when_coredump MADV_DODUMP    
  mark_mapping_freeable MADV_FREE private+anon only  
  no_relink_when_fork MADV_WIPEONFORK    
  relink_when_fork MADV_KEEPONFORK    
  mark_mapping_cold MADV_COLD    
mlock lock_mapping      
mlock2 lock_mapping_and_lock_on_fault MLOCK_ONFAULT    
mlockall lock_all_mapping MCL_CURRENT   fork的时候不会继承mlock相关的flag和mlock状态
  lock_future_mapping MCL_FUTURE   mremap产生的expand不会lock,maymove也不会lock,fixed也不lock
  lock_exist_mapping_and_lock_nonexist_fault MCL_CURRENT|MCL_ONFAULT   两次flag操作不一样,会导致前一个操作失效
  lock_future_mapping_on_fault MCL_FUTURE|MCL_ONFAULT    
  lock_exist_mapping_and_lock_nonexist_fault_and_lock_future_mapping_on_fault MCL_FUTURE|MCL_CURRENT|MCL_ONFAULT    
munlockall unlock_all_mappings_and_clear_mlock_flags      
mincore is_mapping_in_core     可用来检测page是否在buffer/page cache
msync sync_mappings_to_file MS_SYNC   MS_INVALIDATE实际上没啥用,只检查一下VM_LOCKED
MS_ASYNC啥也不干
process_vm_readv read_mappings_of_process     flags必须是0
process_vm_writev write_mappings_of_process      
process_mavise same as madvise      
brkk shrink_brk addr < curr_brk    
  expand_brk addr>curr_brk   已有mapping会返回nomem
shmat        
shmget        
shmop        
swapon        
prctl(SET_VMA_NAME)        
pagefault        
swap        
migrate