본문 바로가기

전체 글

(496)
클린 아키텍처 (소프트웨어 구조와 설계의 원칙) 클린 아키텍처 | 로버트. C 마틴 / 송준이 역 2019년에 출간된 클린 아키텍처. 읽어야지.. 속으로 생각하기만 수십번... 작년은 무엇인가 정신없었고, 한참을 달리다 잠시 쉬는 해가 필요할 것 같아 기술서적을 잠시 내려놓았던 시기였다. 올해의 첫 시작으로 읽은 책이다. 로버트 C 마틴의 도서는 여러 책을 읽었고, 좋아하는 개발자이자 저자이다. 많은 사람들이 그의 이름을 듣고, 그의 책을 읽어보았을거라고 생각된다. 그 만큼 유명하고 많은 개발자들에게 큰 도움을 주는 개발자이다. 아키텍처에는 오래전부터 관심이 있었지만 주먹구구식 학습과 경험을 토대로 역량을 쌓아올려간 시간들이 많았다. 그러면서 다양한 사람들과 토론하면서 느낀 점은 아키텍처에 좋은 아키텍처를 있어도 정답은 없다는 것이다. 뭐 물론 시간대..
[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 C언어로 프로그래밍 할 때, 동적메모리 사용을 위해 많이 사용하는 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:..
File System Profiling free(1) $free -th total used free shared buff/cache available Mem: 31G 1.5G 28G 79M 1.1G 29G Swap: 2.0G 0B 2.0G Total: 33G 1.5G 30G top(1) ... KiB Mem : 32832784 total, 30064040 free, 1579628 used, 1189116 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 30760488 avail Mem ... 1189116 buff/cache vmstat buff and cache column -> buffer cache vmstat -w 1 procs -----------------------memory..