NVMe AER Corrected Error und PCie Bus Error


Recommended Posts

Hallo,

 

mein Unraid Server Protokoll gibt mir folgenden Fehler aus.

 

Quote

Mar 14 19:25:16 unraid kernel: pcieport 0000:00:1b.4: AER: Corrected error received: 0000:02:00.0
Mar 14 19:25:16 unraid kernel: nvme 0000:02:00.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
Mar 14 19:25:16 unraid kernel: nvme 0000:02:00.0: device [15b7:5006] error status/mask=00000001/0000e000

 

Scheint also irgendwie an meiner NVME zu liegen.

Ich verwende nur eine als Cache, und das ist eine WD Black 750 nvme 1TB

 

Die zweite nutze ich als Unassigned Devices für andere Sachen. 

 

Wie kann man diesen Fehler beheben? 

Link to comment

Manche NVMe haben Bugs und kommen mit ihren eigenen propagierten Schlafzuständen nicht 100%-tig klar. Es kommt dann zu Übertragungsfehlern, die aber durch wiederholtes Senden der Daten oder durch den mitgelieferten ECC (Error Correction Code) behoben wird. Das ist also "nur" eine Warnung. Allerdings können diese die kompletten Logs fluten und die Fehlerkorrektur kann je nach Häufigkeit auch zu spürbaren Latenzen führen.

 

Du hast nun folgende Optionen:

- BIOS aktualisieren 

- NVMe Firmware-Update aufspielen (muss dazu meistens in einen Windows PC und selten gibt es Updates)

- die Kernel Option "nvme_core.default_ps_max_latency_us=XXX" so setzen, dass die höchsten Schlafzustände der NVMe deaktiviert werden

- die Kernel Option "pcie_aspm=off" setzen, wodurch alle Energiesparfunktionen aller PCIe Verbindungen deaktiviert werden

- die Kernel Option "pci=noaer" setzen, wodurch die Fehlermeldungen unterdrückt werden

 

ASPM PS4 deaktivieren 

 

Das oben genannte "XXX" ist ein individueller Schwellwert, der je nach NVMe unterschiedlich sein kann. 

 

Welche Schlafzustände/Schwellwerte eine NVMe besitzt, kann man mit diesem Befehl herausfinden:

smartctl -a /dev/nvme0

 

Hier zB von meiner NVMe (die Samsung EVO Plus hat diese Probleme übrigens nicht):

Model Number:                       Samsung SSD 970 EVO Plus 2TB
...
Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     7.50W       -        -    0  0  0  0        0       0
 1 +     5.90W       -        -    1  1  1  1        0       0
 2 +     3.60W       -        -    2  2  2  2        0       0
 3 -   0.0700W       -        -    3  3  3  3      210    1200
 4 -   0.0050W       -        -    4  4  4  4     2000    8000

 

Da sieht man zB, dass der höchste Schlafzustand "4", der "PS4" genannt wird, einen ENT_LAT von 2000 und einen EXT_LAT von 8000 besitzt.

 

Im Linux Kernel steht nun folgende Erklärung (von mir übersetzt):

Quote

Der nächste Schlafzustand greift, sobald 50 * (ENT_LAT + EXT_LAT) Mikrosekunden erreicht werden, vorausgesetzt EXT_LAT ist kleiner ist als die maximale Latenz, die ein User mit ps_max_latency_us beeinflussen kann.

 

Entsprechend:

50 (2000 + 8000) = 500000 Mikrosekunden = 0.5 Sekunden

 

Der Wechsel zwischen den Schlafzuständen erfolgt also ziemlich schnell.

 

Jedenfalls könnte ich nun bei meiner NVMe PS4 deaktivieren, in dem ich eine maximale Latenz einstelle, die größer gleich 1200 ist (EXT_LAT von PS3) und kleiner als 8000 (EXT_LAT von PS4). Also zb:

 

nvme_core.default_ps_max_latency_us=6000

 

 

ASPM der NVMe vollständig deaktivieren

 

Alternativ erlaubt der Linux Kernel auch das Deaktivieren von ASPM, in dem der Wert auf 0 gesetzt wird:

 

Screenshot_20230120_154052.png.ad4df1544a9dfe772ea90df9dab5dd5a.png

 

Also entsprechend so:

 

nvme_core.default_ps_max_latency_us=0

 

 

Weiterführende Informationen

 

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/nvme/host/core.c?h=v5.9-rc7

  • Like 1
Link to comment
  • mgutt changed the title to NVMe AER Corrected Error und PCie Bus Error

