PV 驅動程式故障診斷 - Amazon Elastic Compute Cloud

PV 驅動程式故障診斷

對於您使用舊版 Amazon EC2 映像和 PV 驅動程式時可能發生問題,以下是解決方案。

Windows Server 2012 R2 在執行個體重新開機後遺失網路及儲存體連線能力

重要

僅 2014 年 9 月以前推出的 AMI 才會發生此問題。

2014 年 9 月 10 日之前開放使用的 Windows Server 2012 R2 Amazon Machine Images (AMI) 可能會在執行個體重新開機後遺失網路及儲存體的連線能力。AWS Management Console系統日誌中的錯誤指出:無法偵測主控台輸出的 PV 驅動程式詳細資訊。連線能力遺失是由「隨插即用清理」功能造成的。此功能會每 30 天掃描並停用非使用中的系統裝置。功能會不正確的將 EC2 網路裝置識別為非使用中,並從系統移除它。當發生此狀況時,執行個體便會在重新開機後遺失網路連線能力。

針對您懷疑受到此問題影響的系統,您可以下載及執行就地驅動程式升級。若您無法執行就地驅動程式升級,您可以執行協助程式指令碼。指令碼會判斷您的執行個體是否受到影響。若其受到影響,但 Amazon EC2 網路裝置尚未遭到移除,指令碼會停用隨插即用清理掃描。若已移除網路裝置,指令碼會修復裝置,停用隨插即用清理掃描,讓您的執行個體重新開機並啟用網路連線能力。

選擇如何修正問題

有兩種方法可以還原受此問題影響執行個體的網路及儲存體連線能力。選擇下列其中一種方法:

方法 必要條件 程序概觀
方法 1 - 增強聯網 增強聯網僅在 Virtual Private Cloud (VPC) 中可用,且需要 C3 執行個體類型。若伺服器目前使用的並非 C3 執行個體類型,您必須暫時變更它。 您將伺服器執行個體類型變更為 C3 執行個體。增強聯網便可讓您連線到受影響的執行個體並修正問題。在修正問題之後,您再將執行個體變更回原始的執行個體類型。此方法通常比方法 2 更快,也較不容易導致使用者錯誤。執行 C3 執行個體時,您將需要支付額外的費用。
方法 2 - 登錄組態 建立或存取第二個伺服器的能力。變更登錄設定的能力。 您將根磁碟區從受影響的執行個體分離,再將其連接到不同的執行個體、連線,並在登錄中進行變更。執行額外的伺服器時,您將需要支付額外的費用。此方法比方法 1 慢,但此方法可在方法 1 無法解決問題時使用。

方法 1 - 增強聯網

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 尋找受影響的執行個體。選取執行個體,並依序選擇 Instance state (執行個體狀態)Stop instance (停止執行個體)

    警告

    停止執行個體時,在任何執行個體存放區磁碟區的資料都會清除。若要保留執行個體存放區磁碟區的資料,請將資料備份至持久性儲存。

  4. 在執行個體停止後,建立備份。選取執行個體,依序選擇 Actions (動作)Image and templates (映像和範本),然後選擇 Create image (建立映像)

  5. 將執行個體類型變更為任何 C3 執行個體類型。

  6. 啟動實例。

  7. 使用遠端桌面連線到執行個體,然後將 AWS PV 驅動程式升級套件 下載到執行個體。

  8. 解壓縮資料夾的內容,然後執行 AWSPVDriverSetup.msi

    在執行 MSI 後,執行個體會自動重新開機並升級驅動程式。執行個體最多可能會在 15 分鐘內無法使用。

  9. 在升級完成且執行個體在 Amazon EC2 主控台中通過兩項運作狀態檢查後,使用遠端桌面連線到執行個體,確認已安裝新的驅動程式。在裝置管理員中,於 Storage Controllers (儲存控制器) 下,尋找 AWS PV Storage Host Adapter (AWS PV 儲存體主機控制器)。確認驅動程式版本與驅動程式版本歷史記錄表格中列出的最新版本相同。如需詳細資訊,請參閱 AWS PV 驅動程式套件歷程記錄

  10. 停止執行個體,並將執行個體變更回原始的執行個體類型。

  11. 啟動執行個體,繼續一般的使用。

