Linux/Profiling

    [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에 대한 기본적인 개념을 이해하고 어떻게 서로 작용하여 동작하는지 이해하셨으면 이 글을 읽기 더욱 쉬울 것 같습니다. 지금부터는 제가 현업에서 개발하던 중 발생한..

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