Vielen dank für die Erläuterung.

Ich glaube am einfachsten wäre es wohl wenn ich einfach meine Force MP600 die ich als Unassigned Devices nutze zum Cache mache.

Mein Schwager hat exakt den selben Server wie ich, nur mit der MP600 als Cache und er hat keine error.

 

Kann ich dann einfach diese als Cache 2 machen und die Daten verschieben? Oder wie löse ich das am einfachsten ohne Probleme zu bekommen?

Link to comment
1 hour ago, speedycxd said:

Vielen dank für die Erläuterung.

Sollte dieser Eintrag in der syslinux.conf nicht auch helfen:

pci=noaer


Ich brauch das bei meinem „neuen“ Motherboard mit meinen DigitalDevices TV Karten da sie sonst nicht richtig funktionieren, siehe dieser Thread:

 

Link to comment
4 minutes ago, mgutt said:

Du nimmst damit also denke ich in Kauf, dass du richtige Fehler niemals siehst.

Ich sehe das nicht wirklich als Problem da man auch bedenken muss das manche Motherboards AER von Werk aus nicht aktiviert haben bzw. sich das auf manchen Motherboards nicht mal aktivieren lässt und das dann eigentlich nichts anderes ist als wenn du AER ausschaltest.

Soweit ich weiß werden alle Fehler die produziert werden nochmal übermittelt so das du dann eigentlich keinen Fehler hast da dieser erfolgreich erkannt wird.

 

Manche Geräte haben auch Probleme wenn dieses Feature an geschaltet ist wie zB meine DVB Karten.

Link to comment
1 minute ago, mgutt said:

Vielleicht kannst du ähnliches umsetzen?

Mein Problemnist wenn ich AER an schalte dann funktionieren eben die Karten nicht richtig, das ist eher ein Hardware kompatibilitätsproblem.

auf meinem alten Board funktionierte es ohne Probleme und auf meinem Z690 funktionieren die Karten auch ohne Probleme nur auf meinem Z490 hab ich Probleme damit.

Link to comment
4 hours ago, ich777 said:

Sollte dieser Eintrag in der syslinux.conf nicht auch helfen:

pci=noaer


Ich brauch das bei meinem „neuen“ Motherboard mit meinen DigitalDevices TV Karten da sie sonst nicht richtig funktionieren, siehe dieser Thread:

 

 

Danke, habe es jetzt mal so gemacht und der error ist weg.

Ich werde aber wohl doch lieber demnächst mal die Cache nvme tauschen.

Link to comment
22 hours ago, mgutt said:

Hier noch eine Tabelle, die von der Kingston A2000 zu sein scheint:

https://wiki.archlinux.org/title/Solid_state_drive/NVMe#Controller_failure_due_to_broken_APST_support

 

Da ist der Schwellwert für PS4 "15000", daher würde jeder Wert zwischen "2000" und "15000" den PS4 deaktivieren.

 

Ich habe eine Crucial P5 2TB (CT2000P5SSD8) verbaut und habe derzeit 5500 als Schwellwert angegeben.

 

Hier die Ausgabe von smartctl -a /dev/nvme0

Quote

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     8.25W       -        -    0  0  0  0        0       0
 1 +     3.00W       -        -    1  1  1  1        0       0
 2 +     1.90W       -        -    2  2  2  2        0       0
 3 -   0.0800W       -        -    3  3  3  3    10000    2500
 4 -   0.0050W       -        -    4  4  4  4    12000   35000

 

Verstehe ich das richtig, dass ich mit 5500 auch den State 3 nicht erreiche?

Wäre in meinem Fall nicht ein Wert zwischen 12000 und 35000 besser?

 

Was mich ein wenig irritiert ist, dass der zweite Schwellwert von State 3 geringer ist als der erste von State 4.

Link to comment
47 minutes ago, Anym001 said:

Verstehe ich das richtig, dass ich mit 5500 auch den State 3 nicht erreiche?

Ich habe noch mal etwas recherchiert. Tatsächlich ist der ex_lat der relevante Wert:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/nvme/host/core.c?h=v5.9-rc7

Quote

we will enter the next lower-powern on-operational state after waiting 50 * (enlat + exlat) microseconds, as long as that state's exit latency is under the requested maximum latency.

 

Ich passe meinen Text oben noch mal an.

  • Thanks 1
Link to comment
  • 10 months later...