方法 2 - 登錄組態

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 尋找受影響的執行個體。選取執行個體,並依序選擇 Instance state (執行個體狀態)Stop instance (停止執行個體)

    警告

    停止執行個體時,在任何執行個體存放區磁碟區的資料都會清除。若要保留執行個體存放區磁碟區的資料,請將資料備份至持久性儲存。

  4. 選擇 Launch Instance (啟動執行個體),在與受影響的執行個體相同的可用區域中建立暫時性的 Windows Server 2008 或 Windows Server 2012 執行個體。請不要建立 Windows Server 2012 R2 執行個體

    重要

    若您沒有在與受影響的執行個體相同的可用區域內建立執行個體,您將無法將受影響執行個體的根磁碟區連接到新的執行個體。

  5. 在導覽窗格中,選擇 Volumes (磁碟區)

  6. 尋找受影響執行個體的根磁碟區。分開磁碟區,再將磁碟區連接至先前建立的暫時執行個體。使用預設裝置名稱 (xvdf) 連接它。

  7. 使用遠端桌面連接至暫時性執行個體,然後使用 Disk Management 公用程式將磁碟區變成可用

  8. 在暫時性執行個體上,開啟 Run (執行) 對話方塊,輸入 regedit,然後按 Enter 鍵。

  9. 在登錄編輯程式導覽窗格中,選擇 HKEY_Local_Machine,然後從 File (檔案) 選單選擇 Load Hive (載入 Hive)

  10. Load Hive (載入 Hive) 對話方塊中,導覽至 Affected Volume (受影響的裝置)\Windows\System32\config\System 然後在 Key Name (索引鍵名稱) 對話方塊中輸入暫時性的名稱。例如:輸入 OldSys。

  11. 在登錄編輯程式的導覽窗格中,尋找下列索引鍵:

    HKEY_LOCAL_MACHINE\your_temporary_key_name\ControlSet001\Control\Class\4d36e97d-e325-11ce-bfc1-08002be10318

    HKEY_LOCAL_MACHINE\your_temporary_key_name\ControlSet001\Control\Class\4d36e96a-e325-11ce-bfc1-08002be10318

  12. 針對每個索引鍵,按兩下 UpperFilters,輸入 XENFILT 的值,然後選擇 OK (確認)

    
                                受影響磁碟區的登錄機碼。
  13. 尋找下列索引鍵:

    HKEY_LOCAL_MACHINE\your_temporary_key_name\ControlSet001\Services\XENBUS\Parameters

  14. 使用 ActiveDevice 做為名稱來建立新的字串 (REG_SZ),其值如下:

    PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01

  15. 尋找下列索引鍵:

    HKEY_LOCAL_MACHINE\your_temporary_key_name\ControlSet001\Services\XENBUS

  16. Count 從 0 變更為 1。

  17. 尋找並刪除下列索引鍵:

    HKEY_LOCAL_MACHINE\your_temporary_key_name\ControlSet001\Services\xenvbd\StartOverride

    HKEY_LOCAL_MACHINE \your_temporary_key_name\ControlSet001\Services\xenfilt\StartOverride

  18. 在登錄編輯程式導覽窗格中,選擇一開始開啟登錄編輯程式時建立的暫時性機碼。

  19. File (檔案) 選單中,選擇 Unload Hive (解除載入 Hive)。

  20. 在磁碟管理公用程式中,選擇先前連接的磁碟機,開啟內容 (按右鍵) 選單,然後選擇 Offline (離線)

  21. 在 Amazon EC2 主控台中,從暫時性的執行個體分離受影響的磁碟區,然後以 /dev/sda1 做為裝置名稱,重新連接到您的 Windows Server 2012 R2 執行個體。您必須指定此裝置名稱,將磁碟區指定為根磁碟區。

  22. 啟動實例。

  23. 使用遠端桌面連線到執行個體,然後將 AWS PV 驅動程式升級套件 下載到執行個體。

  24. 解壓縮資料夾的內容,然後執行 AWSPVDriverSetup.msi

    在執行 MSI 後,執行個體會自動重新開機並升級驅動程式。執行個體最多可能會在 15 分鐘內無法使用。

  25. 在升級完成且執行個體在 Amazon EC2 主控台中通過兩項運作狀態檢查後,使用遠端桌面連線到執行個體,確認已安裝新的驅動程式。在裝置管理員中,於 Storage Controllers (儲存控制器) 下,尋找 AWS PV Storage Host Adapter (AWS PV 儲存體主機控制器)。確認驅動程式版本與驅動程式版本歷史記錄表格中列出的最新版本相同。如需詳細資訊,請參閱 AWS PV 驅動程式套件歷程記錄

  26. 刪除或停止您在此程序中建立的暫時性執行個體。

執行補救指令碼

若您無法執行就地驅動程式升級或遷移至較新的執行個體,您可以執行補救指令碼來修正隨插即用清理任務造成的問題。

