jemalloc 5.4.0 공개, 160개 넘는 커밋으로 기술 부채 정리하고 tcache 정책을 바꿈
- jemalloc 5.4.0이 나옴. 160개 넘는 커밋이 들어갔고 리팩터링, 버그 수정, 테스트 커버리지 개선, 옵션 정리 같은 기술 부채 청산과 업스트림 이슈에 따른 이식성 개선이 중심임
- HugeTLB 페이지처럼 회수 불가능한 매핑을 표시해 decay와 purge 경로 밖에서 우선 재사용하게 하는 EXTENT_ALLOC_FLAG_PINNED를 추가함. stats.pinned, stats.arenas..pinned, stats.arenas..extents..npinned 같은 mallctl로 고정 메모리 사용량과 뮤텍스 통계를 보고함
- tcache는 고정 refill/flush 정책을 버리고 GC 이벤트 사이에 관측된 수요에 맞춰 bin별 채움과 보존 목표를 조정함. lg_tcache_nslots_mul, tcache_nslots_small_min/max, tcache_nslots_large, tcache_gc_delay_bytes, lg_tcache_flush_small_div, lg_tcache_flush_large_div 7개 옵션이 제거되어 해당 malloc_conf 설정은 조용히 무시되고 opt.* mallctl은 ENOENT를 반환함
- 런타임 옵션 experimental_infallible_new를 컴파일 타임 옵션 --enable-cxx-infallible-new로 바꿔 컴파일러 수준 최적화와 이동 생성자 최적화를 가능하게 하고 new(std::nothrow) 계약을 고침
- 버그 수정으로 errno를 free, free_sized, free_aligned_sized와 process_madvise 기반 페이지 정리 전반에서 보존하고, free_sized와 free_aligned_sized가 NULL을 받아들이게 함(C23). size class 오버플로 검사와 TSD 수명주기 엣지 케이스, THP sysfs 파일의 O_CLOEXEC도 고침
Hacker News opinions
이거 왜 프론트 페이지에 있음? 이 릴리스에 뭔가 특별한 게 있나?
jemalloc이 몇 년 동안 릴리스가 없다가 최근에 개발을 재개했음. 그래서 올라온 거임
Jason Evans가 메인테이너에서 내려간 뒤 첫 릴리스인지 확인해봤는데 그건 아님. 그건 5.3.1이었음
며칠 전에 malloc 알고리즘 비교 글이 올라온 것도 살짝 영향 있었을 듯
돈 벌려고 소프트웨어 하는 사람이면 jemalloc은 알아두는 게 좋음
난 RoR 스택에서 jemalloc 덕 보고 있어서 추천함. 요즘 HN 프론트가 AI 글만 잡아먹어서 지겹기도 하고, 해커 정신 좀 돌아왔으면 좋겠음
왜 프론트에 있냐고 묻는 질문 자체가 필요 없음. 업보트 받아서 올라온 거잖아
맥락이 궁금하면 Jemalloc Postmortem 글을 봐라. Meta 손에서 안 좋게 끝났다는 얘기가 나옴. 조 단위 회사가 갑자기 관심 갖는 게 오픈소스에 장기적으로 꼭 좋은 건 아님
이름 프랑스어에서 온 거임? 'Je m'alloc du memory'
아님. 구현자 이니셜 따는 전통임. Jason Evans malloc이 jemalloc, Poul-Henning Kamp가 phkmalloc, Doug Lea가 dlmalloc
그런데 왜 홈페이지나 GitHub 저장소에는 Jason Evans 이름이 한 번도 안 나옴? 2022년 이후 릴리스가 없다가 이제 나온 건 뭔가 바뀐 거 아님?
tcmalloc만 왜 스레드 캐시에서 CPU 캐시로 갔는지 아는 사람 있음? 리눅스만 동작이 너무 달라지지 않나
스레드를 코어에 고정하지 않으면 per-thread 캐시가 별 의미가 없음. 스레드가 다른 코어로 옮겨가면 캐시가 더 이상 물리 캐시에 로컬이 아니게 됨
sidekiq 큐에서 jemalloc으로 바꿨더니 메모리가 8GiB에서 1GiB 아래로 떨어졌음. 코드 어딘가에 느린 누수가 있는데 jemalloc 쓰면 그게 문제가 안 됨. jemalloc 팀한테 고맙다고 하고 싶음