Windows 인스턴스의 PV 드라이버 문제 해결

Windows 인스턴스의 PV 드라이버 문제 해결 (Troubleshoot PV drivers on Windows instances)

다음은 오래된 Amazon EC2 이미지와 PV 드라이버에서 겪을 수 있는 문제에 대한 해결 방법이에요.

출처: 문서

본문

Windows Server 2012 R2가 인스턴스 재부팅 후 네트워크와 스토리지 연결을 잃음

중요 이 문제는 2014년 9월 이전에 제공된 AMI에서만 발생해요.

2014년 9월 10일 이전에 제공된 Windows Server 2012 R2 Amazon Machine Image(AMI)는 인스턴스 재부팅 후 네트워크와 스토리지 연결을 잃을 수 있어요. AWS Management Console 시스템 로그의 오류는 "Difficulty detecting PV driver details for Console Output."라고 표시돼요. 연결 손실은 Plug and Play Cleanup 기능 때문에 발생해요. 이 기능은 30일마다 비활성 시스템 장치를 검사해 비활성화해요. 이 기능은 EC2 네트워크 장치를 비활성으로 잘못 식별해서 시스템에서 제거해요. 이로 인해 재부팅 후 인스턴스가 네트워크 연결을 잃게 돼요.

이 문제의 영향을 받을 수 있다고 의심되는 시스템은 제자리 드라이버 업그레이드(in-place driver upgrade)를 다운로드해 실행할 수 있어요. 제자리 드라이버 업그레이드를 수행할 수 없다면 도우미 스크립트(helper script)를 실행할 수 있어요. 스크립트는 인스턴스가 영향을 받는지 판단해요. 영향을 받고 Amazon EC2 네트워크 장치가 아직 제거되지 않았다면, 스크립트가 Plug and Play Cleanup 검사를 비활성화해요. 네트워크 장치가 제거되었다면, 스크립트가 장치를 복구하고 Plug and Play Cleanup 검사를 비활성화하며 네트워크 연결이 활성화된 상태로 인스턴스가 재부팅될 수 있게 해줘요.

문제 해결 방법 선택 (Choose how to fix problems)

이 문제의 영향을 받는 인스턴스의 네트워크와 스토리지 연결을 복원하는 방법은 두 가지예요. 다음 방법 중 하나를 선택해요.

Method Prerequisites Procedure Overview
Method 1 - Enhanced networking Enhanced networking is only available in a virtual private cloud (VPC) which requires a C3 instance type. If the server does not currently use the C3 instance type, then you must temporarily change it. You change the server instance type to a C3 instance. Enhanced networking then enables you to connect to the affected instance and fix the problem. After you fix the problem, you change the instance back to the original instance type. This method is typically faster than Method 2 and less likely to result in user error. You will incur additional charges as long as the C3 instance is running.
Method 2 - Registry configuration Ability to create or access a second server. Ability to change Registry settings. You detach the root volume from the affected instance, attach it to a different instance, connect, and make changes in the Registry. You will incur additional charges as long as the additional server is running. This method is slower than Method 1, but this method has worked in situations where Method 1 failed to resolve the problem.

