Kacam.net

컴퓨터 시스템

一次内存读,硬件走了几步

一次普通的内存读,硬件到底走了几步?

프롬프트를 복사한 뒤 한 곳을 고르세요. 답을 늘어놓는 대신 면접관이 되어 장면마다 캐묻습니다.

앱이 설치된 휴대폰이면 시스템이 바로 앱을 엽니다. 위챗 안에서는 외부 앱을 열 수 없으니 먼저 브라우저로 여세요.

복사한 글 끝에는 채점용 정답이 붙어 있습니다. 먼저 읽지 마세요 —— 스스로 끌어내 봤는지가 핵심입니다.

这一份的分水岭是一问:翻译缓存没命中,和一个页根本不在内存里,是同一件事吗? 两者差三到四个数量级,一个纯硬件几十周期,一个要陷进内核 —— 分不清这两个,线上看到 fault 数飙升时就不知道该往哪查。

前面几幕会逼你自己算出「一张页表要 4MB、每个进程一张」,然后自己推出为什么必须分级、为什么必须有那个缓存。

顺带回答一个很多人记反的问题:虚拟内存的主要目的到底是不是「内存不够时拿磁盘顶上」。

★★★★☆ · 약 35분 · 무엇을 보는가: 多级页表为什么存在、TLB 与缺页的区别、四个数量级

이 편이 단련하는 것

페이징과 주소 변환 캐시와 캐시 라인 지연의 자릿수

이 문제 해봤나

로그인하면 이 문제를 해봤다고 기록할 수 있습니다. 다음에 오면 언제 했는지 보입니다.

해본 사람들의 기록

아직 아무도 쓰지 않았습니다. 해본 뒤에 무엇이 나왔는지 적어 주세요 — 어느 장면에서 막혔는지, 나중에 바꾼 결론은 무엇인지.

로그인 후에 기록을 남길 수 있습니다.

사용법

이 묶음은 학습형입니다: 말문이 막힐 때까지 몰아붙이지 않고 이끕니다. 막히면 먼저 어느 층에서 막혔는지 묻고(들어본 적 없음 / 알지만 왜인지 모름 / 알지만 못 씀), 그다음 무엇을 줄지 정합니다. 같은 지점에서 두 번 이끌어도 안 되면 그때 답을 말하고, 당신의 말로 다시 설명하게 합니다.

계속 숫자를 요구합니다: 「오버헤드가 있다」「빠르다」고 답하면 끊습니다. 자릿수를 못 대는 결론은 외운 결론 —— 이 묶음이 단련하는 게 바로 그것입니다.

시작하는 법

  1. 하나 골라서 열고, 프롬프트를 복사합니다.
  2. 새 빈 대화에 붙여 넣고, 아무 말도 하지 말고 첫 질문을 기다립니다.
  3. 자릿수를 물어볼 각오를 하세요: 몇 나노초, 몇 마이크로초, 몇 배 차이. 모르면 모른다고 하면 기록하고 넘어갑니다.

도중에 언제든 외칠 수 있는 네 가지 명령

  • 跳过 바로 다음 장면으로
  • 换个说法 이 부분을 다른 각도로 다시 설명
  • 直说吧 답을 전부 말하고, 그다음 내가 다시 설명하게
  • 复盘 바로 마무리로 넘어가 회고 카드 출력

세 가지 함정

  • 끝에 있는 정답 카드를 먼저 읽지 마세요 —— 그 「흔히 잘못 아는 것」 항목이 곧 모든 질문의 답입니다.
  • 용어부터 꺼내지 마세요. 「이건 TLB 미스」라고 말하기는 쉽고, 페이지 폴트보다 몇 자릿수 빠른지 말할 수 있어야 아는 것입니다.
  • 칭찬하기 시작하면 「칭찬하지 말라」는 철칙을 상기시키세요. 이끄는 것과 달래는 것은 다릅니다.

숫자 감각부터라면 랜덤 읽기와 첫 바이트 편을. 장애 조사에 쓰이는 건 malloc, TCP 멈춤, 컨텍스트 스위치. 동시성 코드를 쓴다면 재배치와 거짓 공유를.