執行補救指令碼

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選擇您要執行補救指令碼的執行個體。依序選擇 Instance state (執行個體狀態)Stop instance (停止執行個體)

    警告

    停止執行個體時,在任何執行個體存放區磁碟區的資料都會清除。若要保留執行個體存放區磁碟區的資料,請將資料備份至持久性儲存。

  4. 在執行個體停止後,建立備份。選取執行個體,依序選擇 Actions (動作)Image and templates (映像和範本),然後選擇 Create image (建立映像)

  5. 依序選擇 Instance state (執行個體狀態)Start instance (啟動執行個體)

  6. 使用遠端桌面連線到執行個體,然後將 RemediateDriverIssue.zip 資料夾 下載到執行個體。

  7. 解壓縮資料夾的內容。

  8. 根據 Readme.txt 檔案中的說明執行補救指令碼。檔案位於您解壓縮 RemediateDriverIssue.zip 的資料夾中。

TCP 卸載

重要

執行 AWS PV 或 Intel 網路驅動程式的執行個體沒有此問題。

根據預設,Windows AMI 中的 Citrix PV 驅動程式會啟用 TCP 卸載。若您發生傳輸層級的錯誤或封包傳輸錯誤 (在 Windows 效能監視器中可見)—例如當您執行特定 SQL 工作負載時—您可能需要停用此功能。

警告

停用 TCP 卸載可能會降低您執行個體的網路效能。

停用 Windows Server 2012 和 2008 的 TCP 卸載

  1. 連線到您的執行個體,並以本機管理員登入。

  2. 若您使用 Windows Server 2012,請按 Ctrl+Esc 存取 Start (開始) 畫面,然後選擇 Control Panel (控制台)。若您使用 Windows Server 2008,請選擇 Start (開始),然後選取 Control Panel (控制台)

  3. 依序選擇 Network and Internet (網路和網際網路)Network and Sharing Center (網路和共用中心)

  4. 選擇 Change adapter settings (變更介面卡設定)

  5. 以滑鼠右鍵按一下 Citrix PV Ethernet Adapter #0 (Citrix PV 乙太網路卡 #0),然後選取 Properties (屬性)

    
                            區域連線屬性
  6. Local Area Connection Properties (區域連線屬性) 對話方塊中,選擇 Configure (設定) 以開啟 Citrix PV Ethernet Adapter #0 Properties (Citrix PV 乙太網路卡 #0 屬性) 對話方塊。

  7. Advanced (進階) 標籤上,停用每個屬性,但 Correct TCP/UDP Checksum Value (修正 TCP/UDP 總和檢查碼值) 除外。若要停用屬性,請從 Property (屬性) 中選取,然後從 Value (值) 選擇 Disabled (停用)

  8. 選擇 OK (確定)。

  9. 從命令列視窗中執行下列命令。

    netsh int ip set global taskoffload=disabled netsh int tcp set global chimney=disabled netsh int tcp set global rss=disabled netsh int tcp set global netdma=disabled
  10. 重新啟動執行個體。

時間同步

在 2013.02.13 Windows AMI 發行前,Citrix Xen 客體代理程式可能會不正確的設定系統時間。此可能導致您的 DHCP 租用到期。若您在連線到您的執行個體時發生問題,您可能需要更新代理程式。

若要判斷您是否已具有更新後的 Citrix Xen 客體代理程式,請檢查 C:\Program Files\Citrix\XenGuestAgent.exe 檔案是否來自 2013 年 3 月。若此檔案的日期在該日期之前,請更新 Citrix Xen 客體代理程式服務。如需詳細資訊,請參閱 升級您的 Citrix Xen 客體代理程式服務

工作負載充分利用超過 20,000 個磁碟 IOPS,以及因 CPU 瓶頸而遭受降級的情況

如果您使用的 Windows 執行個體執行 AWS PV 驅動程式,其充分利用超過 20,000 個 IOPS,並且遇到錯誤檢查碼 0x9E: USER_MODE_HEALTH_MONITOR,則可能會受此問題的影響。

AWS PV 驅動程式中的磁碟讀取和寫入 (IO) 分為兩個階段:IO 準備IO 完成。依預設,準備階段會在單一任意核心上執行。完成階段會在核心 0 上執行。處理 IO 所需的運算量因其大小和其他屬性而有所差異。某些 iOS 在準備階段使用更多運算,其他則在完成階段如此。當執行個體驅動超過 20,000 個 IOPS 時,準備或完成階段可能會導致瓶頸,其執行所在的 CPU 佔用 100% 的容量。準備或完成階段是否成為瓶頸,取決於應用程式所使用的 IO 屬性。

