numactl
- 프로세스나 공유메모리의 NUMA 정책을 control 한다.
- numactl 은 특정한 NUMA 스케줄링이나 메모리 배치 정책으로 프로세스를 실행시킨다. 정책은 명령어로 정해지고 모든 children 에게도 상속된다. 또한, 공유메모리 segments 나 파일에 지속적으로 작용한다.
- 명령어 옵션이 헷갈리면 --를 사용해라. ex) numactl --
node 는 N,N,N or N-N or N,N-N or N-N,N-N 등으로 지정할 수 있다. '+' 는 현재 cpuset 에 허용된 node 들의 프로세스 set 에 관련된 것만 이용하겠다는 것을 나타낸다. '!' 는 inverse 이므로 !N-N 은 N-N 의 반대를 나타낸다.
node 숫자 대신에 다음도 명시 가능하다.
netdev:DEV network device DEV 를 node 로 명시
file:PATH PATH 의 file을 (block device) node 로 명시
ip:HOST HOST의 network device 를 node 로 명시
bloack:PATH PATH 의 block device를 node 로 명시
pci:[seg:]bus:dev[:func] PCI device를 node 로 명시
정책 설정
--interleave=nodes, -i nodes
memory interleave 정책으로 설정. 메모리는 여러 node 들에 round robin하게 할당된다. 현재 할당 순서인 node 에 할당할 수 없으면 다른 node 로 간다.
--membinde=nodes, -m nodes
지정된 node 들에만 메모리를 할당한다. 메모리가 충분하지 않으면 할당 실패.
--cpunodebind=nodes, -N nodes
지정된 node 들의 CPU에서만 명령을 실행한다. 각 node 는 여러 개의 CPU를 가지고 있음에 유의.
* 위의 3 가지 정책을 혼용하여 사용 가능하다. 그러나 interleave와 membind를 혼용할 순 없다.
ex) numactl -i 0 -N 0 -> O / numactl -i 0 -m 0 -> X
--physcpubind=cpus, -C cpus
지 정된 CPU 에서만 실행하도록 한다. /proc/cpuinfo 의 processor 필드의 숫자나 현재 cpuset 에 관련된 CPU 숫자를 사용할 수 있다. CPU 숫자 대신 'all' 을 지정하면 현재 cpuset 에서 모든 CPU를 사용한다.
--localalloc, -l
항상 현재 node 에 할당한다.
--preferred=node
지정된 node 에 우선적으로 할당하지만, 메모리가 부족할 경우 다른 node 에 할당한다. 이 옵션은 하나의 node 숫자만 지정할 수 있다. relative notation 도 사용될 수 있다.
--show, -s
현재 프로세스의 설정된 NUMA 정책을 보여준다.
--hardware, -H
시스템의 이용 가능한 node 들을 보여준다.
numactl 은 shmfs / hugetlbfs 의 SYSV (UNIX System V) 공유 메모리 segment 나 파일을 위한 정책을 설정할 수 있다.
이 정책은 지속적이며 공유 메모리의 모든 mapping 에 사용될 수 있다. 공유 메모리 segment, 파일, 메모리 정책(위 정책 설정에서 설명한)을 명시하기 위해 --shm, --shmid, --file 옵션 중 반드시 하나는 지정되어야 한다.
* shmfs / hugetlbfs : RAM-based filesystem 으로 일단 간략하게 ㅠㅠ
http://en.wikipedia.org/wiki/Tmpfs
http://lwn.net/Articles/375096/
/Documentation/vm/hugetlbpage
--huge
SYSV 공유 메모리 segment 를 생성할 때 huge page 를 이용한다. 먼저 --shmid 나 --shm 옵션이 있어야 유효함.
--offset
공유 메모리 segment 의 offset 을 명시. 기본값은 0이며, byte 를 직접 설정할 수 있고 m(MB), g(GB), k(KB)도 사용가능하다.
--strict
page의 공유 메모리 segment 의 정책이 정책 충돌로 인해 fault 가 나면 오류를 출력한다. 기본값은 오류가 나도 출력하지 않는 것이다.
--shmmode shmmode
공유 메모리 segment 를 numeric mode shmmode 로 생성한다. 먼저 --shmid 나 --shm 옵션이 필요.
--length length
공 유 메모리 segment 에 지정된 크기 만큼의 범위에 정책을 적용하거나, 적용된 segment 의 범위를 넓힌다. 기본값은 공유 메모리 segment 가 생성될 때 남아있는 segment 에 적용하는 것이다. 길이는 byte 단위로 직접 설정할 수 있고 m(MB), g(GB), k(KB)도 사용 가능하다.
--shmid id
지정된 숫자로 된 ID 를 가진 공유 메모리 segment 를 생성한다.
--shm shmkeyfile
shmkeyfile 에서 ftok 함수을 사용하여 생성된 ID를 가지고 공유 메모리 segment 를 생성하거나 이용한다.
* ftok : 경로이름과 project 식별자를 이용하여 System V IPC key 를 생성한다. http://www.linuxmanpages.com/man3/ftok.3.php
http://jinynet9.tistory.com/561
--file tmpfsfile
tmpfs 나 hugetlbfs 의 파일을 위한 정책을 설정한다.
--touch
정책이 미리 시행될 수 있도록 page 를 touch 한다. 기본값은 touch 하지 않는 것이다. 이 정책은 응용프로그램이 page 를 mapping 하거나 접근할 때 적용된다.
--dump
지정된 범위의 메모리의 정책을 dump 한다.
--dump-nodes
지정된 범위의 모든 node 들을 dump 한다.
출처 : http://novum21.tistory.com/entry/numactl
'IT > Linux' 카테고리의 다른 글
[tomcat] api서버가 403 fobidden 뱉어낼 때. (0) | 2014.10.22 |
---|---|
리눅스 그룹관리 (0) | 2014.10.10 |
[ubuntu] nohup 사용법 (데몬) (0) | 2014.08.29 |
[ubuntu] vi 편집기 라인넘버 (줄번호) 보이기 (0) | 2014.08.14 |
ubuntu 방화벽 설정하기 (0) | 2014.08.13 |