의외로 느린 속도: 간단한 소켓 벤치마크가 Linux의 OpenBSD에 대한 뒤처짐을 보여줍니다

2025-08-16

스레드를 생성하고 256개의 소켓을 여는 간단한 C 프로그램이 Linux와 OpenBSD 간의 놀라운 성능 차이를 보여줍니다. Linux에서는 실행 시간이 17~26밀리초 사이에서 변동하지만 OpenBSD에서는 단 2~6밀리초에 불과합니다. 더욱 흥미로운 점은 OpenBSD가 처음에 "열려 있는 파일이 너무 많습니다"라는 오류를 반환했는데, 이는 리소스 관리의 차이를 시사합니다. 저자는 이러한 차이가 네트워크 코드와 관련이 없다고 언급하며, 이 벤치마크에서 OpenBSD를 능가하는 Linux 시스템을 찾아보라고 독자들에게 도전하고 있습니다.

더 보기
개발 OS 성능

500마일 이메일 제한: 이상한 실험

2025-07-09

대학 총장이 500마일 이상 떨어진 곳에 이메일을 보낼 수 없다는 유머러스한 이야기가 네트워크 연결과 이메일 전송 거리에 대한 실험을 촉구했습니다. 간단한 네트워크 연결 코드를 작성하고 다양한 대학의 서버를 테스트함으로써 저자는 실제 연결 거리가 서버 위치와 네트워크 인프라에 의해 제한되며 물리적 거리가 아니라는 것을 발견했습니다. 이 실험은 최종적으로 클라우드 컴퓨팅과 이메일 서버의 지리적 분포가 이메일 전송에 미치는 영향을 밝히고 500마일 제한은 물리 법칙이라기보다는 우연의 일치임을 보여주었습니다.

더 보기
개발

X11 DPI 스케일링: 신화를 뒤엎다

2025-06-25

저자는 X11이 DPI 스케일링을 지원하지 않는다는 일반적인 오해에 도전하여 다양한 크기와 해상도의 여러 화면에서 지름 2인치의 원을 성공적으로 그렸습니다. OpenGL과 X 서버 구성 이벤트를 사용하여 저자는 X 서버에서 가져온 물리적 화면 크기에 따라 원의 반지름을 동적으로 조정합니다. TV의 보고된 크기에 차이가 있는 등 작은 부정확성이 있었지만, 이 실험은 X11에서 DPI 스케일링이 가능함을 증명합니다. 이 프로세스는 다른 사람들이 부과한 제한을 무시하고 불가능해 보이는 작업에 도전하는 것의 중요성을 강조합니다.

더 보기

파이프라이닝의 함정: SMTP에서 배우는 교훈

2025-06-20

이 글에서는 네트워크 프로토콜에서 파이프라이닝의 문제점을 살펴봅니다. SMTP와 같은 텍스트 기반 프로토콜에서 클라이언트는 여러 요청을 보내고 응답을 기다릴 필요가 없습니다. 하지만 서버 측 구현이 부적절하면 문제가 발생할 수 있습니다. 서버는 암시적인 상태 머신에 의존할 수 있으며, 여러 개의 동시 요청을 처리할 때 혼란이 발생하여 이메일을 잘못 승인하거나 거부할 수 있습니다. 이 글에서는 이러한 잠재적인 문제의 근본 원인을 분석하고 RFC 2920에서 파이프라이닝 데드락에 대한 논의를 참조하여 상태 관리 부실이나 버퍼 문제로 인한 오류를 피하기 위해 개발자는 파이프라이닝을 신중하게 처리해야 함을 상기시킵니다.

더 보기
개발

Go의 io.Reader 효율성: 간접 참조와 형식 어서션과의 싸움

2025-05-19

Go의 많은 함수는 io.Reader 인터페이스를 입력으로 받습니다. 이를 통해 스트리밍이 가능해지고 모든 데이터를 메모리에 로드할 필요가 없습니다. 하지만 이미 바이트 데이터를 가지고 있는 경우, 이를 직접 사용하는 것이 더 효율적입니다. 이 글에서는 저자가 libavif와 libheif를 사용하여 이미지를 디코딩했을 때의 경험을 설명합니다. 간결성을 위해 간단한 메모리 인터페이스를 사용했지만, Go의 image.Decode 함수는 io.Reader에서 Peek 함수의 유무를 확인하고, 없으면 bufio.Reader로 래핑하기 때문에 bytes.Reader의 바이트를 직접 사용할 수 없습니다. 저자는 형식 어서션과 unsafe.Pointer를 사용하여 bufio.Reader와 bytes.Reader를 우회하고 제로 카피를 달성했습니다. 하지만 이 글에서는 Go의 형식 검사와 인터페이스 설계의 문제점, 그리고 그 결과 발생하는 “섀도우 API”에 대해서도 지적하고 있습니다.

더 보기
개발

OpenBSD에서 ASUS ACPI WMI 드라이버 개발기: 팬 속도 제어

2025-05-11

저자는 ASUS 노트북의 팬 속도를 제어하기 위해 OpenBSD에서 ASUS ACPI WMI 드라이버를 개발한 과정을 자세히 설명합니다. ACPI와 WMI의 바이트 순서 문제 해결, acpidump와 iasl을 사용한 시스템 ACPI 코드 분석, 그리고 마침내 팬 속도 제어에 성공하기까지의 과정을 상세히 기록하고 있습니다. Linux와 FreeBSD의 드라이버 개발 방식과 비교하며 OpenBSD의 편리한 코드 구성을 높이 평가하고 있습니다.

더 보기

심층 분석: OpenBSD에서 `write()` 시스템 호출 추적

2025-03-29

이 기사는 OpenBSD에서 `write()` 시스템 호출의 저수준 구현을 심층적으로 살펴봅니다. 사용자 공간의 `write()` 호출부터 시작하여 커널 내에서 데이터의 경로를 추적하여 시스템 호출에서 NVMe 하드 드라이브로의 데이터 쓰기까지의 전체 경로를 자세히 설명합니다. 이 기사에서는 `mi_syscall`, `sys_write`, `dofilewritev`, `vn_write`, `ffs_write`, `uiomove`, `bdwrite`, `syncer`, `bwrite`, `ufs_strategy`, `spec_strategy`, `sdstrategy` 및 마지막으로 NVMe 드라이버 등 커널 함수 호출 체인을 보여줍니다. 다양한 추상화 계층에서의 데이터 변환 및 전송, 캐싱 메커니즘 및 DMA 전송과 같은 중요한 기술적 세부 사항을 강조합니다.

더 보기
개발