top of page
검색

Wonhyuk Yang
2022년 7월 9일
qspinlock note (feat. Paravirtualization)-WIP
최근에 ETRI와 함께 Memos라는 역가상화 연구에 참여했다. 주제는 Guest 커널의 spinlock을 수정하여 성능 개선을 하는 것이였다. 이 주제에 대해 공부하면서 얻게된 spinlock에 대한 지식들을 정리하는 시간을 가져보도록 하겠다....
조회수 422회댓글 0개

Wonhyuk Yang
2022년 4월 23일
Trace Point와 Event Tracer에 대한 Note
Intro 커널 코드를 살펴보면, 종종 "trace_" 접두사가 붙은 함수들을 살펴볼 수 있다. 해당 함수가 어떤 식으로 구현되어 있는지 살펴보려고 태그를 따라가려 하면 태그를 찾을 수 없을 것이다. 만약 해당 함수에 대한 간략한 설명이 있다면...
조회수 801회댓글 0개

Wonhyuk Yang
2022년 4월 19일
Combining lock 노트-WIP
Background 현재 CPU의 발전 흐름은, CPU의 clock의 속도를 늘리는 방향이 아니라 코어의 개수를 늘려 throughput 늘리는 방향으로 진행되고 있다. core의 수가 늘어나면서 memory에 대한 높은 bandwith이...
조회수 420회댓글 0개

Wonhyuk Yang
2022년 4월 18일
Linux kernel ftrace 간단한 원리
ftrace(function+tracer)는 커널 내부에서 어떤 일이 일어나는 지 확인하거나, 디버깅 혹은 성능 분석에 많이 사용되는 기능이다. 아래의 그림은 function_graph tracer을 이용하여 call chain을 확인한...
조회수 6,106회댓글 0개

