共用方式為


練習 3 - 追蹤驅動程式使用量以及開機期間的動態配置

區是作業系統和設備磁碟機用來儲存其資料結構的核心模式元件的記憶體資源。 集區有四個基本配置區域:

  1. 非分頁集區: 保證位於實體記憶體中的配置。

  2. 分頁集區: 可分頁到分頁檔記憶體不足的配置。

  3. NX 不可分頁集區: 非分頁配置,不是可執行檔。

  4. 會話集區: 每個會話所做的配置。 這些是可分頁的。

集區使用量是電腦上整體記憶體使用量的重要參與者, 它是開機後立即的最大記憶體取用者。 集區使用量的減少可減少作業系統的整體記憶體使用量,而非可分頁記憶體是最高優先順序類別,可驅動) 的縮減 (。

在此練習中,您將在開機期間檢閱收件匣 Microsoft 驅動程式配置及其使用量 () 。

步驟 1:跨開機轉換收集集區記憶體追蹤

在此步驟中,您將使用 Windows Performance Recorder (WPR) 收集開機追蹤,其中包含集區和駐留集資料。

  1. 從 [開始]功能表開啟WPR

  2. 選取正確的事件提供者:

    1. 集區使用量

    2. 駐留集

    3. 第一層分級

  3. 選取 [開機 ] 作為 效能案例

  4. 選取 [ 檔案 ] 作為 記錄模式

  5. 將 1 設定為 反復專案數目

  6. 按一下 [開始 ],然後選取位置以儲存 ETL 檔案。

系統會自動重新開機、收集追蹤,並在桌面變成可見之後停止。

WPR 設定對話方塊的螢幕擷取畫面。

步驟 2:使用 WPA 檢閱集區資料

區資料會透過WPA中的Pool Graph摘要資料表公開。 感興趣的索引鍵資料行位於下表中。

如果您以滑鼠右鍵按一下資料行標頭,您可以新增或移除資料行。

詞彙 Description
集區標籤 與集區配置相關聯的標記。
集區標籤模組 模組 (驅動程式) 與集區標籤相關聯。
Stack 顯示執行緒上導致記憶體配置的程式碼路徑。
指出配置是否已放入分頁集區或非分頁集區。
影響類型 顯示配置是否參與穩定狀態記憶體使用量,或是暫時性配置。
  1. 使用 WPA開啟您在步驟 1 中擷取的追蹤。

  2. 開啟 [追蹤] 功能表,然後選取 [ 設定符號路徑]。

    • 指定符號快取的路徑。 如需符號的詳細資訊,請參閱 MSDN 上的 符號支援 頁面。
  3. 開啟 [追蹤] 功能表,然後選取 [載入符號]。

  4. 在 Graph 總管的[記憶體] 類別中尋找集區圖形

  5. 將集區圖形拖放到 [分析] 索引標籤上。

  6. 組織資料表以顯示這些資料行:

    1. 集區標籤模組

    2. 影響類型

    3. 堆疊

    4. 集區標籤

    5. Count

    6. 影響大小大小

    **集區標籤上的注意事項: **

    如果您是驅動程式開發人員,請確定驅動程式所使用的集區標籤清楚且容易識別,以利分析。 例如,如果您的公司名稱是 Fabrikam,您可以將 「Fbk」 前置詞新增至所有集區標籤:FbkPool1、FbkPool2、FbkBuffer 等等。

    顯示重新組織 WPA 資料表外觀的螢幕擷取畫面。

  7. 停用圖形上的所有數列 (按一下滑鼠右鍵 - >停用- >在整個圖形中- >所有數列)

    WPA 中停用功能表選項的螢幕擷取畫面。

  8. 按一下 [ 影響 大小] 資料行標頭,依影響大小排序。

    具有最高穩定狀態記憶體使用量的驅動程式會顯示在頂端。

步驟 3:攔截集區配置資料

  1. 放大時間軸的前 30 秒。

  2. 例如,選取一個驅動程式 (,ACPI.sys,但任何驅動程式都會) 。

    1. 檢閱 NonPaged 記憶體並展開資料列。

      NonPaged 記憶體應該是調查的焦點,因為它無法在系統發生記憶體壓力時移至分頁檔。

    2. 啟用影響暫時性類別的圖例

      顯示記憶體使用量的範例資料的螢幕擷取畫面。

  3. 按一下資料行標頭,依 [影響大小 ] 排序。

  4. 影響 記憶體會直接造成驅動程式的整體記憶體使用量。 在上述範例中,您可以告訴ACPI.sys隨時使用一些非分頁式記憶體,而且此穩定狀態使用量會在驅動程式載入時先增加兩次 (,然後在大約 3 秒) 第二次。

    1. 展開堆疊並流覽。 在頂端,您應該會看到會導致最大穩定狀態集區配置的函式呼叫。

    2. 在下列範例中,您可以看到ACPI.sys總共有 255 個集區配置,在 ACPIInitStartACPI 函式下總計為 1.2 MB。 這是驅動程式開發人員應該著重在何處,以改善驅動程式穩定狀態記憶體使用量,因為此函式會考慮大部分的驅動程式配置。

      範例資料表的螢幕擷取畫面,其中顯示具有可展開進程節點ACPI.sys的記憶體使用量

  5. 按一下資料行標頭,依 大小 排序。

  6. 針對 暫時性 類別執行相同的動作。 展開堆疊並流覽。 在頂端,您應該會看到函式呼叫導致最大的暫時性集區配置。

    • 在下列範例中,您可以看到暫時性記憶體使用量的初始尖峰,主要是因為 ACPI 執行裝置的 DPC (ACPI.sys!ACPIBuildDeviceDpc) 。 在此函式呼叫下導入程式碼的尖峰總計為 455 KB。

      範例資料圖形的螢幕擷取畫面,其中顯示資源時間為 AllocTime、FreeTime (匯總的尖峰未處理大小ACPI.sys記憶體使用量:總和)

步驟 4:測量驅動程式程式碼使用量

  1. 在 [圖形總管] 的[記憶體] 類別中尋找[固定集] 圖表

  2. [固定集 ] 圖形拖放到 [分析] 索引標籤上。

  3. 請務必取消圖形 (Ctrl+Shift+「-」) 。

  4. 選取 [ 檔案支援的頁面 圖形] 預設。

    [檔案支援頁面] 選項的螢幕擷取畫面。

  5. 透過 路徑樹狀目錄 資料行,流覽至您在步驟 3 中選取的驅動程式 (,例如,ACPI.sys C:/Windows/drivers) 底下。

  6. 展開 [ 驅動程式 ] 類別,並將焦點放在 [ 使用 中] 頁面。

    Size資料行中的值代表驅動程式程式碼對記憶體使用量的影響。 在下列範例中,它是 0.48 MB。顯示使用中頁面的範例資料的螢幕擷取畫面。