從 AWS PV 驅動程式 8.4.0 開始,準備階段和完成階段的負載可分散至多個核心,以消除瓶頸。每個應用程式使用不同的 IO 屬性。因此,套用下列其中一個組態可能會提升、降低或不會影響應用程式的效能。套用任何這些組態之後,請監控應用程式,以確認其符合您所需的效能。

  1. 先決條件

    開始此疑難排解程序之前,請先確認下列先決條件:

  2. 觀察執行個體上的 CPU 負載

    您可以使用 Windows 任務管理員來檢視每個 CPU 上的負載,以確定磁碟 IO 的潛在瓶頸。

    1. 確認您的應用程式正在執行,並處理與生產工作負載類似的流量。

    2. 使用 SSH 連線至您的執行個體。

    3. 選擇執行個體上的 Start (開始) 功能表。

    4. 請在 Start (開始) 功能表中輸入 Task Manager,以開啟 Task Manager (任務管理員)。

    5. 如果 Task Manager (任務管理員) 顯示 Summary View (摘要檢視),請選擇 More details (更多詳細資訊),以展開詳細檢視。

    6. 選擇 Performance (效能) 索引標籤。

    7. 在左側窗格中選取 CPU

    8. 在主側窗格中的圖形上按一下滑鼠右鍵,然後選取 Change graph to (將圖形變更為) > Logical processors (邏輯處理器),以顯示每個個別核心。

    9. 根據您的執行個體上有多少核心,您可能會看到隨時間顯示 CPU 負載的行,或者可能只會看到一個數字。

      • 如果您看到隨時間顯示負載的圖形,請尋找方塊幾乎完全著色的 CPU。

      • 如果您在每個核心上看到一個數字,請尋找一致顯示 95% 以上的核心。

    10. 請注意核心 0 或不同的核心正在經歷繁重的負載。

  3. 選擇要套用的組態

    組態名稱 套用此組態的時間 備註
    Default configuration 工作負載驅動少於 20,000 個 IOPS,或其他組態並未改善效能或穩定性。

    針對此組態,IO 會發生在幾個核心上,這可能會藉由增加快取區域性並減少內容切換,從較小工作負載獲益。

    Allow driver to choose whether to distribute completion 工作負載驅動超過 20,000 個 IOPS,核心 0 上觀察到中度或高負載。 建議使用 PV 8.4.0 或更新版本的所有 Xen 執行個體使用此組態,並且無論是否遇到問題,都可以充分利用超過 20,000 個 IOPS。
    Distribute both preparation and completion 工作負載驅動超過 20,000 個 IOPS,並且允許驅動程式選擇分發不改善效能,或是 0 之外的核心正在遇到高負載。 此組態會啟用 IO 準備和 IO 完成的分發。
    注意

    未同時分發 IO 完成 (設定DpcRedirection 而不設定NotifierDistributed) 的情況下,我們建議您不要分發 IO 準備,因為當準備階段平行執行時,完成階段會對準備階段過載較為敏感。

    登錄金鑰值

    • NotifierDistributed

      0 或不存在 – 完成階段將在核心 0 上執行。

      1 – 驅動程式選擇執行完成階段或核心 0,或者每個連接磁碟有另一個核心。

      2 – 驅動程式會在每個連接磁碟的另一個核心上執行完成階段。

    • DpcRedirection

      0 或不存在 – 準備階段將會在單一、任意核心上執行。

      1 – 準備階段分發在多個核心之間。

    預設組態

    使用 8.4.0 之前的 AWS PV 驅動程式版本套用預設組態,或者如果在套用本節中的其他組態之一後觀察到效能或穩定性降級。

    1. 使用 SSH 連線至您的執行個體。

    2. 以系統管理員身分開啟新的 PowerShell 命令提示。

    3. 執行下列命令以移除 NotifierDistributedDpcRedirection 登錄金鑰。

      Remove-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Name NotifierDistributed
      Remove-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Name DpcRedirection
    4. 將執行個體重新開機。

    允許驅動程式選擇是否要分配完成

    設定 NotiferDistributed 登錄金鑰,以允許 PV 儲存驅動程式選擇是否要分發 IO 完成。

    1. 使用 SSH 連線至您的執行個體。

    2. 以系統管理員身分開啟新的 PowerShell 命令提示。

    3. 執行下列命令以設定 NotiferDistributed 登錄金鑰。

      Set-ItemProperty -Type DWORD -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Value 0x00000001 -Name NotifierDistributed
    4. 將執行個體重新開機。

    分配準備和完成

    設定 NotifierDistributedDpcRedirection 登錄金鑰,以始終分發發準備和完成階段。

    1. 使用 SSH 連線至您的執行個體。

    2. 以系統管理員身分開啟新的 PowerShell 命令提示。

    3. 執行下列命令以設定 NotifierDistributedDpcRedirection 登錄金鑰。

      Set-ItemProperty -Type DWORD -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Value 0x00000002 -Name NotifierDistributed
      Set-ItemProperty -Type DWORD -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Value 0x00000001 -Name DpcRedirection
    4. 將執行個體重新開機。