방법 1 - 향상된 네트워킹 (Method 1 - Enhanced networking)

  1. Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)을 엽니다.
  2. 탐색 창에서 Instances를 선택해요.
  3. 영향을 받는 인스턴스를 찾아요. 인스턴스를 선택하고 Instance state를 선택한 다음 Stop instance를 선택해요. 경고 인스턴스를 중지하면 인스턴스 스토어 볼륨의 데이터가 손실돼요. 이 데이터를 보존하려면 영구 스토리지에 백업하세요.
  4. 인스턴스가 중지된 후 백업을 만들어요. 인스턴스를 선택하고 Actions, Image and templates, Create image를 선택해요.
  5. 인스턴스 유형을 C3 인스턴스 유형으로 변경해요.
  6. 인스턴스를 시작해요.
  7. Remote Desktop으로 인스턴스에 연결한 다음 AWS PV Drivers Upgrade 패키지를 인스턴스로 다운로드해요.
  8. 폴더의 내용을 추출하고 AWSPVDriverSetup.msi를 실행해요. MSI를 실행하면 인스턴스가 자동으로 재부팅되고 드라이버를 업그레이드해요. 인스턴스는 최대 15분 동안 사용할 수 없어요.
  9. 업그레이드가 완료되고 인스턴스가 Amazon EC2 콘솔의 두 상태 검사를 모두 통과하면 Remote Desktop으로 인스턴스에 연결해 새 드라이버가 설치되었는지 확인해요. Device Manager의 Storage Controllers 아래에서 AWS PV Storage Host Adapter를 찾아요. 드라이버 버전이 Driver Version History 표에 나열된 최신 버전과 같은지 확인해요. 자세한 내용은 AWS PV 드라이버 패키지 이력을 참고하세요.
  10. 인스턴스를 중지하고 인스턴스 유형을 원래 유형으로 되돌려요.
  11. 인스턴스를 시작하고 정상적으로 사용을 재개해요.

방법 2 - 레지스트리 구성 (Method 2 - Registry configuration)

  1. Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)을 엽니다.
  2. 탐색 창에서 Instances를 선택해요.
  3. 영향을 받는 인스턴스를 찾아요. 인스턴스를 선택하고 Instance state, Stop instance를 선택해요. 경고 인스턴스를 중지하면 인스턴스 스토어 볼륨의 데이터가 손실돼요. 이 데이터를 보존하려면 영구 스토리지에 백업하세요.
  4. Launch instances를 선택하고 영향을 받는 인스턴스와 같은 가용 영역에 임시 Windows Server 2008 또는 Windows Server 2012 인스턴스를 만들어요. Windows Server 2012 R2 인스턴스는 만들지 마세요. 중요 영향을 받는 인스턴스와 같은 가용 영역에 인스턴스를 만들지 않으면 영향을 받는 인스턴스의 루트 볼륨을 새 인스턴스에 연결할 수 없어요.
  5. 탐색 창에서 Volumes를 선택해요.
  6. 영향을 받는 인스턴스의 루트 볼륨을 찾아요. 볼륨을 분리한 다음 이전에 만든 임시 인스턴스에 연결해요. 기본 장치 이름(xvdf)으로 연결해요.
  7. Remote Desktop으로 임시 인스턴스에 연결한 다음 Disk Management 유틸리티로 볼륨을 사용할 수 있게 만들어요.
  8. 임시 인스턴스에서 실행(Run) 대화 상자를 열고 regedit를 입력한 다음 Enter 키를 눌러요.
  9. 레지스트리 편집기 탐색 창에서 HKEY_Local_Machine을 선택한 다음 File 메뉴에서 Load Hive를 선택해요.
  10. Load 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
  1. 각 키에 대해 UpperFilters를 열고 XENFILT 값을 입력한 다음 OK를 선택해요.
  2. 다음 키를 찾아요.
HKEY_LOCAL_MACHINE\<your_temporary_key_name>\ControlSet001\Services\XENBUS\Parameters
  1. 이름이 ActiveDevice이고 값이 PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01인 새 문자열(REG_SZ)을 만들어요.
  2. 다음 키를 찾아요.
HKEY_LOCAL_MACHINE\<your_temporary_key_name>\ControlSet001\Services\XENBUS
  1. Count를 0에서 1로 변경해요.
  2. 다음 키를 찾아 삭제해요.
