Skip to content

Reading Hash Allocation

kimjooyoon edited this page Oct 3, 2026 · 3 revisions

반복 파일 확인의 메모리 비용 읽기

2026-10-04 KST. 개발 #1196의 깨끗한 후보 08f2d813에서 이전 main 041c8bbf와 비교한 결과입니다. 개발 #1196·main #1197은 각각 필수 여섯 검사·독립 증거 검증 뒤 정상 병합했습니다. 현재 깨끗한 main 93c6463d를 Go1.27.1로 빌드·설치했습니다.

사용하는 동안 어떻게 달라지나

실행기는 처음 필요할 때 32KiB 배열을 하나 만들고 다음 파일 해시에도 재사용합니다. 각 실행기가 자기 차례에 빌려 쓰는 작은 작업대와 비슷합니다. 실행기가 닫히거나 요청이 취소되면 배열 참조를 해제합니다. Go 공구와 바디 실행파일 전체는 현재 바이트를 계속 읽으며, 두 실제 실행도 유지합니다.

파일 크기는 256MiB까지 허용하고 실제 읽기도 한 바이트의 초과 감지를 포함해 제한합니다. 읽은 길이가 처음 크기와 달라지면 실패합니다. 열린 파일의 내용과 길이를 확인하는 범위이며, 파일시스템 전체를 원자적으로 고정하는 기능은 제공하지 않습니다.

--timing의 터미널에서 실행되지 않은 단계는 unobserved로 보입니다. 첫 실행만 끝난 경우에도 두 실행의 합계는 unobserved이고, JSON에는 관측한 각 실행이 남습니다. 관측한 0은 0.000ms입니다. 실패한 단계가 무료로 실행된 것처럼 읽히는 혼동을 줄였습니다. 단계 기록의 사용법.

확인한 숫자

먼저 두 실행파일과 여섯 복사 방식으로 192회 해시해 크기를 비교했습니다. 큰 버퍼로 공구 해시가 일관되게 빨라지지는 않았습니다. 낮은 보관 메모리를 위해 32KiB를 선택했습니다. 구현의 1MiB 파일 반복 벤치마크에서 호출당 할당은 약 33.5kB → 0.8kB, 횟수는 양쪽 9회였습니다. 실행기마다 최초 보관 배열 하나를 따로 만들며, 이 준비는 재사용 수치 밖입니다.

같은 기존 한영 원본 두 개에서 모델·결정론을 이전→후보→후보→이전 순서로 실제로 사용했습니다. 창마다 여섯 요청, 전체 96회 생성·48회 모델 판단·192회 바디 실행에서 12,288/12,288 유한 기대값과 고정 생성 Go를 유지했습니다. 저장 파일 읽기 전용 확인 16회도 통과했습니다. 새 의도 과제와 학습 갱신은 0개입니다.

재사용 요청의 중앙값, 각 40회 이전 설치 후보
응답 64.13ms 65.88ms
공구 전체 해시 15.19ms 15.03ms
현재 자식 CPU 합 12.82ms 13.20ms
현재 자식 중 최대 단일 RSS 4.42MB 4.42MB

이번 변화에서 확인한 성과는 해시 호출의 할당 감소와 표시 개선입니다. 응답 시간 범위는 겹쳤고 일반적인 속도 개선을 판단할 근거는 부족합니다. 위 CPU/RSS는 현재 자식만 집계합니다. 부모 컴파일러의 해시 비용, 모델 단독 RAM과 호스트 CPU 사용률은 별도 측정이 필요합니다. macOS arm64/Apple M4/Go1.27.1의 기존 두 의도 반복입니다.

공개 원본·실패·Go 수집기와 재실행.

설치본에서 한영 모델·결정론 8회 생성·4회 실제 판단·16회 실행으로 1,024/1,024와 고정 생성 Go를 확인했습니다. 모델 재사용 응답 69.42·62.53ms, 결정론 65.49·60.34ms와 최초 응답도 보존했습니다. 공구가 없는 한 요청은 종료 1, 모델·바디 실행 0회, 128개 기대값 미관측과 native unobserved를 남깁니다. 성공·실패 저장 기록을 읽기 전용으로 다섯 번 확인했습니다.

실행 공구에 FIFO를 지정했을 때 파일을 여는 단계에서 기다리는 문제도 관측했습니다. 해당 프로세스를 확인·종료하고 원본을 보존했습니다. 개발 #1198에서 Unix의 비차단 열기와 실제 파일 종류 검사를 추가해 필수 CI·독립 증거 뒤 개발에 병합했습니다. main #1199도 자체 검사·독립 증거 뒤 병합하고 93fa2742를 설치했습니다. 실제 후보 FIFO는 0.60초, 새 설치본은 19.665ms에 오류를 알리고 종료했습니다. 준비·캐시 조건이 달라 두 원본을 보존합니다. 실패를 읽고 다시 실행하기.

Gooo

배우기

직접 다뤄 보기

원리와 개발

공개 코드와 모델

Clone this wiki locally