본문 바로가기

기술/Linux

리눅스Linux) cgroups 개념, 특징, 기능, 계층 구조, 실습 예시

 

Notion에서 보기 

cgroups란?

  • control groups
  • 프로세스들의 자원 사용을 제한하고 격리시키는 리눅스 커널 모듈
  • 하나 또는 복수의 장치를 묶어서 하나의 그룹을 만들 수 있으며 개별 그룹은 시스템에서 설정한 값만큼 하드웨어를 사용할 수 있다.

    ** 설정한 값 ex) 어떤 그룹이 CPU를 더 많이 차지할 것인가? 어떤 그룹이 얼만큼의 메모리를 사용할 수 있는가? 각 그룹에 네트워크 우선순위를 어떻게 줄 것인가?
  • 시스템의 프로세스들은 장치별로 특정한 cgroup에 속하여 프로세스가 사용하는 하드웨어 자원의 총량에 제한을 받는다.

 

  • 시스템에 설치된 cgroup 목록 확인하기 /sys/fs/cgroup/
$ ls /sys/fs/cgroup

  • 프로세스별 cgroup 정보 확인하기
$ ls /proc/<pid>/cgroup
  • 현 시스템 내부의 서브시스템 목록 확인하기
$ cat /proc/cgroups

  • attaching process
$ echo <pid> > /sys/fs/cgroup/memory/tasks
  • cgroup 하위 디렉토리 생성하기
$ mkdir /sys/fs/cgroup/cpu/<new_task_group>

cgroup의 특징

  • cgroup은 파일시스템이며 마운트하여 사용한다.
    • mount -t tmpfs cgroup_root /sys/fs/cgroup
    • mkdir /sys/fs/cgroup/cpuset
    • mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset
  • 자원 분배는 서브시스템이 필요하다.
  • 커널 설정시 CONFIG_CGROUPS 옵션을 선택해야 사용할 수 있다.
  • 가상 파일 시스템의 디렉토리로 표시되는 다중 계층 구조로 구성된다.

cgroup의 기능

  • access : cgroup별 디바이스 사용
    • devices : cgroup의 작업 단위 별로 디바이스에 대한 접근을 화이트리스트와 블랙리스트로 명시하여 허용/제한한다.
    • blkio : 특정 block device에 대한 접근을 제어한다.
  • resource limiting : 자원을 자용 제한
    • cpu : cgroups라는 시스템이 busy 상태일 때 CPU 공유를 최소화하도록 사용량을 제한할 수 있다. 즉, CPU에 cgroup 작업 access를 제공하기 위한 스케줄러 역할을 한다.
    • hugetlb : huge TLB 사용 제한을 설정할 수 있다.
    • pid : cgroup 작업에서 생성되는 프로세스의 수를 제한할 수 있다.
    • memory : cgroup 작업에 사용되는 메모리를 제한하고 리포팅을 제공한다.
  • prioritization : 프로세스에게 자원 할당 정도와 우선순위 결정
    • net_prio : cgroup 작업에서 생성되는 네트워크 트래픽의 우선순위를 지정한다.
  • accounting : cgroup별 자원 사용량 카운트
    • cpuacct : 프로세스 그룹 별 CPU 자원 사용에 대한 분석 통계를 생성한다.
  • control : freezing & check pointing
    • freezer : 작업을 일시적으로 suspend하거나 check point에서 다시 restore 할 수 있다.
  • injection ****: 패킷 태깅
    • net_cls : 특정 cgroup 작업에서 발생하는 패킷을 식별하기 위한 태그 classid를 지정할 수 있다. 이 태그는 방화벽 규칙으로 사용될 수 있다.