Wonhyuk Yang
2022년 4월 17일
Contiguous Memory Allocator 노트
일반적으로 메모리를 할당 받을 때는 buddy 시스템을 통해 페이지를 할당 받는다. 다양한 anti-fragmentation 기법이 적용된 buddy 시스템이라도 부팅 후에는 지속으로 단편화가 발생하고, 따라서 연속된 큰 메모리를 할당하기...
조회수 1,815회댓글 1개
![[GCC] __builtin_constant_p 정리](https://static.wixstatic.com/media/d14fee_af7a0b2201fc4f9abe6fc2bf9282494d~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_auto/d14fee_af7a0b2201fc4f9abe6fc2bf9282494d~mv2.webp)
Wonhyuk Yang
2022년 3월 21일
[GCC] __builtin_constant_p 정리
GCC에서는 다양한 builtin function을 제공하는데 이번 포스트에서 다룰 것은 __builtin_constant_p 함수이다. 해당 함수는 아래와 같이 Linux Kernel kmalloc에서 사용하는 모습을 살펴볼 수 있다. 얼핏...
조회수 511회댓글 1개

Wonhyuk Yang
2022년 1월 7일
BPF 스터디 노트
BPF(Berkley packet filter)는 패킷 필터 기능만 하는 것이 아니라 genric하고 유연한 instruction set을 제공하여 단순한 필터 이상의 일들을 할 수 있습니다. 작성된 BPF 프로그램은 여러 hook point에서...
조회수 2,994회댓글 1개

![[WAIOS] dump_stack 함수 구현](https://static.wixstatic.com/media/d14fee_abbd9540b7214fa3b86bfc7314603210~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_90,enc_auto/d14fee_abbd9540b7214fa3b86bfc7314603210~mv2.webp)
Wonhyuk Yang
2021년 12월 19일
[WAIOS] dump_stack 함수 구현
저번 글에서는 qemu와 gdb를 통해 발생한 원인을 추적하는 방법에 대해 배웠습니다. 하지만 정확히 어느 부분이 문제인지 확인하는 것은 수고스러운 일이였습니다. 따라서 손쉬운 디버깅을 위해 WAIOS만의 dump_stack 함수를 구현해보도록...
조회수 382회댓글 0개

Wonhyuk Yang
2021년 12월 18일
Stack trace와 kallsyms의 구현 살펴보기
OS 개발 시 가장 힘든 부분은 역시 디버깅을 하는 것인데요. 이를 위해 앞에 글에서는 gdb+qemu와 같은 방법을 살펴봤습니다. 하지만 이 방법은 원인 분석하기엔 유용하지만, 문제가 발생한 위치를 쉽게 찾지는 못합니다. Linux에서는...
조회수 1,277회댓글 1개


Wonhyuk Yang
2021년 11월 30일
가볍게 살펴보는 Per CPU
percpu는 "percpu: implement new dynamic percpu allocator"의 패치로 리뉴얼 되었습니다. 또한 뒤따르는 후속 패치들로 2800줄에 이르는 코드가 되었습니다. 다양한 내용이 반영된 최신의 percpu.c...
조회수 1,077회댓글 0개


Wonhyuk Yang
2021년 11월 19일
가볍게 살펴보는 SLUB
Slub은 이미 많은 블로그에서 자세히 설명하고 있습니다. 따라서 해당 포스트에서는 중복된 내용을 작성하기보다는, Slub의 기본적인 컨셉을 빠르게 이해하는데에 초점을 맞춥니다. 해당 포스트가 Slub 자료 구조가 어떻게 동작하는지 이해를 도와...
조회수 989회댓글 0개

ybgwon@gmail.com
2021년 7월 14일
리눅스 커널의 container_of 매크로
이 글은 리눅스 커널의 container_of 매크로 함수를 설명하는 글입니다. 요즘 리눅스에서 container를 이야기하자면 저는 container 가상화 시스템 docker가 떠오릅니다. 그만큼 요즘 가상화 관련 분아갸 hot하기 때문이어서...
조회수 3,517회댓글 2개
![[Arm64] KSMA attack과 init_pg_dir 도입 분석](https://static.wixstatic.com/media/d14fee_5cef9544047548e99bd1e3e81740c4d0~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_auto/d14fee_5cef9544047548e99bd1e3e81740c4d0~mv2.webp)
Wonhyuk Yang
2021년 6월 20일
[Arm64] KSMA attack과 init_pg_dir 도입 분석
arm64 아키텍처에서는 다른 아키텍처와 다르게 부팅때 사용되는 페이지 테이블이 다른데요. init_mm의 구조체가 아래와 같이 구성되어 있어, 초기 페이지 테이블이 swapper_pg_dir인지 init_pg_dir였는지 혼동하기 쉬운 것...
조회수 520회댓글 1개
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (完)](https://static.wixstatic.com/media/d14fee_fe5828c7afc6401cb63f53c23782377c~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_auto/d14fee_fe5828c7afc6401cb63f53c23782377c~mv2.webp)
Wonhyuk Yang
2021년 6월 14일
[Training] Arm v8 Linux kernel head.S 찍어먹기 (完)
지난 시간에는 MMU를 활성화하기 전에 필요한 여러가지 시스템 레지스터들을 세팅해줬어요. 이제 MMU를 활성화시키고 start_kernel 함수로 진입할 때가 되었네요. 자 그럼 힘차게 살펴보도록 할게요. 해당 글의 타겟 아키텍처는...
조회수 795회댓글 2개
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (6)](https://static.wixstatic.com/media/d14fee_95eeb84e6990411eaf2da64f6fef82c0~mv2.png/v1/fill/w_333,h_136,fp_0.50_0.50,q_95,enc_auto/d14fee_95eeb84e6990411eaf2da64f6fef82c0~mv2.webp)
Wonhyuk Yang
2021년 6월 2일
[Training] Arm v8 Linux kernel head.S 찍어먹기 (6)
이전 시간에는 두 개의 매핑 테이블을 만드는 과정을 살펴봤어요. 이제 남은 것은 CPU가 가상 메모리를 활성화 시키고, 해당 매핑 테이블을 사용하도록 시스템 레지스터들을 세팅해주는 일이에요. 이 부분은 하드웨어어 매우 밀접한 부분이므로, 중요한...
조회수 868회댓글 0개
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (5)](https://static.wixstatic.com/media/d14fee_925726d0b12a42579fd48f86d21ba0f1~mv2.webp)
Wonhyuk Yang
2021년 5월 31일
[Training] Arm v8 Linux kernel head.S 찍어먹기 (5)
Remind 지난 시간에는 임시 페이지 테이블을 만들기 위해 필요한 페이지 수를 계산해서 링커 스크립터를 통해 예약해둔 것을 확인할 수 있었는데요. 이번 시간에는 그 공간을 사용해서 임시 페이지 테이블을 만드는 과정을 살펴볼 것이에요. 이제...
조회수 640회댓글 0개

Paran Lee
2021년 5월 12일
Rmap at 40K Feet (1)
역(거꾸로) 매핑이 무엇일까요? 우선 가상 주소로 부터 물리 주소로 변환하는 ( Page Directory -> ... -> PTE -> PFN) "(포워드) 매핑"을 반대로 하는 것이에요! 즉, 역 매핑은 물리 주소(PFN)로 부터 가상...
조회수 254회댓글 0개

Hello Stock
2021년 5월 6일
Linux kernel head.S, main.c 분석하기 (1) (GDB + QEMU + BUILDROOT)
head.S 를 분석하거나, main.c의 start_kernel함수를 분석하는 과정에서 특정 변수나 레지스터의 값을 확인하고 싶을 때가 있습니다. GDB를 사용하면 자신이 분석중인 커널소스를 기준으로 라인바이 라인으로 이동하며 변수나 레지스터의...
조회수 1,361회댓글 0개
![[Training] Arm v8 Linux kernel head.S 찍어먹기 (4)](https://static.wixstatic.com/media/d14fee_89f05534d47c4cdeb98b5aa294cdec6d~mv2.png/v1/fill/w_333,h_250,fp_0.50_0.50,q_95,enc_auto/d14fee_89f05534d47c4cdeb98b5aa294cdec6d~mv2.webp)
Wonhyuk Yang
2021년 5월 6일
[Training] Arm v8 Linux kernel head.S 찍어먹기 (4)
앞선 시간에서는 리눅스 커널 VM layout이 어떻게 배치되었는지에 대해 알아보았어요. 그리고 실제 배치된 물리 메모리와 가상 메모리가 다른 점을 해결하기 위해 변환 테이블(Translation Table)을 만들 필요가 있다고 했는데요....
조회수 1,084회댓글 0개

![[Training] Arm v8 Linux kernel head.S 찍어먹기 (3)](https://static.wixstatic.com/media/d14fee_22c0af260fb34211b9943f2631090914~mv2.jpg/v1/fill/w_333,h_250,fp_0.50_0.50,q_90,enc_auto/d14fee_22c0af260fb34211b9943f2631090914~mv2.webp)
Wonhyuk Yang
2021년 5월 4일
[Training] Arm v8 Linux kernel head.S 찍어먹기 (3)
이전 포스트에서 링커 스크립터를 이용하여 오브젝트 파일들을 내가 원하는 주소에 재배치하는 과정을 살펴봤어요. 그러면 이러한 재배치는 그냥 임의의 위치에 해도 되는 것일까요? 사실 가상 주소의 영역들은 특정 목적에 따라 배정되었어요. 이렇게 배정된...
조회수 1,199회댓글 0개
bottom of page