HKEY_LOCAL_MACHINE\<your_temporary_key_name>\ControlSet001\Services\xenvbd\StartOverride
HKEY_LOCAL_MACHINE\<your_temporary_key_name>\ControlSet001\Services\xenfilt\StartOverride
  1. 레지스트리 편집기 탐색 창에서 레지스트리 편집기를 처음 열었을 때 만든 임시 키를 선택해요.
  2. File 메뉴에서 Unload Hive를 선택해요.
  3. Disk Management 유틸리티에서 이전에 연결한 드라이브를 선택하고 상황에 맞는(오른쪽 클릭) 메뉴를 열어 Offline을 선택해요.
  4. Amazon EC2 콘솔에서 임시 인스턴스에서 영향을 받는 볼륨을 분리하고 장치 이름 /dev/sda1로 Windows Server 2012 R2 인스턴스에 다시 연결해요. 볼륨을 루트 볼륨으로 지정하려면 이 장치 이름을 지정해야 해요.
  5. 인스턴스를 시작해요.
  6. Remote Desktop으로 인스턴스에 연결한 다음 AWS PV Drivers Upgrade 패키지를 인스턴스로 다운로드해요.
  7. 폴더의 내용을 추출하고 AWSPVDriverSetup.msi를 실행해요. MSI를 실행하면 인스턴스가 자동으로 재부팅되고 드라이버를 업그레이드해요. 인스턴스는 최대 15분 동안 사용할 수 없어요.
  8. 업그레이드가 완료되고 인스턴스가 두 상태 검사를 통과하면 Remote Desktop으로 연결해 새 드라이버가 설치되었는지 확인해요. Device Manager의 Storage Controllers 아래에서 AWS PV Storage Host Adapter를 찾아요. 드라이버 버전이 최신 버전과 같은지 확인해요.
  9. 이 절차에서 만든 임시 인스턴스를 삭제하거나 중지해요.

복구 스크립트 실행 (Run the remediation script)

제자리 드라이버 업그레이드나 새 인스턴스로의 마이그레이션을 수행할 수 없다면 복구 스크립트(remediation script)를 실행해 Plug and Play Cleanup 작업으로 인한 문제를 해결할 수 있어요.

복구 스크립트 실행하기

  1. Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)을 엽니다.
  2. 탐색 창에서 Instances를 선택해요.
  3. 복구 스크립트를 실행하려는 인스턴스를 선택해요. Instance state, Stop instance를 선택해요. 경고 인스턴스를 중지하면 인스턴스 스토어 볼륨의 데이터가 손실돼요. 이 데이터를 보존하려면 영구 스토리지에 백업하세요.
  4. 인스턴스가 중지된 후 백업을 만들어요. 인스턴스를 선택하고 Actions, Image and templates, Create image를 선택해요.
  5. Instance state, Start instance를 선택해요.
  6. Remote Desktop으로 인스턴스에 연결한 다음 RemediateDriverIssue.zip 폴더를 인스턴스로 다운로드해요.
  7. 폴더의 내용을 추출해요.
  8. Readme.txt 파일의 지침에 따라 복구 스크립트를 실행해요. 파일은 RemediateDriverIssue.zip을 추출한 폴더에 있어요.

TCP 오프로딩 (TCP offloading)

중요 이 문제는 AWS PV 또는 Intel 네트워크 드라이버를 실행하는 인스턴스에는 적용되지 않아요.

기본적으로 Windows AMI의 Citrix PV 드라이버에 대해 TCP 오프로딩이 활성화되어 있어요. 특정 SQL 워크로드를 실행할 때처럼 전송 수준 오류나 패킷 전송 오류(Windows Performance Monitor에서 볼 수 있음)가 발생하면 이 기능을 비활성화해야 할 수 있어요.

경고 TCP 오프로딩을 비활성화하면 인스턴스의 네트워크 성능이 저하될 수 있어요.