Core interface files in cgroup

  • cgroup.type : A read-write single value file which exists on non-root cgroups.
    • single valuedomain threaded : root of a threaded subtreethreaded : member of a threaded subtree
    • domin invalid : invalid state cgroup
    • domain : normal valid domain cgroup
  • cgroup.procs : A read-write new-line separated values file which exists on all cgroups.pid를 다른 cgroup으로 migrate하기 위해 write할 수 있다.
  • cgroup에 포함된 모든 프로세스의 pid를 보여준다.
  • cgroup.threads : A read-write new-line separated values file which exists on all cgroups.
  • cgroup에 포함된 모든 thread의 tid를 나열한다.
  • cgroup.controllers : A read-only space separated values file which exists on all cgroups.
  • 해당 cgroup에서 사용 가능한 모든 controller를 나열한다.
  • cgroup.subtree_control : A read-write space separated values file which exists on all cgroups.prefix - '+' enable / '-' disable
  • 해당 cgroup에서 자식 프로세스에 분배/제어할 수 있는 자원 을 나열한다.
  • cgroup/events : A read-only flat-keyed file which exists on non-root cgroups.
  • populated : 1이면 cgroup이나 cgroup의 하위 디렉토리가 live 프로세스를 가지고 있다는 의미이다.
  • cgroup.max.descendants : A read-write single value files.
  • max가 기본값이고 하위 cgroup 개수의 최대값을 설정한다. 이 값 이상의 descendant를 가지면 새로운 계층의 cgroup을 생성하는 것이 실패한다.
  • cgroup.max.depth : A read-write single value files.
  • max가 기본값이고, 현 cgroup 하위의 descendant의 최대치를 설정한다.
  • cgroup.stat : A read-only flat-keyed file

