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

Arm 更新 Neoverse 產(chǎn)品路線圖,實現(xiàn)基于 Arm 平臺的人工智能基礎(chǔ)設(shè)施
Arm新Arm Neoverse計算子系統(tǒng)(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

評論