Linux

    [cgroup] cpu, cpuset, cpuaccet

    [cgroup] cpu, cpuset, cpuaccet

    Subsystem - cpu, cpuset 이번 글에서는 Cgroup의 서브시스템 중 cpu와 cpuset 에 대해 정리해보겠습니다. cpu subsystem cpu 서브시스템은 cgroup 계층 및 해당 작업에 대한 CPU 시간을 스케쥴링 할 수 있습니다. 시스템이 busy 상태일 때 CPU 공유를 최소화 즉 사용량을 제한 할 수 있습니다. 이 서브시스템은 CPU에 cgroup 작업 액세스를 제공하기 위한 스케줄러(Documentation/scheduler/sched-design-CFS.txt)를 제공합니다. cpuset subsystem cpuset 서브시스템은 개별 CPU 및 메모리 노드를 cgroup에 바인딩 하기 위한 서브시스템입니다. 리눅스의 testset 명령과 유사하게 CPU 코어를 할당 ..

    [glibc] malloc, free mechanism

    언어로 프로그래밍 할 때, 동적메모리 사용을 위해 많이 사용하는 malloc()은 glibc 내에 구현되어 있고, UNIX multi-thread 환경을 고려하여 설계된 ptmalloc2를 기반으로 작성되었다. 어플리케이션 내의 메모리 할당/해제 동작원리는 간단하게 설명하면 다음과 같다. 어플리케이션에서 malloc() 함수 호출 시 처음 linux kernel에 가상메모리를 요청(brk 또는 mmap을 이용하여)하게 되고, 그 영역은 어플리케이션의 가상메모리에 매핑된다. 그 이후에 free()를 호출하여 해제된 메모리는 커널에 반환되는 것이 아닌 glibc 내에서 free-list 로 관리되고, 어플리케이션에서 재 요청시 관리하던 free-list에서 재 할당하게 된다. 히스토리 메모리 동적할당을 위해..

    Process Profiling

    1. Perf + FlameGraph Process의 FlameGraph를 뽑아내는 과정을 설명한다. Perf의 --call-graph 기능을 이용한다. 1) Kernel setting echo -1 > /proc/sys/kernel/perf_event_paranoid echo 0 > /proc/sys/kernel/kptr_restrict chmod a+r /proc/kallsyms echo 100 > /proc/sys/kernel/perf_cpu_time_max_percent echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2) Get perf data perf record -o perf.data --call-graph=..

    Performance Methodologies

    성능 분석의 목표는 End-user 성능을 향상시키고 소프트웨어 동작에 대한 비용을 줄이기 위한 활동이며, 이러한 활동은 측정 가능한 측면, 요소등을 통해 달성하고자 하는 기대 성능 목표를 설명하는데 도움이 된다. 성능을 얘기할 때 측정 가능한 요소들은 빠질 수 없습니다. 먼저 측정가능한 요소에 대한 용어를 먼저 정의하려 한다. latency : 어떤 요청에 대한 응답을 받기까지 기다려야 하는 시간 Rate : 초 당 동작 또는 요청 수 Throughput : 단위 시간 당 처리량 Utilization : 요청을 서비스하는 자원의 경우 그 자원이 얼마나 바쁜 상태인가를 측정하는 기준 Cost : 가격 대비 성능 비율 위에 나열한 정의 외에도 매우 다양한 요소들이 있다. 다른 부분은 필요할 때 설명하려 한..

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

    [Profiling Tool] LTTng

    LTTng는 리눅스 프로파일링을 위한 오픈소스 트레이싱 프레임워크입니다. LTTng는 Linux Trace Toolkit: next generation 의 약자로 리눅스 커널, 사용자 어플리케이션(C/C++, java, python), 라이브러리를 트레이싱할 수 있습니다. LTTng 구성 LTTng 는 크게 3가지 모듈로 구성되어 있습니다. lttng-ust : 사용자 어플리케이션을 추적하기 위한 라이브러리 lttng-tools : tracing session을 관리, 제어하기 위한 라이브러리들과 명령어 인터페이스 lttng-modules : 커널 추적을 위한 리눅스 커널 모듈 각 모듈에 대한 설명과 설치 방법 등은 아래 URL을 참조하면 됩니다. https://github.com/lttng https:..