Controllers

  1. CPU
  2. Memory
  • cgroup에 주어진 모든 주요 메모리 사용은 tracking이 가능하기 때문에 총 메모리 사용량을 설명하고 통제할 수 있다.
  • tracking 할 수 있는 메모리 사용 종류
    • userland memory : pagecache, anonymous memory
    • kenrel data structure : dentries, inodes, ...
    • TCP socket buffers
  • 모든 memory는 byte를 단위로 한다.
  • memory.current : 현재 cgroup + 해당 그룹의 자손들의 총 메모리 사용량
  • memory.low : 기본값은 0이고, best-effort memory protection이다. 해당 cgroup과 상위 그룹의 메모리 사용량이 low 값을 넘어야 한다.
  • memory.high : 기본값은 max 이고, 메모리 사용량의 throttle limit을 설정한다. cgroup의 메모리 사용량이 high를 넘어가면 해당 그룹의 프로세스들은 throttle된다.
  • memory.max : 기본값은 max이고, 메모리 사용량의 hard limit을 설정한다. 이 값을 넘기면 OOM killer가 cgroup에 발생하여 사용량이 일시적으로 설정값 이하로 떨어진다.
  • ** 메모리 사용량이 throttle limit에 도달할 경우 해당 그룹의 프로세스들은 throttling하며, 메모리 회수를 빈번하게 수행시키도록 압박을 준다. 메모리 사용량이 hard limit을 넘어선 경우 커널은 OOM killer를 호출하여 해당 프로세스를 종료시킨다.
  • memory.events : 다음과 같은 항목들이 정의된다.
    • low : 메모리 사용량이 low 경계 내부에 있음에도 높은 메모리 사용량으로 인해 cgroup이 reclaim하는 횟수 / 주로 low boubdary가 over-committed 된 것을 나타낸다.
    • high : high boundary를 넘겨서 프로세스가 direct memory reclaim가 막힌 횟수
    • max : cgroup의 메모리 사용량이 거의 max값이 도달하려한 횟수
    • oom : cgroup의 메모리 사용량이 limit에 도달한 횟수 / page fault 에서 메모리 부족이 발생하면 task를 kill한다.
    • oom_kill : cgroup에 포함된 프로세스 중 oom killer에 의해 kill된 프로세스의 개수
  • memory.stat
    • anon : anonymous mapping에 사용된 메모리 양
    • file : 파일 시스템 데이터를 캐시하는데 사용한 메모리 양
    • (tmpfs, shared memory를 포함한다.)
    • kernel_stack : 커널 스택에 할당된 메모리 양
    • slab : kenel 내부의 자료구조를 저장하는데 사용된 메모리 양
    • sock : 네트워크 전송 버퍼에 사용된 메모리 양
    • shmem : swap-back된 파일 시스템의 데이터를 캐시한 메모리 양
    • file_mapped : mmap()으로 매핑한 파일 시스템 데이터를 캐시한 메모리 양
    • file_dirty : 파일 시스템의 데이터 중 수정되었으나 아직 디스크에 write하지 않는 것들을 캐시한 양
    • file_writeback : 수정한 데이터를 디스크로 write한 데이터를 캐시한 양
    • pgfault : page fault가 발생한 총 횟수
    • pgmajfault : major page fault가 발생한 총 횟수
    • workingset_Refault : 이전에 쫒겨났던 page가 다시 refault한 횟수
    • workingset_activate : 즉시 활성화된 page를 refault한 횟수
    • workingset_nodereclaim : shadow node가 reclaim된 횟수
    • pgscan : inactivate LRU 리스트에서 scan된 page의 수
    • pgrefill : active LRU 리스트에서 scan된 page의 수
    • pgsteal : reclaim된 page의 수
    • pgactivate : active LRU로 이동한 page의 수
    • pgdeactivate : 위와 반대
    • pglazyfree : 메모리 사용량이 높을 때 free가 지연된 page의 수
    • pglazyfreed : reclaim된 lazyfree page의 양
    • **LRU
      • 메모리가 부족하면 주기적으로 페이지를 해제하는 프로세스가 돌면서 페이지를 회수하여 재사용하는 memory reclaiming을 할때 리눅스가 사용하는 메모리 교체 정책은 LRU이다.
      • 최소 빈도로 사용되는 페이지를 회수하는 방식이다.
      • LRU 리스트의 앞부분은 hot, 뒷부분은 cold page의 성격을 갖는다.
      • active list: 처음 할당된 페이지들은 active 리스트이 선두에 추가된다. 주기적으로 active와 inactive 비율을 비교하여 오래 참조되지 않는 페이지는 inactive리스트로 옮기고 참조된 페이지는 다시 active 리스트의앞으로 옮긴다.
      • inactive list: 회수 매커니즘이 동작할 때 inactive 리스트의 cold부분에서 회수를 시도한다.file (파일을 가상머신에 매핑하여 사용되는 페이지로 정규 파일에서 읽어 들인 페이지)는 메모리 부족시 clean 페이지는 곧바로 회수하고 dirty 페이지는 writeback으로 바꾸고 비동기식으로 원래 파일에 기록하기 해놓고 페이지를 inactive 리스트의 선두로 옮긴다.
      • anon (anonymous page - 유저 메모리를 가상머신에 매핑하여 사용한 페이지) 는 메모리가 부족하면 swap 영역에 옮기고 다시 옮긴 페이지는 회수한다.
  • memory.swap.current : cgroup과 그 자손들이 현재 swap을 위해 사용하는 총 량
  • memory.swap.max : hard limit이고, 이 limit에 도달하면 cgroup의 anonymous 메모리를 swap out된다.

cgroup 디렉토리의 계층 구조

subsystem - memory

  • memory : cgroup 작업에 사용되는 메모리를 제한하고 리포팅을 제공한다.
  • cgroup에서 관리하는 항목 (memory) 추가하기
$ echo "+memory" > /sys/fs/cgroup/cgroup.subtree_control
  • **cgroup.subtree_control : cgroup에서 관리하는 항목 리스트
  • 현재 실행 중인 bach terminal의 pid 값을 하위 계층에 할당
$ echo ${BASHPID} > ./cgroup.procs
  • memory 서브 시스템에서 제어할 수 있는 요소 (ver 2 다시보기)
    • 최대 memory + swap 사용량 (memory.memsw.max_usage_in_bytes)
    • 메모리 사용량 hit 제한 (memory.failcnt)
    • 최대 메모리 사용량 (memory.max_usage_in_bytes)
    • 자식 프로세스의 메모리 여부 설정 (memory.use_hierarchy)
    • 작업이 사용하는 메모리 설정 및 해제 (memory.force_empty)
    • NUMA 노드 당 메모리 사용량 (memory.numa_stat)
    • 현재 커널 메모리 할당 (memory.kmem.usage_in_bytes)
    • 최대 커널 메모리 사용량 (memory.kmem.max_usage_in_bytes)

