42

從11章(性能和可伸縮性),並命名爲上下文切換的JCIP book部分:什麼是緩存命中和緩存未命中?爲什麼上下文切換會導致緩存未命中?

當一個新的線程切換的,它需要的數據不太可能在 本地處理器緩存,所以上下文切換導致緩存未命中,因此線程運行速度稍慢一些,當它們是 首次安排。

  1. 有人能在一個簡單的解釋理解的方式緩存未命中及其可能相反(緩存命中)的概念?
  2. 爲什麼上下文切換會導致大量緩存未命中?
+2

緩存命中 - **在緩存中找到**,而不必「進一步」(進入內存,磁盤等)。沒有其他的東西了。 –

+0

另請參閱[程序員應該瞭解的內存](http://www.akkadia.org/drepper/cpumemory.pdf)。這是舊的,但仍然相關,除了有關預取線程和軟件預取的部分。這部分大多隻適用於Pentium4,但其他所有關於多級緩存的內容仍然適用於本地化和順序訪問。 –

回答

72

有人能在一個簡單的解釋理解的方式高速緩存未命中的概念及其可能相反(緩存命中)?

緩存小姐,通常,當東西在緩存中查找,並沒有發現 - 緩存不包含的項目正在擡頭。緩存點擊是當您在緩存中查找某些內容時,它存儲該項目並且能夠滿足查詢。

爲什麼上下文切換會導致大量緩存未命中?

就內存而言,每個處理器都有一個memory cache--主存的一小部分的高速拷貝。當一個新線程上下文切換到一個處理器時,本地緩存是空的,或者它不對應於該線程所需的數據。這意味着由新線程所做的所有(或大部分)內存查找都會導致緩存未命中,因爲它需要的數據是而不是存儲在本地內存緩存中。然後硬件必須向主存內存發出一些請求,以填充本地內存緩存,這會導致線程初始運行速度變慢。

+2

我在這個問題中增加了第二部分。 – Geek

+0

「每個處理器都有一個內存高速緩存」 - 這個內存高速緩存與L1,L2等高速緩存不同,還是相同? –

+0

相同@RajeevMehta。 – Gray

1

您還應該觀察一下,如果上下文切換導致先前運行的線程返回到可訪問緩存數據的處理器上的活動狀態,則有可能需要的「工作集」仍在緩存中。這是真的可能性取決於緩存大小(和結構)。這也取決於工作量:在線程空閒或等待期間有多少緩存需求,以及閒置或等待期持續多長時間。

0

每當處理器想要從主存儲器中取數據時,首先會查看緩存緩衝區,以查看緩存區中是否存在相應的地址。如果它在那裏,它將通過使用緩存來執行操作;不需要從主內存中獲取。這被稱爲「緩存命中」。

如果該地址不在緩存中,則稱爲「緩存未命中」。如果發生高速緩存未命中,這意味着處理器已經轉到主內存來獲取地址,並且需要更多時間。

0

如果處理器發現內存位置在緩存中,我們說緩存命中,否則我們說緩存未命中。

-2

如果所需數據在L1中,那麼它是緩存命中。如果所需的數據處於另一個緩存內存級別,那麼這是一個緩存未命中。

+0

在L1中未命中但在L2中命中的訪問通常不會被稱爲「緩存未命中」。這是一個L1錯過,但不僅僅是一個不合格的「緩存未命中」。 –

相關問題