리눅스 커널 7.4, x86에서 __get_user()·__put_user() 제거 — SMAP이 바꾼 사용자 공간 접근 비용
리눅스 커널 7.4에서 x86의 __get_user()와 __put_user()가 사라집니다. 두 매크로는 오랫동안 "검사를 한 번만 하고 빠르게 접근하는" 최적화 수단이었습니다. 하지만 SMAP(Supervisor Mode Access Prevention)이 보편화된 뒤로는 x86에서 오히려 더 느려졌습니다. 이번…
리눅스 커널 7.4에서 x86의 __get_user()와 __put_user()가 사라집니다. 두 매크로는 오랫동안 "검사를 한 번만 하고 빠르게 접근하는" 최적화 수단이었습니다. 하지만 SMAP(Supervisor Mode Access Prevention)이 보편화된 뒤로는 x86에서 오히려 더 느려졌습니다. 이번…
64비트 Arm과 x86 리눅스에서는 스레드 하나마다 16KB의 커널 스택이 잡힙니다. 이 메모리는 스왑할 수 없습니다. 스레드 하나만 보면 작은 양이지만, 유휴 상태의 Android 기기에도 스레드가 5,000개쯤 있습니다. 수백만 스레드가 도는…
CPython의 실험적 JIT(Just-In-Time) 컴파일러가 main 브랜치에서 빠집니다. JIT는 2024년 Python 3.13에 실험적 기능으로 들어왔습니다. 올해 6월 Python 운영위원회(steering council)는 "6개월 안에 표준 트랙 PEP를 승인받지 못하면 JIT 코드를 제거한다"고 통보했습니다.…
이번 주 LWN.net 위클리 에디션(10월 29일자) 주요 내용이다. CPython의 실험적 JIT는 PEP 836이 철회되면서 main 브랜치에서 빠지게 됐다. 리누스 토발즈는 x86에서 __get_user()와 __put_user()를 없앴다. 48개 패치를 만드는 데 LLM을 "코시넬(Coccinelle)…
macOS의 Spotlight는 앱과 파일은 잘 찾지만, 개발 중에 자주 하는 작업은 대부분 도구가 따로 필요하다. 클립보드 기록은 다른 앱으로, 창 배치는 또 다른 앱으로, 반복 입력하는 텍스트는 텍스트 확장 도구로…
로그 뷰어에 "레벨 3 이상이면서 커널에서 왔거나 메시지에 oom이 들어간 줄" 같은 조건을 넣고 싶다. 조건 조합마다 체크박스와 코드를 추가할 수는 없으니, 사용자가 level >= 3 and (src == kernel…
수식 파서가 만든 구문 트리(AST)에 평가, 출력, 최적화, 타입 검사 같은 연산이 계속 늘어난다고 하자. 연산마다 노드 클래스에 가상 함수를 추가하면, 연산 하나를 넣을 때마다 모든 노드 클래스를 고쳐야 하고…
CSV, JSON, 엑셀에서 데이터를 가져오는 기능은 "읽기 → 걸러내기 → 저장 → 알리기"라는 같은 순서를 따르고, 읽는 방법만 다르다. 형식마다 이 순서를 복사해 두면 단계 하나를 추가할 때 모든 복사본을…
문단을 화면 폭에 맞춰 줄을 바꾸는 방법은 여러 가지다. 빠르고 단순한 탐욕 방식이 있고, 문단 전체를 보고 줄 끝 여백을 고르게 만드는 방식도 있다. 이 알고리즘을 문단 클래스 안에 if로…
TCP 연결 객체는 같은 send() 호출에도 닫힌 상태에서는 오류를, 연결된 상태에서는 전송을 해야 한다. 상태를 열거형 하나로 두고 메서드마다 switch를 쓰면, 상태가 추가될 때마다 모든 메서드의 분기를 찾아 고쳐야 하고…