cgroup 실습

graph500

  • data-intensive한 워크로드에 적합한 벤치마크
  • 시스템의 서브 시스템간 상호작용에 부하를 가한다.
  • undirexted graph에서 breath-first search를 기반으로 한다.
  • three computation kernels
    1. 그래프를 생성하고 이것을 csr또는 csc 구조로 압축한다.
    2. 한번 실행 당 랜덤 search key 64개 paraell하게 BFS 탐색을 한다.
    3. single_source shortest path (SSSP) computation을 실행한다.
$ ./omp-csr -s 24 -e 29

** csr : compressed sparse row

csc : compressed sparse column

filebench

  • 파일시스템의 데이터 입출력 성능을 측정하기 위하 벤치마크
  • 파일 크기, 개수, 쓰레드의 개수, I/O 크기, 실행 시간 등 여러 요소들을 설정할 수 있어 측정 환경에 따라 적합한 워크로드와 환경에서 성능 측정이 가능하다.
  • 처리량, 지연 시간, 시스템 호출마다 사용되는 CPU 자원 등을 확인할 수 있다.
  • 다양한 워크로드를 지원한다. - fileserver, varmail, webproxy, webserver 등

fileserver 워크로드

  • 간단한 파일-서버 입출력 동작의 성능을 측정할 수 있다.
  • 순차적으로 파일 생성 → 데이터 추가 → 쓰기/읽기 작업 → 파일 삭제 를 수행한다.
  • 다수의 사용자가 홈 디렉토리의 파일과 디렉토리에 접근하는 상황을 테스트한다.
  • 쓰기 작업이 읽기 작업에 비해 2배 더 많이 발생하는 쓰기 위주의 워크로드이다.
/*mount*/
mkdir ~/mnt
sudo mount -t ext4 /dev/sdd1 ~/mnt (/home/seungyoon/mnt) 

/*실행*/
sudo filebench -f fileserver.f
/*NUMA로 인한 영향 최고화하여 실행*/
sudo numactl -m 0 -N 0 filebench -f fileserver.f

