Linux
User Namespace(1)
User Namespace 먼저 이 글에서 사용한 코드는 linux kernel 4.16 임을 알려드립니다. User namespace는 시큐리티와 관련된 식별자 및 속성을 분리하며, 특히 User ID와 Group ID, 루트 디렉토리, Key, Capability를 분리합니다. 프로세스의 User, Group ID는 user namespace 내,외부적으로 다를수 있습니다. 특히 프로세스는 User namespace 외부에 권한이 없는 정상적인 User ID를 가질 수 있으며, 동시에 namepsace 내부에 User ID 0을 가질 수 있습니다. 즉, 프로세스에는 user namespace 내의 작업에 대한 전체 권한이 있지만 namespace 외부 작업에 대한 권한이 없습니다. Nested nam..
PID Namespace
PID Namespace PID namespace는 프로세스 ID 공간을 격리 시킵니다. 이 말인 즉, 다른 PID namespace의 프로세스들은 같은 PID를 가질 수도 있음을 의미합니다. PID namespace들은 프로세스 집합의 종료, 재시작과 같은 기능을 제공하기 위한 컨테이너를 허용합니다. 또한 컨테이너를 새로운 호스트로 마이그레이션하는 등의 기능을 컨테이너가 제공할 수 있도록 해줍니다. PID namepsace의 특이한 점은 새로운 PID namespace의 PID는 1 부터 시작한다는 것입니다. standalone 시스템과 동일하게 각 namespace의 시작 프로세스는 pid를 1번을 가지게됩니다. PID namespace를 사용하기 위해선 CONFIG_PID_NS 커널 옵션을 설정해야..
Namespace Overview
Namespace namespace 기술은 cgourp(Control Group)과 함께 컨테이너(Container) 솔루션을 구성하는 기술 중 하나입니다. 이번 글에서는 namespcae에 대해 정리한 후linux에서 제공하는 namespcae의 종류에 대해 정리하고자 합니다. namespace는 전역 시스템 리소스를 추상화하여 전역 리소스의 자체 격리 인스턴스가있는 namespace 내의 프로세스에 표시 되도록합니다. 전역 리소스에 대한 변경은 namespace의 멤버, 즉 동일한 namespace를 가진 다른 프로세스에서 볼 수 있지만 다른 namespace를 가진 프로세스에서는 보이지 않습니다. namespcae를 사용하는 것은 컨테이너를 구현하는 것입니다. namespace의 종류 리눅스에서 제..
[inotify] inotify로 watch 중인 파일을 vi(vim)나 gedit으로 수정 시 문제
inotify API들을 이용해 파일이벤트들을 Watch 하는 과정에서 vi나 gedit으로 수정하면 IN_MODIFY 이벤트가 발생할 거라고 생각하시는 분들이 있습니다. vim 또는 gedit은 swap 파일을 생성하고 수정 후 파일을 대체하는 방식으로 진행하기에 vi나 gedit으로 수정 시 IN_MODIFY가 아니라 IN_IGNORED 이벤트가 발생합니다. Manual page에서 확인 시 아래와 같습니다. IN_IGNOREDWatch was removed explicitly (inotify_rm_watch(2)) or automatically (file was deleted, or filesystem was unmounted). See also BUGS. 이벤트를 확인하려는 파일이 만약 vim이나..
NUMA BALANCING
NUMA BALANCING에 대해 정리해보고자 합니다. NUMA BALANCING에 대한 설정은 kernel 분석 시 Configure로 설정할 수 있습니다. 먼저 NUMA에 대해 정리해보고 NUMA BALANCING에 대해 정리하겠습니다. NUMA는 Non-Uniform Memory Access(불균일 기억장치 접근)의 약자입니다. 멀티프로세서 시스템에서 불균일 메모리 접근을 위한 설계 기법으로 개발되었습니다. NUMA 시스템에서 프로세서는 자신과 연결된 메모리를 가지고 있습니다. 프로세서와 메모리가 여러 노드를 구성하여 여러 노드가 모여 시스템을 이루고 있습니다. 노드 내 프로세서는 로컬메모리라하고 다른 노드의 메모리를 리모트 메모리라 합니다. 프로세서는 로컬메모리 뿐만 아니라 리모트메모리에도 접근할..
zone_size_init
[분석 기준] kernel version : linux kernel 4.16 architecture : aarch64 (arm64) memblock_init() 에서 zone_sizes_init() 함수를 분석한다. 분석 기준은 CONFIG_NUMA가 설정되어 있다는 가정하에 설정한다. zone_sizes_init() 함수에 전달되는 min, max는 DRAM의 memblock 시작과 끝 주소를 전달한다. 1234567891011121314#ifdef CONFIG_NUMA // IMRT >> yes! static void __init zone_sizes_init(unsigned long min, unsigned long max){ unsigned long max_zone_pfns[MAX_NR_ZONES]..