전체 글149 2021년 회고 시간은 정말 빨리 간다. 스무살이 엊그제였던 것 같은데 이제 스물 셋이라니😢 누가 장난 치는 것 같다. 시간이 이렇게 빨리 간다니. 작년엔 블로그를 안하다보니 2020년 회고는 안썼다. 아쉬운대로 2021년 회고와 내년은 어떻게 보낼지 좀 고민해보자. 아, 그리고 놀라운 사실이 있다. 내년이 끝나도 나는 여전히 군인이다. 빨리 전역하고 싶다. 시간 가는 건 싫은데 하고 싶은 건 또 많아서 전역이랑 졸업은 빨리 하고 싶은게 사람 마음이 참 그렇다. 42 서울 42 서울에 관해 간단한 회고를 적어보자면, 나는 42 서울에서 맨땅에 헤딩하는 법을 배웠다. 42에서는 나를 알려줄 사람, 책도 없고 오로지 동료와 프로젝트만 주어진다. 내가 하려는 프로젝트에 대해 아무 단서가 없는 상황에서 옆 사람과 토론하면서 문.. 2021. 12. 31. Direct Memory Access API 이 글은 리눅스의 문서 Documentation/DMA-API-HOWTO.txt와 배경 지식을 정리한 글이다. 메일을 읽다보니 DMA를 좀더 공부하게 됐다. 예전부터 디바이스 드라이버에 관심이 있었는데 이걸 읽고나니 디바이스와 CPU가 통신하는 매커니즘 자체는 이해한 것 같다. 물론 특정 디바이스 드라이버를 작성하려면 PCI 레이어와 디바이스가 사용하는 프로토콜(?) 관련 문서, 디바이스의 하드웨어 스펙 등등도 봐야겠지? 참고로 DMA-API-HOWTO는 API를 친절하게 설명해주는 문서라 모든 내용을 설명하지는 않는다. 더 자세한건 DMA-API 문서를 봐야한다. (이 글에는 dma_alloc_pages()나 dma_alloc_attrs() 등등은 생략되어있다.) 배경 지식 address 용어 정리 v.. 2021. 12. 29. perf로 CPU 샘플링하기 (feat. perf record) 얼마전에 깃헙 블로그에 SL[AUO]B 할당자의 CPU Flame Graph를 간단하게 분석해서 올렸었는데, perf에서 프로파일링 하는 방식을 제대로 모른 채 사용하다보니 결과가 왜곡됐었다. 그래서 간단하게라도 기술적인 부분을 정리하려고 한다. TMI지만 이 글 제목을 원래는 "함수 호출 스택 샘플링"이라고 하려다가, CPU 샘플링/프로파일링이라는 말을 더 많이 쓰는 것 같아서 지금의 제목이 되었다. Sampling 우리는 워크로드에서 어떤 일이 일어나는지를 분석하고 싶어한다. 뭐 캐시 미스나 사이클당 명령어와 같은 PMC (Performance Monitoring Counter)일 수도 있고, 아니면 특정 벤치마크에서 어떤 컴포넌트가 얼마나 CPU를 사용하는지가 궁금할 수도 있다. 간단한 예로 함수 .. 2021. 12. 15. Virtual Memory: Folio in 5.16 Introduction 저번 개발 주기때 간간이 보이길래 공부했었는데, 5.16에서 folio 패치셋이 드디어 머지되었다. 간단하게 요약해보자면 커널에서 메모리는 페이지 단위로 관리된다. 종종 여러 페이지를 그룹으로 묶어서 하나의 페이지처럼 처리해야할 때가 있는데 이럴때 보통 compound page나 thp (transparent huge pages)를 사용한다. compound page 같은 경우에는 첫 번째의 페이지가 head page이고, 그 외에는 모두 tail page이다 실제로 파일시스템에 compound page를 사용해서 큰 페이지 단위로 처리할 때 성능상의 이점이 있다고 한다. 하지만 compound page를 사용하는 경우에는 이게 head page인 tail page인지 명확하지 않.. 2021. 12. 12. [Linux Kernel] 리눅스는 얼마나 작아질 수 있을까? 리눅스는 config를 통해서 다양한 환경에서 사용하도록 커스터마이징할 수 있다. 세계 500위 슈퍼컴퓨터부터 스마트폰, 데스크탑 등 다양한 환경에서 리눅스를 실행할 수 있다. 최근 십수년간 리눅스에 상업적인 기업들이 참여하면서 비대해진 경향이 있지만, 이 글은 최대한 커스터마이징을 해서 리눅스를 최대한 작게 만들어보려고 한다. 이 글에선 v5.15 기준으로 실험해본다. 결론부터 적자면 결론부터 적자면 내가 실험했을 때는 x86_64에서는 약 29MiB의 RAM이, 32비트 ARM에서는 6.6MiB의 RAM이 필요했다. 다른 자료를 보면 4MiB에서 구동한 사례도 있고, 아니면 아예 커널의 크기를 줄이는 게 아니라 XIP(Execute In Place)라고 해서 RAM으로 커널을 불러와서 실행하는 게 아.. 2021. 12. 5. Linux Performance Analysis in 60 seconds 이 글은 넷플릭스 기술 블로그의 Linux Performance Analysis in 60,000 Milliseconds를 읽으면서 정리한 것이다. Linux Performance Analysis in 60,000 Milliseconds You log in to a Linux server with a performance issue: what do you check in the first minute? netflixtechblog.com 넷플릭스는 수많은 AWS EC2 인스턴스를 사용하고 이 인스턴스들의 성능을 모니터링하는 도구를 사용한다. 클라우드 성능 모니터링에 Atlas를 사용하고, 온디맨드 모니터링에 Vector를 사용한다. Atlas나 Vector로 대부분의 이슈를 해결할 수 있지만 가끔은 직접.. 2021. 12. 4. LEGv8 ISA - 특징과 명령어 포맷 Introduction LEGv8 ISA는 Computer Organization And Design: ARM Edition에서 소개하는 ISA (Instruction Set Architecture)이다. 이 책이 Computer Organization And Design의 ARM 버전이지만 ARMv8의 전체 명령어 집합을 교육용으로 다루기에는 복잡하다. 그래서 책에서 LEGv8이라고 하는 ARMv8 ISA의 부분 집합을 정의한다. 부분 집합이라고는 하지만 일부 명령어는 ARMv8와 다르다. 일부 ARMv8 스펙은 불필요하게 프로세서를 복잡하게 만들기 때문에 LEGv8은 이런 명령어들을 좀더 단순화한다. 이 글에서는 LEGv8의 특징과 명령어 포맷에 대해 다룬다. 이 글의 모든 사진은 Computer O.. 2021. 12. 2. Instruction Set Architecture vs Microarchitecture PPT 출처 Computer Architecture 컴퓨터의 목적은 사람이 원하는 것을 기계에게 전달하는 것이다. 아래의 이미지에서 Application은 우리가 사용하는 프로그램 (브라우저, 게임, ... 등등)이고, 전자가 움직이는 것처럼 물리적인 부분이다. 브라우저와 물리 현상 사이에는 엄청난 갭이 있기 때문에 여러 개의 계층을 거쳐야 컴퓨터가 우리가 원하는 것을 실행하도록 할 수 있다. 그래서 컴퓨터 아키텍처는 넓은 의미로 보면 Application과 Phyics 사이의 갭을 해결하는 것이라고 할 수 있다. 하지만 현실적으로는 Application과 Physics의 갭이 매우 크기 때문에 이 사이를 여러 개의 계층으로 나눌 수 있다. 프로그래밍 언어, 운영체제, 명령어 집합, 명령어 집합의 구현체.. 2021. 12. 1. Grafana에서 bpftrace 사용하기 (feat. Performance Co-Pilot) 최근에 BPF 스크립트, Flame Graph를 Grafana 같은 모니터링 시스템에서 실행하는건 어떤가 생각했는데 이미 있었다. 와 이게 된다니!! 이 글에서는 Ubuntu 21.04 (hirsute)에서 Performance Co-Pilot 플러그인으로 Grafana에서 bpftrace를 사용하는 방법을 다룬다. bpftrace 설치 당연하게도 bpftrace를 Grafana에서 사용하려면 bpftrace를 먼저 설치해야한다. $ sudo apt-get install -y bpftrace bpftrace 설치는 간단한데 bpftrace를 사용하려면 커널이 BPF 관련 일부 config가 활성화된 상태로 빌드되어야 한다. 요즘 배포판에선 대부분 기본적으로 켜져있는 것 같다. CONFIG_BPF=y CO.. 2021. 11. 28. 이전 1 2 3 4 5 6 7 ··· 17 다음