/*unmount*/
sudo rm -rf ~/mnt/*
sudo unmout ~/mnt

  • 실험순서
// 캐시 비우기
$ ./cache_flush.sh 

// super user로 권한 변경
$ sudo so

// cgroup memory.max 변경하기
$ ./mem_limit.sh *GB

// cgroup에서 컨트롤할 자원 설정하기
$ cd /sys/fs/cgroup
$ cat cgroup.subtree_controls
// → memory 없으면
$ echo "+memory" > cgroup.subtree_controls

// cgroup으로 제한할 프로세스 설정
$ cd /sys/fs/cgroup/seungyoon
$ echo ${BASHPID} > cgroup.procs

// fileserver 실행
$ cd /home/seungyoon/fileserver
// NUMA 영향 최소화를 위한 옵션
$ numactl -m 0 -N 0 filebench -f fileserver.f

// fileserver running 상태 2분 후 graph500실행
$ cd /home/seungyoon/graph500
$ numactl -m 0 -N 0 ./omp-csr -s 24 -e 29

// 실행 중 Anonymous huge page 할당량 확인
$ cat /proc/meminfo | grep AnonHugePages
  • 벤치마크 실험결과
/*sudo cat /proc/pagetypeinfo*/

Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10 
Node    0, zone      DMA, type    Unmovable      1      1      0      0      2      1      1      0      1      0      0 
Node    0, zone      DMA, type      Movable      0      0      0      0      0      0      0      0      0      1      3 
Node    0, zone      DMA, type  Reclaimable      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type    Unmovable    513    462    295    120     18      3      1      0      0      0      0 
Node    0, zone    DMA32, type      Movable    435    166     96     73     56    406    143     58     28     16     53 
Node    0, zone    DMA32, type  Reclaimable    113     18     13      6      5      2      0      0      0      1      0 
Node    0, zone    DMA32, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type    Unmovable     82     13     26      1      0      0      0      0      0      0      0 
Node    0, zone   Normal, type      Movable    171   1715   5249   3668    433     58     10      5      1      0      0 
Node    0, zone   Normal, type  Reclaimable    455    949   1776    468      1      0      0      0      0      0      0 
Node    0, zone   Normal, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic          CMA      Isolate 
Node 0, zone      DMA            1            7            0            0            0            0 
Node 0, zone    DMA32           15          793           80            0            0            0 
Node 0, zone   Normal          141        14884          335            0            0            0 
Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10 
Node    1, zone   Normal, type    Unmovable    362    440    140     16     19     16     14     11     10      6     34 
Node    1, zone   Normal, type      Movable   5971   6160   2157   1477    798    419    246    152    123    102   6977 
Node    1, zone   Normal, type  Reclaimable    147    106    113    122     94     79     66     53     44     17     11 
Node    1, zone   Normal, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    1, zone   Normal, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    1, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic          CMA      Isolate 
Node 1, zone   Normal          182        16066          136            0            0            0

    • buddy allocator
      • 각 zone들은 buddyallocator에 의해서 2^10 page로 분리된다. 내부 단편화를 최소화하기 위해 할당 요청마다 가능한 가장 작은 page를 할당한다.
      ex) 100K 요청을 하면 allocator는 (2^6<100<2^7) 128K page를 찾는데 없다면 2^8인 256K page를 찾아서 반으로 쪼갠다. 요청을 처리할 수 있는 크기의 page를 찾을 때까지 이 과정을 반복한다.
    • 64bit - all space directly addressable by MMU
    • unmovable : locked in memory
    • reclaimable : reusable after clean
    • movable : immediately available
    • reserve : last resort reserve
    • isolate : keep on local NUMA node
    • CMA : contiguous memory allocator for DMA devices with large contiguousDMA 서브 시스템에서 필요로 하는 물리적으로 연속된 메모리를 커널 실행시 별도로 reserve하지 않고 할당받아 사용할 수 있도록 관리하기 위해 사용된다.
    • 디바이스가 사용하는 연속된 물리 메모리에 대한 우선권을 주기 위해 사용하는 시스템이다.
/*./omp-csr -s 24 -e 29*/

SCALE: 24
nvtx: 16777216
edgefactor: 29
terasize: 7.78462822400000001e-03
A: 5.69999999999999951e-01
B: 1.90000000000000002e-01
C: 1.90000000000000002e-01
D: 5.00000000000000444e-02
generation_time: 1.45653465460000007e+01
construction_time: 3.38623921249999995e+01
nbfs: 64
min_time: 1.15765270000000014e-02
firstquartile_time: 1.37675120000000008e-02
median_time: 1.44564844500000012e-01
thirdquartile_time: 2.82693497000000016e-01
max_time: 1.14445151000000012e+00
mean_time: 1.94887223031250001e-01
stddev_time: 2.41095289513021033e-01
min_nedge: 0.00000000000000000e+00
firstquartile_nedge: 0.00000000000000000e+00
median_nedge: 2.43268928500000000e+08
thirdquartile_nedge: 4.86537857000000000e+08
max_nedge: 4.86537857000000000e+08
mean_nedge: 2.35666774484375000e+08
stddev_nedge: 2.45072281044265747e+08
min_TEPS: 0.00000000000000000e+00
firstquartile_TEPS: 0.00000000000000000e+00
median_TEPS: 2.12563770832020640e+08
thirdquartile_TEPS: 1.85031494631084943e+09
max_TEPS: 3.53520313516802692e+09
harmonic_mean_TEPS: 2.72322970910892868e+09
harmonic_stddev_TEPS: 4.81392923143654943e+08
/*sudo numactl -m 0 -N 0 filebench -f fileserver.f*/

