Linux

    [Profiling Experience] About Weak / Strong symbol

    [Profiling Experience] About Weak / Strong symbol

    안녕하세요. 리눅스 시스템 기반에서 시스템최적화와 프로파일링에 관심이 많은 소프트웨어 개발자입니다. 이번 글에서는 현업에서 개발 중 발생한 문제에 대해 공유하고 ELF 구조에서 설명했던 Weak / Strong Symbol에 대해 한번 더 정리하고자 합니다. [ELF] Symbol Resolution 오래 전에 ELF에 대해 정리하던 글 중 Symbol에 관한 글을 작성한 적이 있습니다. ELF 내에서 Symbol이 가지는 의미와 Symbol Resolution에 대해서 쉽게 다룬 적이 있었습니다. Strong symbol와 Weak symbol에 대한 기본적인 개념을 이해하고 어떻게 서로 작용하여 동작하는지 이해하셨으면 이 글을 읽기 더욱 쉬울 것 같습니다. 지금부터는 제가 현업에서 개발하던 중 발생한..

    Memory Profiling

    메모리 분석에 사용할 수 있는 다양한 도구에 대해 정리한다. vmstat 가상 메모리 통계 정보를 제공한다. 현재 가용 메모리와 페이지 통계 등 메모리에 대한 다양한 정보를 제공한다. manual 페이지에는 아래와 같이 필드 설명이 되어 있다. Memory swpd: the amount of virtual memory used. free: the amount of idle memory. buff: the amount of memory used as buffers. cache: the amount of memory used as cache. inact: the amount of inactive memory. (-a option) active: the amount of active memory. (-a op..

    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이나..