Leider habe ich mit meinen beiden WD Red SN700 NVMe SSD 4TB M.2 PCIe Gen3 mit dem C246M-WU4 (rev. 1.1) auch das "Problem" das mein Log mit diesen AER Meldungen überflutet wird. Bei mir wird folgendes bei beiden NVMEs mit

smartctl -a /dev/nvme0 oder
smartctl -a /dev/nvme1

angezeigt:

 

Supported Power States
St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
 0 +     6.00W       -        -    0  0  0  0        0       0
 1 +     3.50W       -        -    1  1  1  1        0       0
 2 +     3.00W       -        -    2  2  2  2        0       0
 3 -   0.1000W       -        -    3  3  3  3     4000   12000
 4 -   0.0035W       -        -    4  4  4  4     4000   45000

 

Jetzt meine Frage wenn ich nvme_core.default_ps_max_latency_us=XXX angegebe welchen Wert würdet Ihr nehmen 6000 ? und gebe ich den Befehl so an wie auf dem Screenshot ersichtlich ?

Bildschirm­foto 2023-01-24 um 19.17.08.png

Edited by toegelr
Link to comment

Danke für Deine Antworten, ich hatte Heute in der Früh den Wert 6000 eingestellt und über 20 Stunden keinen AER Eintrag in meinem Log.

Ich kann das jetzt aber nicht deuten ist es gut das bei einem Wert von 6000 kein Eintrag mehr kommt oder logisch, soll ich das so lassen oder kann ich mein System sparsamer machen mit einem anderen Wert ?

Ich kann nat. zum Test jetzt einmal 15000 eingeben und Neustarten ...

Link to comment
27 minutes ago, toegelr said:

kann ich mein System sparsamer machen mit einem anderen Wert ?

Das wirst du uns nur sagen können (Messen). Viel wird es aber vermutlich nicht ausmachen. Übrigens ist es nicht ungewöhnlich, dass zwischen zwei Neustarts die Fehler mal mehr und mal weniger auftauchen. Keine Ahnung warum, aber hatte ich auch. Es ist also leider kein 100%-tiges Indiz, dass es jetzt stabil bleibt. Lass es vielleicht einfach so und beobachte es länger.

Link to comment

Ich habe die Werte 15000 sowie 6000 jetzt längere Zeit getestet mit 6000 kommt kein AER Fehler mehr mit 15000 sporadisch in 24H 2 - 3 AER Meldungen.

Beim Stromvverbrauch ist der Verbrauch mit 6000 geringfügig höher als mit 15000 was ich so beobachtet habe.

Sollte ich noch andere Werte testen z.B. 5500 ? Bzw. was sagen diese Werte aus ?

Danke für Deine Hilfe.

Edited by toegelr
Link to comment
On 2/3/2023 at 12:24 AM, toegelr said:

Gesagt hat mir das niemand, ich habe (falsch) gedacht. 1 Stk. von meinen beiden könnte ich noch zurück geben …


Gesendet von iPhone mit Tapatalk Pro

 

Hab zwei SN700 (500GB & 1TB) auf einem Gigabyte C246M-WU4 und hatte die gleichen Probleme.

Hab es mit dem Boot-Parameter / Syslinux configuration "nvme_core.default_ps_max_latency_us=8000" in den Griff bekommen.

Edited by h0schi
  • Like 1
Link to comment

Danke für die Nachricht! Ich hatte 2 Stk. 4TB, ein Stück habe ich zurück geben können. Jetzt habe ich 1 Stk. WD SN700 red und ein Stk. Corsair Force Series MP 510 im Einsatz und experimentiere noch. Den Wert 8000 werde ich noch testen.
Danke.


Gesendet von iPhone mit Tapatalk Pro

  • Like 1
Link to comment
  • 1 month later...
On 2/9/2023 at 12:56 AM, toegelr said:

Danke für die Nachricht! Ich hatte 2 Stk. 4TB, ein Stück habe ich zurück geben können. Jetzt habe ich 1 Stk. WD SN700 red und ein Stk. Corsair Force Series MP 510 im Einsatz und experimentiere noch. Den Wert 8000 werde ich noch testen.
Danke.


Gesendet von iPhone mit Tapatalk Pro

Was hat dein Test ergeben?

Hab ebenfalls 2 WD RED SN700. Einmal Board und einmal PCIe Karte.

 

Gigabyte Technology Co., Ltd. C246M-WU4-CF , Version Default string
American Megatrends Inc., Version F5
BIOS Datum: Di 09 Nov 2021 12:00:00 AM CET

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.