Windows Server 2012 및 2008의 TCP 오프로딩 비활성화하기

  1. 인스턴스에 연결하고 로컬 관리자로 로그인해요.
  2. Windows Server 2012를 사용한다면 Ctrl+Esc를 눌러 시작 화면에 접근한 다음 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의 상황에 맞는(오른쪽 클릭) 메뉴를 열고 Properties를 선택해요.
  6. Local Area Connection Properties 대화 상자에서 Configure를 선택해 Citrix PV Ethernet Adapter #0 Properties 대화 상자를 열어요.
  7. Advanced 탭에서 Correct TCP/UDP Checksum Value를 제외한 각 속성을 비활성화해요. 속성을 비활성화하려면 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
  1. 인스턴스를 재부팅해요.

시간 동기화 (Time synchronization)

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 병목으로 인해 성능 저하를 겪음

AWS PV 드라이버를 실행하고 20,000 IOPS 이상을 사용하는 Windows 인스턴스를 사용 중이고, 버그 검사 코드 0x9E: USER_MODE_HEALTH_MONITOR가 발생한다면 이 문제의 영향을 받을 수 있어요.

AWS PV 드라이버의 디스크 읽기와 쓰기(IO)는 두 단계로 발생해요: IO 준비(preparation)와 IO 완료(completion). 기본적으로 준비 단계는 단일 임의 코어에서 실행되고 완료 단계는 코어 0에서 실행돼요. IO를 처리하는 데 필요한 계산량은 크기와 기타 속성에 따라 달라져요. 일부 IO는 준비 단계에서 더 많은 계산을 사용하고, 다른 IO는 완료 단계에서 더 많이 사용해요. 인스턴스가 20,000 IOPS 이상을 구동하면 준비 또는 완료 단계가 병목이 될 수 있어요. 실행되는 CPU가 100% 용량일 때죠. 준비 단계가 병목이 되는지 완료 단계가 병목이 되는지는 애플리케이션이 사용하는 IO의 속성에 따라 달라져요.

