Loading . . .
#2 Disable NIC Power Save Mode mit Powershell

#2 Disable NIC Power Save Mode mit Powershell

Weiter geht es mit dem zweiten Teil meiner Powershell-Reihe:
Diesmal möchte ich den Power Save Mode der Netzwerkkarten abschalten, damit diese Funktion nicht “plötzlich” zum Verhängnis wird. In Verbindung mit dem “Balanced”-Powerplan kann Windows der Meinung sein, dass die Netzwerkkarte bei Inaktivität in den “Sleep”-Mode versetzt wird. Somit verliert der SQL Server plötzlich seine (inaktiven) Connections, zahlreiche Applikationen werden diese Trennungen nicht mögen. Noch viel schlimmer in einem Cluster oder mit AlwaysOn Availability-Groups, plötzlich ist der Heartbeat weg und das Cluster schwenkt.

Widersprüchliches in High Performance

Auch wenn man meinen würde, dass dieser Power Save Mode der Netzwerkkarte abgeschaltet wird, wenn man den Powerplan auf “High Performance” setzt. Nein, laut Aussage eines Microsoft PFE Team-Members (Oktober 2016) hilft auch dies nicht:

• If the server is set to High Performance – Windows places the system in the highest performance state and disables the dynamic scaling of performance in response to varying workload levels. Therefore, special care should be taken before setting the power plan to High Performance as this can increase power consumption unnecessarily when the system is underutilized.
• We will have to disable “Allow the computer to turn off this device to save power” option of Power management from NIC. Setting the server in High Performance would not stop the NIC to go in sleep mode whenever there is no activity, as that is a setting at an OS level. The setting on NIC will take preference in this situation.

Somit hilft nur das Abschalten dieses Power Save Modes an allen Netzwerkkarten!

Disable NIC Power Save Mode

Diese Powershell-Lösung habe ich mir nicht selber ausgedacht, mit dieser hatte ich die wenigsten Probleme, sie funktionierte auf zahlreichen Maschinen.
Die Lösung von Ingmar Verheij habe ich angepasst von WiFi auf LAN-Adapter gemäß iana.org, lässt sich sicherlich auch auf andere Adapter anpassen.

Was macht das Powershell Snippet?

Das Skript sucht sich alle installierten Netzwerkkarten und überprüft, ob diese vom Typ “6” (ethernetCsmacd(6), for all ethernet-like interfaces, regardless of speed, as per RFC3635) sind. Wurde eine entsprechende Ethernet-Netzwerkkarte gefunden wird für diese in der Registry der Wert entsprechend geändert, so dass die Netzwerkkarte nicht mehr in den Power Save Mode wechseln kann.

$intNICid=0; do {
     #Read network adapter properties
     $objNICproperties = (Get-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Control\Class\{0}\{1}" -f "{4D36E972-E325-11CE-BFC1-08002BE10318}", ( "{0:D4}" -f $intNICid)) -ErrorAction SilentlyContinue)
 
     #Determine if the Network adapter index exists 
     If ($objNICproperties) {
          #Filter network adapters
          # * only Ethernet adapters (ifType = ieee80211(6) - http://www.iana.org/assignments/ianaiftype-mib/ianaiftype-mib)
          # * root devices are exclude (for instance "WAN Miniport*")
          # * software defined network adapters are excluded (for instance "RAS Async Adapter")
          If (($objNICproperties."*ifType" -eq 6) -and ($objNICproperties.DeviceInstanceID -notlike "ROOT\*") -and ($objNICproperties.DeviceInstanceID -notlike "SW\*")) {
               #Read hardware properties
               $objHardwareProperties = (Get-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Enum\{0}" -f $objNICproperties.DeviceInstanceID) -ErrorAction SilentlyContinue)
               If ($objHardwareProperties.FriendlyName) {
                    $strNICDisplayName = $objHardwareProperties.FriendlyName
               } else { 
                    $strNICDisplayName = $objNICproperties.DriverDesc
               }
               #Read Network properties
               $objNetworkProperties = (Get-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Control\Network\{0}\{1}\Connection" -f "{4D36E972-E325-11CE-BFC1-08002BE10318}", $objNICproperties.NetCfgInstanceId) -ErrorAction SilentlyContinue)

               #Inform user
               Write-Host -NoNewline -ForegroundColor White " ID : "; Write-Host -ForegroundColor Yellow ( "{0:D4}" -f $intNICid)
               Write-Host -NoNewline -ForegroundColor White " Network: "; Write-Host $objNetworkProperties.Name
               Write-Host -NoNewline -ForegroundColor White " NIC : "; Write-Host $strNICDisplayName
               Write-Host -ForegroundColor White " Actions:"

               #Disable power saving
               Set-ItemProperty -Path ("HKLM:\SYSTEM\CurrentControlSet\Control\Class\{0}\{1}" -f "{4D36E972-E325-11CE-BFC1-08002BE10318}", ( "{0:D4}" -f $intNICid)) -Name "PnPCapabilities" -Value "24" -Type DWord
                Write-Host -ForegroundColor Green (" - Power saving disabled")
                Write-Host ""
           }
      } 
      #Next NIC ID
      $intNICid+=1
} while ($intNICid -lt 255)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Powerplans - Powershell meets SQL Server Previous post #1 Powerplan – SQL Server konfigurieren mit Powershell
TSQLTuesday - Blogpost Next post Installing old SQL Server Versions – T-SQL Tuesday #83

SQL aus Hamburg

Das bin ich ;-)

Björn Peters - MVP - Data Platform

Ich habe das erste Mal mit MS SQL Datenbanken im Jahr 2000 zu tun gehabt und diese Datenbank-Systeme rund 7 Jahre vollumfänglich betreut. Von 2007 bis 2019 war ich als Datenbank-Administrator angestellt und betreute eine Vielzahl von unterschiedlichen SQL-Servern von mittelständischen Firmen und Großkonzernen aus unterschiedlichen Branchen.
Ich verfüge zwar über einige Zertifikate, beziehe meine Erkenntnisse und mein Wissen rund um den SQL Server rein aus dem Tagesgeschäft, dem Lesen/Verfolgen von zahlreichen Foren/Blogs.
Ich habe mich auch nicht wirklich auf ein Fachgebiet spezialisiert, lege meinen Schwerpunkt aber dann doch auf die Performance-Analyse.
Seit Ende 2016 bin ich Organisator des Azure Meetup Hamburg und vom April 2017 bis Juni 2018 Cloud- und Datacenter Management MVP und seit Juli 2018 Data-Platform MVP.