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
- CPU
- 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
- 그래프를 생성하고 이것을 csr또는 csc 구조로 압축한다.
- 한번 실행 당 랜덤 search key 64개 paraell하게 BFS 탐색을 한다.
- 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를 할당한다.
- 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하지 않고 할당받아 사용할 수 있도록 관리하기 위해 사용된다.
- 디바이스가 사용하는 연속된 물리 메모리에 대한 우선권을 주기 위해 사용하는 시스템이다.
- buddy allocator
/*./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