Spinlock vs Mutex

락을 구현하는 방식은 크게 두 갈래로 나뉩니다. 유저 공간에서 CPU 명령어만으로 도는 Spinlock과, 커널의 도움을 받는 Mutex입니다. 둘 다 결국 상호 배제(mutual exclusion)를 보장한다는 목적은 같지만, 내부 동작 방식이 다르기 때문에 적합한 워크로드도 갈립니다. Spinlock Spinlock은 유저 공간(userspace)에서 구현되는 락입니다. 동작 방식은 단순합니다. CAS(Compare-And-Swap) 연산이 성공할 때까지 무한히 반복합니다. while (!CAS(lock, 0, 1)) 대부분의 CPU는 이런 CAS 연산을 위한 전용 명령어를 갖고 있습니다. x86이라면 LOCK CMPXCHG가 여기에 해당합니다. 문제는 이 CAS 연산이 성공하려면 해당 캐시 라인에 대한 독점적인 쓰기 권한이 필요하다는 점입니다. 이 권한을 얻는 과정에서 CPU 코어 사이에 캐시 일관성 프로토콜이 개입하고, 캐시 라인의 소유권을 주고받는 과정에서 잦은 invalidation, 이른바 캐시 라인 바운싱이 발생합니다. 이 과정은 보통 4~80ns 정도 걸립니다. ...

2025년 12월 12일 · 4 분 · Donghyung Ko
가상 메모리 주소를 물리 메모리 주소로 매핑하는 Page Table 구조

Linux Transparent Huge Pages

요약 대형 페이지(Huge Page) 기능을 활용하여 TLB 미스로 인한 오버헤드를 최소화할 수 있습니다. 워킹셋 크기가 크고(수십 MB 이상), 메모리 접근이 매우 빈번한 워크로드에서 유용한 최적화 기법입니다. 주로 데이터베이스 시스템과 관련된 레퍼런스(Oracle, Postgres, AWS RDS)가 많습니다. 대형 JVM 애플리케이션 하이퍼바이저(KVM/QEMU) 대규모 분석·검색 시스템(예: ClickHouse) CPU 및 I/O 바운드가 지배적인 워크로드에서는 별다른 효용이 없을 수 있습니다. 배경 모든 프로세스는 가상 메모리 주소 공간을 할당받습니다. 프로세스에서 가상 메모리 주소에 접근하면 CPU는 이를 실제 물리 메모리 주소로 치환하여 처리합니다. OS는 가상 메모리 주소를 물리 메모리 주소로 매핑하기 위한 Page Table을 관리합니다. ...

2025년 9월 16일 · 4 분 · Donghyung Ko
iptables mangle 테이블의 패킷 처리 흐름

A Deep Dive into iptables and Netfilter

이 글은 원문 A Deep Dive into Iptables and Netfilter Architecture을 번역하여 작성한 글입니다. iptable란? iptables는 netfilter 프레임워크를 제어하는 데 사용되는, 리눅스 커널에 내장된 네트워크 스택입니다. NIC를 거쳐 유입되는 모든 네트워크 패킷은 netfilter에 등록된 룰을 거쳐 제어됩니다. iptables는 netfilter가 패킷 조작을 위해 제공하는 훅에서 룰을 관리하는 역할을 합니다. iptables를 활용하면 특정 조건에 부합하는 패킷을 드롭하거나, 패킷의 출발지(source) 또는 목적지(destination)를 수정하는 것 등이 가능합니다. Netfilter Hook netfilter는 패킷 제어를 위한 다섯 가지 훅을 제공합니다. 모든 패킷은 전송 방향(incoming 혹은 outgoing)에 따라 각 훅에 등록된 패킷 제어 규칙이 적용됩니다. netfilter에서 지원하는 훅은 다음과 같습니다. ...

2022년 3월 7일 · 5 분 · Donghyung Ko
Linux Bridge 네트워크 구성도

가상 네트워크 인터페이스 (Linux Virtual Networking Interface)

이 글은 아래의 원문을 읽고 내용의 일부를 한글로 정리한 글입니다. https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking/ 리눅스는 컨테이너 기술의 기반이 되는 가상 네트워킹(virtual networking) 관련 기능을 다양하게 제공한다. 이 글에서는 리눅스 가상 네트워킹에서 자주 사용되는 대표적인 네트워크 인터페이스를 살펴본다. Bridge Linux Bridge는 일반적인 네트워크 스위치와 유사하게 동작한다. Bridge는 주로 라우터, 게이트웨이, VM 등에서 패킷을 목적지로 전달(forwarding)하는 역할을 수행한다. Bridge는 STP, VLAN filter, multicast snooping 등의 기능도 추가로 지원한다. 아래 소스 코드는 리눅스에서 Bridge를 생성하고 서로 다른 네트워크 인터페이스와 연결하는 과정을 보여주는 예시이다. 이 과정을 거치면 브릿지를 통해 VM 1, VM 2와 network naemspace 1은 서로 통신할 수 있게 된다. ...

2021년 6월 24일 · 3 분 · Donghyung Ko