亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

使用輕量進程快照的歷史軟件診斷的制作方法_2

文檔序號:8207705閱讀:來源:國知局
[0034] 在其它實施例中,可以創(chuàng)建快照112并且允許在沒有干擾的情況下運行原始的被 調(diào)試進程102。隨后可以對進程快照112運行測試以觀察該進程如何被影響。如果進程快 照112失敗或具有歸咎于測試的其它問題,那么這些問題將不會影響真實的正在運行的進 程 102 〇
[0035] 圖2示出根據(jù)一個實施例的輕量進程快照。原始進程201包括指向存儲在物理存 儲器203中的數(shù)據(jù)的頁表202。例如,進程201可以在頁表條目204中存儲變量X,其指向 實際存儲了變量X的值的物理存儲器位置205。
[0036] 當從原始進程201創(chuàng)建進程快照206時,原始頁表202被復(fù)制作為快照頁表207。 快照頁表207的內(nèi)容與原始頁表202的內(nèi)容相同,因為它是在快照被創(chuàng)建時存在的。例如, 在進程快照206中,變量X指向快照頁表207中的條目208,其像原始頁表202 -樣指向存 儲了變量X的值的物理存儲器位置205。
[0037] 在快照被創(chuàng)建之后,原始進程201可以繼續(xù)運行。原始進程可以生成變量X的新 值,該新值再次被存儲在原始頁表202的條目204中。然而,變量X的新值是被存儲在物理 存儲器203的新位置209中。因此,原始頁表202被更新以指向物理存儲器位置209,但快 照頁表207維持其快照狀態(tài)并指向變量X的原始值仍然駐留在其中的存儲器位置205。
[0038] 快照機制允許較少破壞性的調(diào)試檢查。通常當在中斷模式中調(diào)試進程時,被調(diào)試 進程被操作系統(tǒng)停止。這意味著在被調(diào)試進程內(nèi)的代碼不執(zhí)行。這對于檢查被調(diào)試狀態(tài)來 說是理想的,因為該狀態(tài)在所述進程被停止時不能改變。然而,在一些情形中,停止所述進 程會導(dǎo)致死鎖或其它系統(tǒng)不穩(wěn)定性。例如,當被調(diào)試進程在其它進程中被共享時,其它進程 可能會嘗試與處于中斷模式中的共享的被調(diào)試進程進行通信。在最佳情形下這會導(dǎo)致在其 它進程中的延遲,而在最壞情況下這將導(dǎo)致死鎖、進程破壞和不穩(wěn)定性。輕量快照模型通過 允許調(diào)試器檢查共享的進程的輕量進程快照而不是真實進程,能夠在這樣的情形中進行調(diào) 試。真實進程被允許在該檢查期間繼續(xù)執(zhí)行。
[0039] 例如,在Windows 8中的Windows Runtime (運行時)(WinRT)模型中,每個應(yīng)用由 至少兩個進程構(gòu)成:其中用戶代碼被執(zhí)行的一個進程以及其中安全敏感對象存在的另一代 理(broker)進程。被代理的對象是系統(tǒng)的一部分,而不是用戶代碼。因此,檢查是調(diào)試的 僅被要求的方面。在給定這些對象邏輯地是調(diào)試器的部分、但存在于分開的代理進程中的 情況下,開發(fā)者可能想要檢查這些對象。然而,代理進程在多個應(yīng)用間被共享,并且停止代 理進程可死鎖所有其它應(yīng)用。因此,使用輕量進程快照來在特定時間創(chuàng)建代理進程的副本 將允許開發(fā)者對該進程進行檢查,同時依然允許代理處理來自其它進程的調(diào)用。
[0040] 輕量進程快照還提供最小破壞性的存儲器數(shù)據(jù)收集。在生產(chǎn)場景中,存儲器診斷 工具通常是基于存儲器轉(zhuǎn)儲或快照的,這是較佳的,因為這不會破壞目標進程。然而,基于 非轉(zhuǎn)儲的存儲器工具(諸如存儲器剖析器)常常執(zhí)行目標進程中的代碼。這對目標進程的 健康和性能都增加了非常大的風險。此外,在收集例程執(zhí)行時,這對于目標進程是破壞性 的?;诖鎯ζ鬓D(zhuǎn)儲的診斷是資源密集的并且常常不提供從剖析器中可用的詳細數(shù)據(jù)。
[0041] 輕量進程快照方式提供了用于收集存儲器數(shù)據(jù)的非破壞性方法并且包括在存儲 器剖析器中找到的多個益處。目標進程的快照被攝取并且該快照被用于類似于以上提到的 調(diào)試檢查的檢查。此外,收集例程可在進程快照中被執(zhí)行,同時允許原始進程繼續(xù)。
[0042] 在生產(chǎn)場景中,診斷工具應(yīng)具有對目標進程在各方面(諸如性能、存儲器利用以 及功能破壞的風險)的最小影響。在開發(fā)場景中,盡管對于最小化這些方面中的開銷依然 是重要的,但是焦點在于確保診斷數(shù)據(jù)的質(zhì)量。進程快照方式在創(chuàng)建快照時提供最小目標 進程破壞。在快照被創(chuàng)建后生成的附加開銷僅應(yīng)用于快照,而非原始進程。診斷工具可接 著對快照來運行破壞性收集和分析,從而以更有效的方式提供更豐富的數(shù)據(jù)。如果這些診 斷例程引起快照進程中的顯著性能降級,引起進程快照碰到其存儲器限度或甚至終止快照 進程,則原始進程將依然繼續(xù)運行。因為只有進程快照被影響,這極大地降低了對目標進程 的數(shù)據(jù)收集的風險狀況。
[0043] 圖3是示出用于進程內(nèi)收集場景的方法的流程圖。在步驟301,攝取目標進程的輕 量進程快照。在步驟302,診斷工具被附加到進程快照。與此同時,原始進程繼續(xù)運行,而 不中斷。在步驟303,針對快照進程來運行收集例程。收集例程可包括例如強制垃圾收集。 堆表也被檢索。在步驟304,所收集的數(shù)據(jù)被保存到存儲,在此它將可用于之后的分析和審 閱。附加地或替換地,在步驟305,所收集的數(shù)據(jù)被進程間通信(IPC)傳輸?shù)搅硪贿M程。在 這個場景中,收集例程不在原始進程上運行。這允許診斷工具最小化破壞原始進程的任何 風險。
[0044] 輕量進程快照方式還支持對數(shù)據(jù)的按需收集和檢查?,F(xiàn)有的存儲器診斷方式要求 在存儲器轉(zhuǎn)儲時收集整個進程的轉(zhuǎn)儲或軌跡。這可能是資源密集的且提供了冗余信息。存 儲器剖析器和工具被用于收集所有需要的數(shù)據(jù)并接著在收集時保存該數(shù)據(jù)。一般而言,這 發(fā)生在進程內(nèi)。
[0045] 輕量進程快照方式具有在工具或用戶要求它時按需收集、保存和讀取進程中的部 分數(shù)據(jù)的能力。這具有更加資源高效的益處并且允許更豐富的用戶驅(qū)動的診斷場景。
[0046] 圖4是根據(jù)一個實施例示出用于用戶驅(qū)動的診斷收集的方法的流程圖。在步驟 401,用戶攝取目標進程的存儲器的快照。在步驟402,用戶將診斷工具附加到進程快照。原 始進程繼續(xù)運行,而不中斷。在步驟403,用戶發(fā)起收集例程和/或用戶發(fā)起進程狀態(tài)檢查, 諸如堆對象檢查。在步驟404,用戶分析數(shù)據(jù)并標識附加的需要的數(shù)據(jù)和/或更特定的數(shù) 據(jù)。在步驟405,用戶接著發(fā)起附加的收集例程和/或用戶發(fā)起進程狀態(tài)檢查。
[0047] 可以理解,圖3中所示的過程的步驟301-305和圖4中所示的過程的步驟401-405 可被同時和/或順序執(zhí)行。還可以理解,每個步驟可以按任何順序執(zhí)行,且可被執(zhí)行一次或 重復(fù)執(zhí)行。
[0048] 輕量進程快照模型支持進程內(nèi)和進程外收集和檢查兩者。進程內(nèi)收集例程顯著地 增加破壞目標進程的風險。因此,如果收集例程運行在非關(guān)鍵進程快照中,而非運行在原始 目標進程中,那么對于原始進程的風險被減輕。傳統(tǒng)地,進程外收集和檢查也最小化進程破 壞。但是,進程外收集具有在收集期間阻止目標進程的缺點。通過使用進程快照,原始進程 可繼續(xù)運行,而進程外收集在快照進程上運行。
[0049] 輕量進程快照模型允許用戶分析歷史存儲器使用。現(xiàn)有的基于存儲器轉(zhuǎn)儲或狀態(tài) 快照的診斷方式受到時間點的快照的限制,并要求用戶手動地在多個快照之間對數(shù)據(jù)進行 相關(guān)。通過使用在此描述的基于輕量進程快照的方式,可在收集時執(zhí)行對數(shù)據(jù)的附加抽象。 這允許在分析時更豐富的診斷交叉參考和相關(guān)。
[0050] 進程內(nèi)存儲器剖析器具有以下優(yōu)點:它在收集例程執(zhí)行的同時針對實際進程存儲 器進行收集。然而,在輕量進程快照方式中,快照存儲器被映射。因此,尤其在隨著時間比 較多個快照時,快照中的存儲器信息可能已經(jīng)被改變并因此在比較快照時變得不相關(guān)。
[0051] 例如,對象指針可在快照之間改變。用于解決這個問題的特定存儲器診斷抽象可 以用允許其被隨著多個快照被跟蹤的標識符來唯一地標記每個對象。其中這可發(fā)生的場景 是分析垃圾收集器(GC)堆,其中針對目標進程可在收集的GC堆上攝取兩個或更多個快照。 在收集時所應(yīng)用來唯一地標識每個堆對象的抽象可允許隨著時間的多個堆快照的比較。相 比于現(xiàn)有的基于轉(zhuǎn)儲的方式,這提供了改進很大的診斷信息,因為它允許診斷工具自動地 將收集之間的數(shù)據(jù)相關(guān)并提供數(shù)據(jù)的區(qū)別或比較視圖以顯示快照之間改變了什么。這些區(qū) 別可以在基線快照和一個或多個以下快照之間:多個基線、多個之后的快照或多個快照上 的數(shù)據(jù)。
[0052] 輕量進程快照可被用于堆比較,如在以下示例中描述的。對目標進程攝取進程快 照(進程快照#1)。進程快照#1提供目標進程的基線。診斷工具附加到進程快照#1,并且 原始進程繼續(xù)運行。診斷工具強制進行垃圾收集并接著走查堆以確保在一致狀態(tài)中堆被合 適地分配,而沒有破壞。診斷工具執(zhí)行堆對象的抽象以跟蹤它們。
[0053] 當在目標進程中的某個動作改變該堆,攝取目標進程的另一進程快照(進程快照 #2)。診斷工具附加到進程快照#2,并且原始進程繼續(xù)運行。診斷工具強制進行垃圾收集。 這使得存在于進程快照#1中的對象移動,并且因此使得它的對象指針改變。診斷工具接著 走查該堆。
[0054] 診斷工具接著執(zhí)行堆對象的抽象以跟蹤它們。兩個快照堆之間的區(qū)別可被執(zhí)行, 包括被移動的以及具有快照之間不同對象指針的對象的比較。
[0055] 只要目標進程中的某個動作改變堆,這些步驟就可被重復(fù)。多個快照可與原始基 線進行比較,或者任何之后的快照可與任何之前的快照進行比較。
[0056] 接下來描述分析多個快照上的數(shù)據(jù)的示例。攝取目標進程的進程快照。診斷工具 附加到快照進程,并且原始進程繼續(xù)運行。從快照進程中收集感興趣的數(shù)據(jù)。攝取目標進 程的附加的快照并且數(shù)據(jù)被收集。來自不同快照的歷史數(shù)據(jù)被分析并隨著時間被呈現(xiàn)以標 識趨勢。
[0057] 在診斷工具從快照進程中收集數(shù)據(jù)時,對原始進程的破壞被最小化。這允許隨著 時間攝取大量的快照來收集特定且被抽象的數(shù)據(jù)(與收集整個存儲器轉(zhuǎn)儲相反),并且允 許趨勢被容易地確定。創(chuàng)建附加的診斷抽象的輕量進程快照相比于傳統(tǒng)的基于轉(zhuǎn)儲的存儲 器診斷工具而言提供了更加豐富的比較。在調(diào)試和
當前第2頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1