문제는 메모리 지연 시간이라고, 바보야

1 day ago 5

CPU 사용률 100% 가 실제 연산 자원의 완전한 활용을 뜻하지는 않음. 실행할 작업이 있어도 메모리를 기다리느라 연산을 진행하지 못할 수 있음 RAM 접근은 약 50~100ns가 걸리는 반면, 현대 CPU는 1ns에 약 4~8개 명령을 처리할 수 있어 데이터베이스 성능에서 캐시 활용이 중요함 약 1,700만 개의 고유 키를 하나의 해시 테이블로 집계한 단일 코어 실험에서는 메모리 대기 지표가 50.1% 에 달했고, 페이지 캐시에 데이터가 있는 재실행도 3.6초가 걸림 키를 4,096개 파티션으로 나눠 작은 해시 테이블에서 집계하자 연산량은 늘었지만, 재실행 시간은 2.7초로 줄고 메모리 대기 지표도 23.5%로 낮아짐 이 실험에서는 캐시에 없는 데이터에 대한 DRAM 접근을 추가 CPU 연산으로 바꾸는 방식이 효과적이었음. 캐시 활용 외에도 프리페칭과 메모리 처리량을 극대화하는 알고리듬으로 DRAM 지연을 숨길 수 있음 CPU 사용률과 실제 연산량은 다름 CPU 사용률 100% 인 두 프로세서가 같은 양의 작업을 처리하는 것은 아님. CPU는 여러 명령을 동시에 수행할 수도 있고, 사용률이 100%여도 명령을 전혀 진행하지 못할 수도 있음 Linux에서 CPU가 유휴 상태라는 것은 CPU 시간이 필요한 작업이 없다는 뜻임. 반대로 실행할 작업이 있다는 사실만으로 CPU 내부 자원이 완전히 활용된다고 볼 수는 없음 이러한 차이의 원인은 보통 메모리에 있음. 내부 연산보다 메모리 접근이 훨씬 느려 CPU가 데이터를 기다리게 됨 메모리 계층과 캐시 활용 현대 CPU는 대략 1ns당 4~8개 명령을 처리하며, DRAM 접근에는 약 50~100ns가 걸림 대략적인 비교로는 RAM 접근 한 번을 기다리는 동안 약 400~800개 명령을 처리할 수 있음 CPU 캐시는 칩 내부에 데이터를 가까이 두어 접근 지연을 줄이지만 용량이 작음 L1은 약 64KB이며, 접근 시간은 약 1ns로 RAM보다 약 50~100배 빠름 L2는 약 1MB이며, 접근 시간은 약 3~4ns임 L3는 고급 프로세서에서 최대 수백 MB이며, 접근 시간은 약 10~15ns임 DRAM은 GB 단위 용량이며, 접근 시간은 약 50~100ns임 데이터베이스는 데이터를 작은 덩어리로 처리해 캐시를 활용하려 하며, 캐시 활용도는 성능 엔지니어링의 중요한 관심사임 단순한 GROUP BY 구현의 병목 단순한 GROUP BY는 그룹 키를 키로 삼는 해시 테이블을 만...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