statfile1            189870ops      316ops/s   0.0mb/s    0.009ms/op [0.002ms - 41.762ms]
deletefile1          189850ops      316ops/s   0.0mb/s    0.512ms/op [0.019ms - 297.006ms]
closefile3           189871ops      316ops/s   0.0mb/s    0.004ms/op [0.001ms - 13.927ms]
readfile1            189872ops      316ops/s 474.1mb/s    4.592ms/op [0.004ms - 452.517ms]
openfile2            189872ops      316ops/s   0.0mb/s    0.016ms/op [0.003ms - 47.959ms]
closefile2           189872ops      316ops/s   0.0mb/s    0.003ms/op [0.001ms - 10.792ms]
appendfilerand1      189872ops      316ops/s   2.5mb/s    1.776ms/op [0.004ms - 222.105ms]
openfile1            189872ops      316ops/s   0.0mb/s    0.026ms/op [0.003ms - 38.449ms]
closefile1           189872ops      316ops/s   0.0mb/s    0.006ms/op [0.001ms - 7.012ms]
wrtfile1             189873ops      316ops/s 485.2mb/s  150.913ms/op [0.011ms - 1328.994ms]
createfile1          189920ops      316ops/s   0.0mb/s    0.066ms/op [0.012ms - 59.876ms]
644.219: IO Summary: 2088616 ops 3479.158 ops/s 316/633 rd/wr 961.8mb/s 14.356ms/op

 

  • memory.max = 20GB
/*sudo cat /proc/pagetypeinfo*/

Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10 
Node    0, zone      DMA, type    Unmovable      1      1      0      0      2      1      1      0      1      0      0 
Node    0, zone      DMA, type      Movable      0      0      0      0      0      0      0      0      0      1      3 
Node    0, zone      DMA, type  Reclaimable      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type    Unmovable      5     28    225    153     40      5      1      0      0      0      0 
Node    0, zone    DMA32, type      Movable    341    229    218    160    130    231    200     85     45     16     49 
Node    0, zone    DMA32, type  Reclaimable     67     85     18      5      8      1      0      1      0      0      0 
Node    0, zone    DMA32, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type    Unmovable      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type      Movable   7100   8554   7047    974     85     16      4      4      0      0      0 
Node    0, zone   Normal, type  Reclaimable    206      3   1518    522      0      0      0      0      0      0      0 
Node    0, zone   Normal, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic          CMA      Isolate 
Node 0, zone      DMA            1            7            0            0            0            0 
Node 0, zone    DMA32           15          799           74            0            0            0 
Node 0, zone   Normal          141        14850          369            0            0            0 
Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10 
Node    1, zone   Normal, type    Unmovable    328    451    224     23     21     13     19     11      7      6     34 
Node    1, zone   Normal, type      Movable    970   3409   2709   2007   1300    878    684    577    520    459   6588 
Node    1, zone   Normal, type  Reclaimable    139    100    112    118     94     79     66     53     44     17     11 
Node    1, zone   Normal, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    1, zone   Normal, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    1, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic          CMA      Isolate 
Node 1, zone   Normal          182        16066          136            0            0            0
/*sudo numactl -m 0 -N 0 filebench -f fileserver.f*/

statfile1            191376ops      319ops/s   0.0mb/s    0.009ms/op [0.002ms - 24.046ms]
deletefile1          191352ops      319ops/s   0.0mb/s    0.549ms/op [0.019ms - 107.317ms]
closefile3           191376ops      319ops/s   0.0mb/s    0.004ms/op [0.001ms - 8.115ms]
readfile1            191376ops      319ops/s 476.4mb/s    4.553ms/op [0.005ms - 327.524ms]
openfile2            191376ops      319ops/s   0.0mb/s    0.016ms/op [0.003ms - 29.880ms]
closefile2           191376ops      319ops/s   0.0mb/s    0.003ms/op [0.001ms - 13.846ms]
appendfilerand1      191376ops      319ops/s   2.5mb/s    1.739ms/op [0.005ms - 204.676ms]
openfile1            191377ops      319ops/s   0.0mb/s    0.026ms/op [0.003ms - 31.155ms]
closefile1           191377ops      319ops/s   0.0mb/s    0.006ms/op [0.001ms - 7.790ms]
wrtfile1             191378ops      319ops/s 488.8mb/s  149.709ms/op [0.009ms - 1286.340ms]
createfile1          191426ops      319ops/s   0.0mb/s    0.076ms/op [0.012ms - 68.711ms]
648.266: IO Summary: 2105166 ops 3506.516 ops/s 319/638 rd/wr 967.7mb/s 14.244ms/op
/*./omp-csr -s 24 -e 29*/

