itlb_misses.miss_causes_a_walk, itlb_misses.walk_completed 및 itlb_misses.walk_pending의 차이점은 무엇입니까?

itlb_misses.miss_causes_a_walk, itlb_misses.walk_completed 및 itlb_misses.walk_pending의 차이점은 무엇입니까?

나는 달렸다

  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 쿼리 수에 상대적)를 사용합니다.

당신은 또한 볼 수 있습니다다중 레벨 페이징의 페이지 테이블 순회에 대한 추가 정보.

관련 정보