AWS PV 드라이버 8.4.0부터 준비 단계와 완료 단계의 부하를 여러 코어에 분산해 병목을 없앨 수 있어요. 각 애플리케이션은 서로 다른 IO 속성을 사용해요. 따라서 다음 구성 중 하나를 적용하면 애플리케이션 성능이 올라가거나, 내려가거나, 영향을 받지 않을 수 있어요. 이 구성 중 하나를 적용한 후 애플리케이션을 모니터링해 원하는 성능에 도달하는지 확인해요.

  1. 사전 요구 사항 이 문제 해결 절차를 시작하기 전에 다음 사전 요구 사항을 확인해요.
    • 인스턴스가 AWS PV 드라이버 버전 8.4.0 이상을 사용해요. 업그레이드하려면 EC2 Windows 인스턴스에서 PV 드라이버 업그레이드를 참고하세요.
    • 인스턴스에 RDP 접근 권한이 있어요. RDP로 Windows 인스턴스에 연결하는 단계는 RDP 클라이언트로 Windows 인스턴스에 연결하기를 참고하세요.
    • 인스턴스에 관리자 접근 권한이 있어요.
  2. 인스턴스의 CPU 부하 관찰 Windows Task Manager를 사용해 각 CPU의 부하를 보고 디스크 IO의 잠재적 병목을 확인할 수 있어요. 애플리케이션이 실행되고 프로덕션 워크로드와 비슷한 트래픽을 처리하는지 확인해요. RDP로 인스턴스에 연결해요. 인스턴스에서 시작 메뉴를 선택해요. 작업 관리자를 열기 위해 시작 메뉴에 Task Manager를 입력해요. Task Manager가 요약 보기를 표시하면 More details를 선택해 상세 보기로 펼쳐요. Performance 탭을 선택해요. 왼쪽 창에서 CPU를 선택해요. 메인 창의 그래프에 대한 상황에 맞는(오른쪽 클릭) 메뉴를 열고 Change graph to > Logical processors를 선택해 각 개별 코어를 표시해요. 인스턴스의 코어 수에 따라 시간 경과에 따른 CPU 부하를 표시하는 선이 보이거나 숫자만 보일 수 있어요. 시간 경과에 따른 부하 그래프가 보이면 상자가 거의 완전히 음영 처리된 CPU를 찾아요. 각 코어에 숫자가 보이면 일관되게 95% 이상을 표시하는 코어를 찾아요. 코어 0인지 다른 코어인지, 어떤 코어가 높은 부하를 겪고 있는지 기록해요.
  3. 적용할 구성 선택
    • Default configuration – 워크로드가 20,000 IOPS 미만을 구동하거나, 다른 구성이 성능이나 안정성을 개선하지 못한 경우 적용. 이 구성에서 IO는 몇 개의 코어에서 발생하며, 캐시 지역성을 높이고 컨텍스트 전환을 줄여 소규모 워크로드에 유리할 수 있어요.
    • Allow driver to choose whether to distribute completion – 워크로드가 20,000 IOPS 이상을 구동하고 코어 0에 중간 또는 높은 부하가 관찰된 경우 적용. 이 구성은 문제가 발생하는지와 상관없이 PV 8.4.0 이상을 사용하고 20,000 IOPS 이상을 활용하는 모든 Xen 인스턴스에 권장돼요.
    • Distribute both preparation and completion – 워크로드가 20,000 IOPS 이상을 구동하고, 드라이버가 분산을 선택하게 한 것이 성능을 개선하지 못했거나 코어 0이 아닌 코어가 높은 부하를 겪는 경우 적용. 이 구성은 IO 준비와 IO 완료의 분산을 모두 활성화해요. 참고 준비 단계를 완료 단계와 함께 분산하지 않는 것(DpcRedirection을 설정하고 NotifierDistributed를 설정하지 않는 것)을 권장하지 않아요. 완료 단계가 병렬로 실행되는 준비 단계에 의해 과부하되기 쉬우니까요.
    • 레지스트리 키 값:
      • NotifierDistributed – 값 0 또는 없음: 완료 단계가 코어 0에서 실행돼요. 값 1: 드라이버가 코어 0 또는 연결된 디스크당 추가 코어 하나에서 완료 단계를 실행하도록 선택해요. 값 2: 드라이버가 연결된 디스크당 추가 코어 하나에서 완료 단계를 실행해요.
      • DpcRedirection – 값 0 또는 없음: 준비 단계가 단일 임의 코어에서 실행돼요. 값 1: 준비 단계가 여러 코어에 분산돼요.
  4. Default configuration(기본 구성) AWS PV 드라이버 버전 8.4.0 이전에 기본 구성을 적용하거나, 이 섹션의 다른 구성 중 하나를 적용한 후 성능이나 안정성 저하가 관찰되면 기본 구성을 적용해요. RDP로 인스턴스에 연결해요. 관리자 권한으로 새 PowerShell 명령 프롬프트를 열어요. 다음 명령을 실행해 NotifierDistributed와 DpcRedirection 레지스트리 키를 제거해요.
Remove-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Name NotifierDistributed
Remove-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Name DpcRedirection

인스턴스를 재부팅해요. 5. Choose to let the driver distribute completion RDP로 인스턴스에 연결해요. 관리자 권한으로 새 PowerShell 명령 프롬프트를 열어요. 다음 명령을 실행해 NotifierDistributed 레지스트리 키를 설정해요.

Set-ItemProperty -Type DWORD -Path HKLM:\System\CurrentControlSet\Services\xenvbd\Parameters -Value 0x00000001 -Name NotifierDistributed

인스턴스를 재부팅해요. 6. Distribute both preparation and completion RDP로 인스턴스에 연결해요. 관리자 권한으로 새 PowerShell 명령 프롬프트를 열어요. 다음 명령을 실행해 NotifierDistributed와 DpcRedirection 레지스트리 키를 설정해요.

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

인스턴스를 재부팅해요.

더 알아보기 (Learn more)