執行緒檢視 (平行處理效能)
這是「並行視覺化檢視」中最詳細、功能最豐富的執行緒檢視。您可以使用這個檢視來識別執行緒是正在執行,還是因為同步處理、I/O 或其他原因而處於封鎖狀態。
在程式碼剖析分析期間,「並行視覺化檢視」會檢查每個應用程式執行緒的所有作業系統內容切換事件。內容切換發生的原因有很多,例如下列原因:
執行緒因為同步處理原始物件而遭封鎖。
執行緒的配量到期。
執行緒發出封鎖 I/O 要求。
當執行緒停止執行後,[執行緒檢視] 就會為每一個內容切換指派分類。分類會出現在檢視的左下方部分的圖例顯示。"並行視覺化檢視會透過搜尋執行緒的呼叫堆疊分類內容切換事件已知導致封鎖的應用程式開發介面。如果有未呼叫堆疊相符項目, 使用Windows 提供的等候原因。不過, Windows 分類可能會根據實作詳細資料,而且可能不會反映使用者的意向。例如, Windows 報告在原生輕型讀取器-寫入器鎖定成 I/O 而非同步處理封鎖的等候原因。在許多情況下,您可以透過檢查對應於內容切換事件的呼叫堆疊來識別封鎖事件的根本原因。
[執行緒檢視] 也會顯示在執行緒之間的相依性。例如,如果您找到在同步處理物件上封鎖的執行緒,您可以尋找解除封鎖的執行緒,然後當解除封鎖另一個時,您可以檢查在點上呼叫堆疊中的活動。
在執行緒執行時, "並行視覺化檢視"會收集範例。在 [執行緒檢視] 中,在執行區段時,您可以分析由一或多個執行緒所執行的程式碼。您也可以檢查封鎖分析和呼叫堆疊樹狀結構的執行的報表。
使用方式
以下是一些方法可以使用執行緒檢視:
識別應用程式的使用者介面 (UI) 在特定執行階段沒有回應的原因。
識別因為同步處理、I/O、分頁錯誤等情形而封鎖所花費的時間長度。
識別對系統上執行之其他處理序造成的干擾程度。
識別平行執行的負載平衡問題。
識別延展性不佳或不存在的原因 (例如,平行應用程式的效能未在系統中有更多邏輯核心可使用時獲得改善的原因)。
了解在應用程式中的並行程度去幫助平行處理。
了解各個背景工作執行緒彼此之間的相依性,以及執行流程的關鍵路徑。
檢查指定的時間間隔和執行緒
執行緒檢視中顯示時間表。您可以在時刻表的縮放和平移來檢查應用程式的特定時間間隔和執行緒。在 X 軸為時間,在 Y 軸上是數個通道:
每一個磁碟機的兩個 I/O 通道在系統中,一個通道進行讀取另一個通道進行寫入。
每個處理序的執行緒的通道。
如果在追蹤有標記事件則為指示通道。指示通道最初會顯示在產生這些事件的執行緒通道下方。
GPU通道
[執行緒檢視]中的圖例:
執行緒檢視
一開始,執行緒都必須依照其建立的順序排序,因此,主應用程式執行緒是第一個。您可以使用在檢視左上角的排序選項來依照其他準則排序執行緒 (例如,在已執行的最多執行工作)。
您可以藉由在左欄工具列上選取其名稱然後選取 [隱藏選取的執行緒] 按鈕執行工作來隱藏未通過的執行緒。建議您隱藏整個被封鎖的執行緒,因為其統計資料無關,而且可以堵塞報表。
若要找出其他執行緒去隱藏,作用中的圖例,選擇 [個別執行緒摘要] 在 [設定檔報告] 報表上。如此會顯示 [執行解析] 圖形,顯示目前選取的間隔時間的執行緒狀態。在某些縮放層級時,某些執行緒可能不會顯示。發生這種情況時,橢圓形會顯示在右邊。
當您選擇間隔時間和特定執行緒上時,您可以開始執行效能分析。
分析工具。
本節說明報表和其他程式碼剖析工具。
執行緒封鎖詳細資料
若要取得在執行緒上的特定區域已封鎖事件的資訊,請顯示在該區域的指標的工具提示。它包含的資訊,如分類、區域開始時間,封鎖期間和封鎖的應用程式開發介面。如果您選擇封鎖區域,堆疊提示在下方窗格則會顯示,且在工具提示中顯示的相同資訊。您可以透過檢查呼叫堆疊的方式,判斷執行緒封鎖事件的基本原因。您可以藉由選取區段和檢查目前的索引標籤上找到其他處理序和執行緒資訊。
執行路徑可能會有多重封鎖事件。您可以透過封鎖分類檢查,讓您可以更快速地找到問題的區域。請選擇在左側的圖例中封鎖區塊的其中一個。
在執行緒之間的相依性
[並行視覺化檢視] 中的處理序可以顯示在執行緒之間的相依性,讓您判斷已嘗試認可並了解其他執行緒可讓其執行的封鎖執行緒。若要判斷哪一個執行緒解除封鎖另一個執行緒,請選取相關的封鎖區段。如果"並行視覺化檢視"可決定解除封鎖執行緒,它將直線繪製在解除封鎖執行緒及後續封鎖區段的執行區段之間。此外, [解除封鎖堆疊] 索引標籤會顯示相關的呼叫堆疊。
執行緒執行詳細資料
在執行緒的時間表圖形中,執行程式碼時會顯示綠色區段。您可以取得有關執行區段的詳細資訊。
當您選取中的執行區段時, "並行視覺化檢視"會尋找相關的呼叫堆疊的時間點並且顯示在選取的位置上方顯示黑色的插入號還有在執行區段顯示在 [目前的堆疊] 索引標籤的呼叫堆疊。您可以選擇在執行區段的多點。
注意事項 |
---|
"並行視覺化檢視"可能無法解析在執行區段中的選項。通常,當區段的持續期間小於一毫秒,就會發生這個錯誤。 |
若要取得位於目前選取的時間範圍的所有啟用的 (未隱藏的) 執行緒的執行組態檔,請選取作用中圖例的 [執行] 按鈕。
時間表圖形
時間表圖形會顯示處理序內所有執行緒及主機電腦上所有實體磁碟裝置的活動。它同時也顯示了 GPU 活動和標記事件。您可以放大檢視詳細資料或檢視較長的時間間隔。您也可以選擇在圖形上按取得有關分類、開始時間、句號和呼叫堆疊的狀態的詳細資料。
在時間表圖形中,色彩表示任何指定時間的執行緒狀態。例如,綠色區段表示執行緒正在執行、紅色區段表示因同步處理遭封鎖、黃色區段表示已遭先佔,而紫色區段則表示正忙著處理裝置 I/O。您可以使用這個檢視來檢查整個包含在平行迴圈或在並行工作的執行緒中執行的效果平衡。如果執行緒比其他執行緒使用更長的時間才完成,工作可能是不平衡的。您可以使用這項資訊在執行緒之間更平均地分散工作來改善程式的效能。
如果 在某個時間點只有一個執行緒是綠色 (正在執行),應用程式在系統上可能無法使用並行執行階段。您也可以使用時間表圖形檢查執行緒之間的相依性,以及封鎖和遭到封鎖之執行緒的時間先後關聯性。若要重新整理執行緒,請選取執行緒,然後在工具列選取上或下按鈕。若要隱藏執行緒,請先選取這些然後選取 [隱藏執行緒] 按鈕。
程式碼剖析報告
在時間表圖形下方是時刻表設定檔和具有各種報表的索引標籤的窗格。變更[執行緒檢視],報表會自動隨著更新。如果是大型的追蹤,當更新計算時,報告窗格可能無法使用。每一份報表都會有兩項篩選調整:[減少雜訊] 和 [我的程式碼]。[減少雜訊] 可協助篩除呼叫樹狀圖中需時甚短的不重要項目。預設篩選條件值為 2 ,不過,您可以調整它從 0 到 99。若要檢視您的程式碼只能呼叫樹狀圖,選取 [我的程式碼] 核取方塊。若要檢視所有呼叫樹狀圖,請清除它。
程式碼剖析報表
此索引標籤會顯示對應至作用中圖例項目的報表。若要顯示報表,選取其中一個項目。
目前的堆疊
這個選項在時間表圖形會顯示在執行緒區段所選取之點的呼叫堆疊。呼叫堆疊會加以修剪顯示與您的應用程式相關的活動。
解除封鎖堆疊
若要查看哪個執行緒解除封鎖所選執行緒以及何種程式碼,然後選取 [解除封鎖堆疊] 索引標籤。
執行
執行報告顯示在執行階段失敗時所使用的應用程式。
若要尋找執行階段所需的程式碼,請展開呼叫樹狀圖,然後在呼叫樹狀圖中的捷徑功能表上,選取 [檢視原始檔] 或 [檢視呼叫位置]。[檢視原始檔] 找出執行的程式碼。[檢視呼叫位置] 找到呼叫時執行的程式碼的程式碼。如果只存在一個呼叫位置,它的程式碼會反白顯示。如果存在多個呼叫位置,可以選擇要在對話方塊中要顯示然後選取 [移至原始檔] 按鈕反白顯示呼叫位置的程式碼的運算式。尋找有多執行個體,最多時間或兩者皆有之呼叫位置通常最有幫助。如需詳細資訊,請參閱執行分析報表。
同步處理
同步處理報表會顯示哪些呼叫引發同步處理封鎖,以及每一個呼叫堆疊的彙總封鎖時間。如需詳細資訊,請參閱同步處理時間。
I/O
I/O 報表會顯示哪些呼叫引發 I/O 封鎖,以及每一個呼叫堆疊的彙總封鎖時間。如需詳細資訊,請參閱I/O 時間 (執行緒檢視)。
睡眠
睡眠報表會顯示哪些呼叫引發睡眠封鎖,以及每一個呼叫堆疊的彙總封鎖時間。如需詳細資訊,請參閱睡眠時間。
記憶體管理
記憶體管理報表以及每個呼叫堆疊的彙總封鎖時間。顯示記憶體管理區塊中發生的呼叫。您可以使用這項資訊識別有過多的分頁或記憶體回收問題的區域。如需詳細資訊,請參閱記憶體管理時間。
先佔
先佔報表會顯示執行個體在系統中的處理序取代目前處理序的執行緒目前的流程和個別執行緒。您可以使用這項資訊識別為先佔封鎖的處理序和執行緒。如需詳細資訊,請參閱先佔時間。
UI 處理
UI 處理報表會顯示哪些呼叫引發 UI 處理封鎖,以及每一個呼叫堆疊的彙總封鎖時間。如需詳細資訊,請參閱UI 處理時間。
個別執行緒摘要
此索引標籤會顯示每個執行緒耗用在每一種狀態 (例如執行中、遭封鎖和 I/O) 的總時間,並以不同的顏色區分各個資料行。資料行底部會加上標籤。當您調整在時間表圖形時的縮放層級時,索引標籤會自動更新。在某些縮放層級時,某些執行緒可能不會顯示。發生這種情況時,橢圓形會顯示在右邊。如果您想要使用的執行緒沒有顯示,您可以隱藏其他執行緒。如需詳細資訊,請參閱個別執行緒摘要報表。
磁碟作業
此索引標籤會顯示哪些處理序和執行緒磁碟 I/O 涉及了代表目前處理序,檔案會連續 (例如, DLL 會載入),已讀取的位元組數目及其他資訊。這份報表可用來評估執行期間存取檔案所耗用的時間,尤其是當您的處理序似乎受限於 I/O 時特別有用。如需詳細資訊,請參閱磁碟作業報告 (執行緒檢視)。