SCALE: 24
nvtx: 16777216
edgefactor: 29
terasize: 7.78462822400000001e-03
A: 5.69999999999999951e-01
B: 1.90000000000000002e-01
C: 1.90000000000000002e-01
D: 5.00000000000000444e-02
generation_time: 1.50072509039999993e+01
construction_time: 3.46083021439999996e+01
nbfs: 64
min_time: 1.22277050000000002e-02
firstquartile_time: 1.52821472500000010e-02
median_time: 1.43971320500000000e-01
thirdquartile_time: 3.50064728999999963e-01
max_time: 8.65474000999999937e-01
mean_time: 2.01486213843749984e-01
stddev_time: 2.29668507312584397e-01
min_nedge: 0.00000000000000000e+00
firstquartile_nedge: 0.00000000000000000e+00
median_nedge: 2.43268928500000000e+08
thirdquartile_nedge: 4.86537857000000000e+08
max_nedge: 4.86537857000000000e+08
mean_nedge: 2.35666774484375000e+08
stddev_nedge: 2.45072281044265747e+08
min_TEPS: 0.00000000000000000e+00
firstquartile_TEPS: 0.00000000000000000e+00
median_TEPS: 2.81081728877953947e+08
thirdquartile_TEPS: 1.62493060892004538e+09
max_TEPS: 3.63943755862993670e+09
harmonic_mean_TEPS: 2.59359607894511414e+09
harmonic_stddev_TEPS: 4.16459892732702315e+08
  • memory.max = 15GB
/*sudo numactl -m 0 -N 0 filebench -f filerserver.f*/

statfile1            189181ops      315ops/s   0.0mb/s    0.009ms/op [0.002ms - 36.039ms]
deletefile1          189160ops      315ops/s   0.0mb/s    0.546ms/op [0.019ms - 92.317ms]
closefile3           189181ops      315ops/s   0.0mb/s    0.005ms/op [0.001ms - 24.955ms]
readfile1            189181ops      315ops/s 471.0mb/s    4.685ms/op [0.003ms - 362.425ms]
openfile2            189181ops      315ops/s   0.0mb/s    0.016ms/op [0.003ms - 28.059ms]
closefile2           189181ops      315ops/s   0.0mb/s    0.003ms/op [0.001ms - 13.536ms]
appendfilerand1      189181ops      315ops/s   2.5mb/s    1.797ms/op [0.004ms - 201.996ms]
openfile1            189181ops      315ops/s   0.0mb/s    0.027ms/op [0.004ms - 82.525ms]
closefile1           189181ops      315ops/s   0.0mb/s    0.006ms/op [0.001ms - 40.046ms]
wrtfile1             189181ops      315ops/s 482.4mb/s  151.357ms/op [0.009ms - 1283.251ms]
createfile1          189231ops      315ops/s   0.0mb/s    0.065ms/op [0.012ms - 56.148ms]
648.171: IO Summary: 2081020 ops 3466.375 ops/s 315/630 rd/wr 955.8mb/s 14.410ms/op
/*sudo ./omp-csr -s 24 -e 29*/

