作者:安謀科技 (Arm China) 主任工程師 Ker Liu;安謀科技 (Arm China) 主任軟件工程師 蔡亦波
有客戶希望我們幫忙分析 Eigen gemm 基準(zhǔn)測(cè)試的一些執(zhí)行情況。具體來(lái)說(shuō)是為什么 L1D_CACHE_WR 的值會(huì)低于 L2D_CACHE_WR,這種情況令人費(fèi)解。
通常,我們期望寫操作發(fā)生在 L1 數(shù)據(jù)緩存中。來(lái)自 L1 數(shù)據(jù)緩存的一些回寫可能會(huì)引發(fā) L2 緩存寫操作。一般來(lái)說(shuō),L1 數(shù)據(jù)緩存寫操作的數(shù)量應(yīng)該高于 L2 緩存寫操作的數(shù)量。對(duì)于一些常用的工作負(fù)載(例如 Redis 和 Nginx),如果我們對(duì) PMU 進(jìn)行監(jiān)控,就會(huì)發(fā)現(xiàn) L1 數(shù)據(jù)緩存寫操作的數(shù)量會(huì)高于 L2 緩存寫操作的 PMU 值。但對(duì)于某些工作負(fù)載而言,L1 數(shù)據(jù)緩存寫操作的 PMU 值要低于 L2 緩存寫操作的 PMU 值。
本文中,我們將分析 L2D_CACHE_WR 的計(jì)數(shù),以及在何種情況下,L1D_CACHE_WR 的 PMU 值會(huì)低于 L2D_CACHE_WR。
驗(yàn)證平臺(tái)
本文中的測(cè)試都是基于 Arm Neoverse N2 平臺(tái)的服務(wù)器。下表顯示了該服務(wù)器的硬件和軟件版本信息。
調(diào)查
對(duì)于大多數(shù)工作負(fù)載而言,L1D_CACHE_WR 的 PMU 值要高于 L2D_CACHE_WR。例如,對(duì)于 Redis 來(lái)說(shuō),一個(gè) Redis 進(jìn)程在Core 1 上運(yùn)行。使用 Memtier 客戶端來(lái)生成讀寫混合請(qǐng)求。
以下是 Neoverse N2 PMU 指南[1]中 L1D_CACHE_WR 和 L2D_CACHE_WR 的定義。
L1D_CACHE_WR:此事件將統(tǒng)計(jì)在 L1 數(shù)據(jù)緩存中查找的任何內(nèi)存寫入操作。此事件還將統(tǒng)計(jì)由數(shù)據(jù)緩存按虛擬地址清零 (DC ZVA) 指令所引發(fā)的訪問(wèn)操作。
L2D_CACHE_WR:此事件將統(tǒng)計(jì)由 CPU 發(fā)出并在統(tǒng)一 L2 緩存中查找的任何內(nèi)存寫入操作。無(wú)論 L2 緩存是否命中,該事件都將計(jì)數(shù)。此事件還將統(tǒng)計(jì)從 L1 數(shù)據(jù)緩存分配到 L2 緩存的任何回寫。此事件將 DC ZVA 操作視為存儲(chǔ)指令并統(tǒng)計(jì)這些訪問(wèn)。來(lái)自 CPU 外部的監(jiān)聽(tīng)不計(jì)算在內(nèi)。
從 Neoverse N2 技術(shù)參考手冊(cè)[2]中我們知道,L1 緩存和 L2 緩存之間具有嚴(yán)格的包含關(guān)系。存在于 L1 緩存中的任何緩存行也同樣存在于 L2 緩存中。
經(jīng)過(guò)分析研究,我們發(fā)現(xiàn)如下規(guī)律:
L2D_CACHE_WR 的 PMU 值約等于“L1 數(shù)據(jù)緩存重填”、“L1 指令緩存重填”和“L1 預(yù)取重填”的 PMU 值之和。
為什么我們要從這三個(gè)事件開(kāi)始分析?
因?yàn)檫@三個(gè)事件都會(huì)引起 L1 數(shù)據(jù)緩存和 L1 指令緩存的替換行為,包括干凈替換 (clean evictions) 和臟替換 (dirty evictions)。如果仔細(xì)看 L2D_CACHE_WR 的定義,您會(huì)發(fā)現(xiàn)它將統(tǒng)計(jì)從 L1 數(shù)據(jù)緩存分配到 L2 緩存的任何回寫。L1 數(shù)據(jù)緩存回寫則統(tǒng)計(jì)從 L1 數(shù)據(jù)緩存到 L2 緩存的任何臟數(shù)據(jù)回寫,該值通常非常小,與 L2D_CACHE_WR 的值并不匹配,且沒(méi)有專門針對(duì)干凈替換的 PMU 計(jì)數(shù)器。因此,我們綜合考慮了所有可能導(dǎo)致緩存替換的事件(包括干凈替換和臟替換),從不同的角度進(jìn)行分析,找到了這個(gè)規(guī)律。
我們已在幾個(gè)典型場(chǎng)景中驗(yàn)證了這一發(fā)現(xiàn)。大多數(shù)測(cè)試用例確實(shí)遵循這種規(guī)律。
對(duì)于 Redis 的情況
我們使用 Memtier 客戶端作為負(fù)載生成器,為 Redis 進(jìn)程生成混合讀寫請(qǐng)求,結(jié)果發(fā)現(xiàn) PMU 值遵循相應(yīng)規(guī)律。
對(duì)于“Telemetry: ustress: l1d_cache_workload”[3]的情況
此基準(zhǔn)測(cè)試僅讀取數(shù)據(jù),旨在對(duì) L1 數(shù)據(jù)緩存的未命中情況進(jìn)行壓力測(cè)試,結(jié)果發(fā)現(xiàn) PMU 值遵循相應(yīng)規(guī)律。
對(duì)于“Telemetry: ustress: l1i_cache_workload”[4]的情況
此基準(zhǔn)測(cè)試將重復(fù)調(diào)用那些與頁(yè)面邊界對(duì)齊的函數(shù),旨在對(duì) CPU L1 指令緩存的未命中情況進(jìn)行壓力測(cè)試,結(jié)果發(fā)現(xiàn) PMU 值遵循相應(yīng)規(guī)律。
對(duì)于 Eigen gemm 的情況
此基準(zhǔn)測(cè)試包含許多讀取操作。L1D_CACHE_WR 的 PMU 值比較小,但 L1 緩存的預(yù)取操作導(dǎo)致 L2D 的 PMU 值很大。因此,我們得到的結(jié)果是 L1D_CACHE_WR 的 PMU 值要低于 L2D_CACHE_WR。PMU 值也遵循這種規(guī)律。
但是,流寫入是一個(gè)例外。我們使用“Telemetry: ustress: memcpy_workload”[5]基準(zhǔn)測(cè)試,對(duì)加載-存儲(chǔ) (load-store) 管線中完全處于 L1D 緩存內(nèi)的 memcpy 進(jìn)行壓力測(cè)試。memcpy 觸發(fā)流寫入,跳過(guò) L1 并直接寫入 L2。此時(shí),PMU 值并不遵循這種規(guī)律。
以下是 Neoverse N2 技術(shù)參考手冊(cè)中關(guān)于寫入流模式的描述。
Neoverse N2 核心支持寫入流模式(有時(shí)也稱為讀取分配模式),這一點(diǎn)同時(shí)適用于 L1 和 L2 緩存。
當(dāng)發(fā)生讀取未命中或?qū)懭胛疵袝r(shí),會(huì)向 L1 和 L2 緩存分配緩存行。但是,寫入大塊數(shù)據(jù)可能會(huì)導(dǎo)致不必要的數(shù)據(jù)浪費(fèi)緩存空間。這也可能會(huì)浪費(fèi)功率和性能,因?yàn)樵趫?zhí)行行填充后,如果 memset() 隨后寫入了整行數(shù)據(jù),行填充數(shù)據(jù)將被丟棄。有些情況下,不需要在寫入時(shí)分配緩存行,例如在執(zhí)行 C 標(biāo)準(zhǔn)庫(kù) memset() 函數(shù)以將一大塊內(nèi)存清除為某個(gè)已知值時(shí)。
為了防止不必要的緩存行分配,內(nèi)存系統(tǒng)可以在行填充完成之前檢測(cè)核心何時(shí)寫入完整的緩存行。如果在可配置數(shù)量的連續(xù)行填充中檢測(cè)到這種情況,系統(tǒng)就會(huì)切換到寫入流模式。
在寫入流模式下,讀取操作會(huì)正常執(zhí)行,仍可能引發(fā)行填充。寫入操作還是會(huì)先查找緩存,但如果未命中,它們就會(huì)寫入 L2 或系統(tǒng),而不是開(kāi)始行填充。
總結(jié)
在基于 Neoverse N2 的服務(wù)器上,L2D_CACHE_WR 會(huì)統(tǒng)計(jì)來(lái)自 L1 緩存的所有緩存替換(包括干凈替換和臟替換)以及流寫入。
對(duì)于讀取大量數(shù)據(jù)的工作負(fù)載,我們會(huì)看到,L1D_CACHE_WR 的 PMU 值要低于 L2D_CACHE_WR。
-
ARM
+關(guān)注
關(guān)注
134文章
8976瀏覽量
365330 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
8750瀏覽量
84664 -
數(shù)據(jù)緩存
+關(guān)注
關(guān)注
0文章
23瀏覽量
7024 -
PMU
+關(guān)注
關(guān)注
1文章
103瀏覽量
21501
原文標(biāo)題:深入研究 Arm Neoverse N2 PMU 事件 L2D_CACHE_WR
文章出處:【微信號(hào):Arm社區(qū),微信公眾號(hào):Arm社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論