나는 달렸다
perf stat -e itlb_misses.miss_causes_a_walk,itlb_misses.walk_completed,itlb_misses.walk_pending grep Hecuba /storage/nvme6/complete_shakespeare_4096_times
그리고 얻었습니다
Performance counter stats for 'grep Hecuba /storage/nvme6/complete_shakespeare_4096_times':
27,732 itlb_misses.miss_causes_a_walk
13,492 itlb_misses.walk_completed
1,048,087 itlb_misses.walk_pending
0.252038252 seconds time elapsed
분명히 세 가지 모두 다릅니다. 어떤 워크로드를 실행하든 카운터의 상대 값은 비슷하기 때문에 성능을 실행하는 실제 워크로드는 중요하지 않습니다.
나는 왜 턴오버가 볼넷으로 이어지는지 이해하지만, 위의 내용은 모든 볼넷이 완료되지는 않았음을 의미하는 것 같습니다. 왜 이런거야?
또한 보류 중인 걷기가 유발된 걷기보다 훨씬 큰 이유는 무엇입니까?
마지막으로, itlb 미스율을 알고 싶다면 위 카운터 중 어떤 것을 사용해야 합니까?
답변1
카운터는다음과 같이 설명:
0x01: (name=miss_causes_a_walk) 페이지 워크를 유발한 모든 ITLB 수준에서 누락
0x10: (name=walk_pending) 명령 가져오기 요청으로 바쁜 페이지 워크의 각 PMH에 대해 주기당 1을 계산합니다.
0x0e: (name=walk_completed) 모든 TLB 수준에서 코드가 누락되면 페이지 탐색이 완료됩니다. (모든 페이지 크기)
필요한 페이지가 페이지 테이블에 실제로 설명되어 있지 않으면 페이지 순회가 완료되지 않을 수 있습니다. "존재하지 않는" 페이지에 도달하는 페이지 순회는 실패한 페이지 순회로 처리됩니다(추론적이지 않은 경우 페이지 순회가 발생함). 잘못).
보류 중인 걷기 카운터는 보류 중인 걷기의 순간 수를 반영하지 않으며 페이지를 탐색하는 데 소요된 주기 수를 계산합니다.
iTLB 손실률을 계산하려면 일반적으로 첫 번째 카운터(총 iTLB 쿼리 수에 상대적)를 사용합니다.
당신은 또한 볼 수 있습니다다중 레벨 페이징의 페이지 테이블 순회에 대한 추가 정보.