SCALE: 24
nvtx: 16777216
edgefactor: 29
terasize: 7.78462822400000001e-03
A: 5.69999999999999951e-01
B: 1.90000000000000002e-01
C: 1.90000000000000002e-01
D: 5.00000000000000444e-02
generation_time: 1.55705246299999995e+01
construction_time: 3.49540516710000020e+01
nbfs: 64
min_time: 1.14958500000000002e-02
firstquartile_time: 1.42234865000000019e-02
median_time: 1.41709773000000011e-01
thirdquartile_time: 2.66712998749999985e-01
max_time: 8.73404901999999983e-01
mean_time: 1.78113626890624988e-01
stddev_time: 2.14866517478273233e-01
min_nedge: 0.00000000000000000e+00
firstquartile_nedge: 0.00000000000000000e+00
median_nedge: 2.43268928500000000e+08
thirdquartile_nedge: 4.86537857000000000e+08
max_nedge: 4.86537857000000000e+08
mean_nedge: 2.35666774484375000e+08
stddev_nedge: 2.45072281044265747e+08
min_TEPS: 0.00000000000000000e+00
firstquartile_TEPS: 0.00000000000000000e+00
median_TEPS: 2.78529383042093337e+08
thirdquartile_TEPS: 1.99756692191427517e+09
max_TEPS: 3.68293651827573395e+09
harmonic_mean_TEPS: 2.93009468573553371e+09
harmonic_stddev_TEPS: 4.95212826683189213e+08
/*sudo cat /proc/pagetypeinfo*/

Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10 
Node    0, zone      DMA, type    Unmovable      1      1      0      0      2      1      1      0      1      0      0 
Node    0, zone      DMA, type      Movable      0      0      0      0      0      0      0      0      0      1      3 
Node    0, zone      DMA, type  Reclaimable      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type    Unmovable     26     15      0     99     51      6      2      0      0      0      0 
Node    0, zone    DMA32, type      Movable   1010    202    140     92     54    330    111     80     23     16     60 
Node    0, zone    DMA32, type  Reclaimable    214     35     16     10      8      3      1      1      0      0      0 
Node    0, zone    DMA32, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone    DMA32, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type    Unmovable      3      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type      Movable   5119  10146   4315    527     29     15      7      1      0      0      0 
Node    0, zone   Normal, type  Reclaimable    212    420   1962    315      0      0      0      0      0      0      0 
Node    0, zone   Normal, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    0, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic          CMA      Isolate 
Node 0, zone      DMA            1            7            0            0            0            0 
Node 0, zone    DMA32           15          795           78            0            0            0 
Node 0, zone   Normal          141        14886          333            0            0            0 
Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10 
Node    1, zone   Normal, type    Unmovable    478    497    231     22     12      1     18     11      7      6     34 
Node    1, zone   Normal, type      Movable      0   2880   2799   2129   1415    985    803    684    610    516   6509 
Node    1, zone   Normal, type  Reclaimable    126     99    111    119     94     79     66     53     44     17     11 
Node    1, zone   Normal, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0 
Node    1, zone   Normal, type          CMA      0      0      0      0      0      0      0      0      0      0      0 
Node    1, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0 

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic          CMA      Isolate 
Node 1, zone   Normal          182        16066          136            0            0            0
  • anonymoust huge page 할당 결과

a. memory.max = 15GB

graph500 실행 전 :

AnonHugePages : 0 KB

graph500 실행 중 :

AnonHugePages : 5326848 KB ~ 16361472 KB

graph500 실행 후 :

AnonHugePages : 417792 KB

b. memory.max = 20GB

graph500 실행 전 :

AnonHugePages : 272384 KB

graph500 실행 중 :

AnonHugePages : 3153920 KB ~ 16586752 KB

graph500 실행 후 :

AnonHugePages : 614400 KB

fileserver 실행 후 :

AnonHugePages : 284672 KB

c. memory.max = 25 GB

graph500 실행 전 :

AnonHugePages : 284672 KB

graph500 실행 중 :

AnonHugePages : 16060416 KB ~ 16586752 KB

graph500 실행 후 :

AnonHugePages : 643072KB

fileserver 실행 후 :

AnonHugePages : 284672 KB