• ComputerBase erhält eine Provision für Käufe über eBay-Links.

neuronale Filter Photoshop bringen PC/Grafik zum absturz.

birdskywinter

Lt. Commander
Registriert
Juni 2019
Beiträge
1.319
[Bitte fülle den folgenden Fragebogen unbedingt vollständig aus, damit andere Nutzer dir effizient helfen können. Danke! :)]

1. Nenne uns bitte deine aktuelle Hardware:
(Bitte tatsächlich hier auflisten und nicht auf Signatur verweisen, da diese von einigen nicht gesehen wird und Hardware sich ändert)
  • Prozessor (CPU): … I5 3570k
  • Arbeitsspeicher (RAM): … 16GB 1066
  • Mainboard: … Gigabyte GM-z77m-gma
  • Netzteil: … Inter Tech Argus APS 620 Watt
  • Grafikkarte: … Saphire Nitro AMD RX 480 8gb Ram
  • HDD / SSD: … SSD 4TB Crucial MX500 Sata 3
  • Wird ein sog. "PCIe-Riserkabel" genutzt? ... nein

2. Beschreibe dein Problem. Je genauer und besser du dein Problem beschreibst, desto besser kann dir geholfen werden (zusätzliche Bilder könnten z. B. hilfreich sein):
...
Ich habe mir die Testversion von Photshop CC instaliert und immer wenn ich mit den neuronalen Filtern rumspiele stürzt der PC ab
Kein Bluescreen, einfach sofort Neustart.

Ich finde halt komisch das Spiele bisher noch ohne Fehler laufen sollte es die Hardware sein

3. Welche Schritte hast du bereits unternommen/versucht, um das Problem zu lösen und was hat es gebracht?
...

Treiber deinstaliert
Das AMD Cleaning Tool ausgeführt
Treiber neu instaliert.
 

Anhänge

  • Screenshot 2023-08-24 133325.png
    Screenshot 2023-08-24 133325.png
    7,9 KB · Aufrufe: 151
Zuletzt bearbeitet:
Komplett aus hat bei mir immer auf Netzteil hingewiesen. Wie alt ist es ?
Word der Rechner auch sonst benutzt ? Also mal richtig volllast?
 
Ich tippe auf das RAM. Für PS gerade im Zusammenhang mit Filtern und großen Bilddateien sind 16GB gerne mal zu wenig.
 
Schalt mal in Windows den Sofortigen Neustart bei Blackscreen aus, dann siehst du auch (wahrscheinlich) eine Fehlermeldung WAS (ungefähr) Schuld ist.
 
Du kannst mal zum Testen unter "Bearbeiten/Voreinstellungen/Leistung" bei Grafikprozessor-Einstellungen den Haken bei "Grafikprozessor verwenden" herausnehmen.

Damit weißt du ob es mit der Grafikkarte bzw. Treiber zu tun hat.
 
Demon_666 schrieb:
Ich tippe auf das RAM. Für PS gerade im Zusammenhang mit Filtern und großen Bilddateien sind 16GB gerne mal zu wenig.

wenn es am ram liegt, würde der rechner aber nicht abstürzen sondern ruckeln und die cpu last geht dann hoch.

Könnte aber damit zusammenhängen, vielleicht läuft der Arbeitsspeicher voll bei Photoshop und dann dreht die CPU hoch und muss das kompensieren und dann gehen natürlich die Temperaturen hoch, würde diese mal checken mit hwinfo (google) und dort die sensoren starten.
Denn Temperatur-Probleme können einen Absturz definitiv verursachen.
 
Naja Fehler in RAM können auch gut zu solch abstürzen führen.
Ich glaube er meint nicht dass er zu klein ist sondern dass da was nicht rund läuft.


@ TE
Ein Minderwertiges Netzteil von 2016 ist zwar nicht ganz unproblematisch aber wenn der Rechner spiele abkann würde ich auch eher auf RAM tippen.
Wenn du zwei Riegel hast, dann mal immer einen entfernen und gucken ob es mit einem klappt
 
  • Gefällt mir
Reaktionen: Demon_666
Ich habe jetzt nochmal den AMD Treiber deinstaliert und diesmal die AMD Pro Edition statt Adrenaline ohne Software nur den Treiber instaliert. Der Fehler tritt weiter auf. Wenn ich es richtig verstehe werden ja bei den neuronalen Filtern die GPU genutzt.
 
Auch mit nur einen Ram Stick tritt der Fehler weiter auf. Kann man wohl auschließen.
Langsam denke ich wirklich es ist die Grafikkarte. Das wäre dann die 2. in zwei Jahren. Von AMD Grafikkarten wäre ich dann erstmal geheilt.

System ist sauber und gepflegt. Malwarebytes und Emisoft Emergency Scanner zeigen auch keine Funde.

Nun unterstüzt Win 11 ofiziell meine Hardware nicht. Kann es daran liegen?
winver:
 

Anhänge

  • Screenshot 2023-08-24 142916.png
    Screenshot 2023-08-24 142916.png
    18 KB · Aufrufe: 132
birdskywinter schrieb:
System ist sauber und gepflegt.
Bei Windows fehlen wohl ein paar Updates.
Win 11 zeigt bei mir Build .2215

birdskywinter schrieb:
Nun unterstüzt Win 11 ofiziell meine Hardware nicht. Kann es daran liegen?
Glaube ich nicht.

Welches BIOS ist installiert:
https://www.cpuid.com/softwares/cpu-z.html ,

Reiter "Mainboard" - Rahmen "BIOS" - Feld "Version" ?

Sind die Kühler / Lüfter sauber?
Ist die Wärmeleitpaste des Prozessors gewechselt?
 
birdskywinter schrieb:
Auch mit nur einen Ram Stick tritt der Fehler weiter auf. Kann man wohl auschließen.
Langsam denke ich wirklich es ist die Grafikkarte. Das wäre dann die 2. in zwei Jahren. Von AMD Grafikkarten wäre ich dann erstmal geheilt.
wenn spiele laufen dann scheint die gpu ja erst mal zu funktionieren. Mit der gleichen Argumentation hast du ja das Netzteil ausgeschlossen.
 
Ah nicht so schnell. Noch wissen wir nichts.
Mir ging es nur darum dass du sagst es muss die gpu sein weil Adobe Last auf die gpu gibt. Es beim Netzteil aber nicht liegen kann well ja spiele laufen.

Prinzipiell halte ich ein neues Netzteil aber für gut angelegtes Geld. Wenn du vor hast irgendwann die nächsten 3 Jahre aufzurüsten kann man das ja ohne Probleme mitziehen.


Edit:
Das von dir verlinkte Netzteil ist einfach mal 12 Jahre alt. Bitte nicht so ein alten plunder kaufen
 
Aber nicht wieder ein altes Ding von eBay.
Es gibt durchaus noch gute Netzteile mit 650 Watt unter 70 Euro.
Mit 500-550 Watt gibt es auch welche um die 50 Euro.
 
Das ist wirklich ein billig-Netzteil, wenn da Last-Spikes entstehen kann das gut und gerne einfach abschalten, wo ein hochwertiges einfach drüber hinweggehen würde. Und einfach abschalten ist fast immer das Netzteil.
 
Helge01 schrieb:
Du kannst mal zum Testen unter "Bearbeiten/Voreinstellungen/Leistung" bei Grafikprozessor-Einstellungen den Haken bei "Grafikprozessor verwenden" herausnehmen.
Habe ich jetzt mal gemacht der PC schaltet weiterhin aus.

Kann das auch einfach ein Fehler im Programm sein?
Ergänzung ()

NatokWa schrieb:
Sofortigen Neustart bei Blackscreen aus
Wie mache ich das?
 
birdskywinter schrieb:
Wie mache ich das?
START - Einstellungen - PC-Einstellungen - Info - Erweiterte Systemeinstellungen (Mitte rechts) - Starten und Wiederherstellen - Einstellungen - Systemfehler: Haken raus bei: Automatisch Neustart durchführen.

Automatischen  Neustart abschalten.jpg
 
Danke. Ich bin diesen youtube Video gefolgt :
Und habe unter Linux zwei Scripts ausgeführt um den Ram von AMD Grafikkarten zu testen:

Die "verständliche AUsgabe des 1. Scripts "dmgg.py" . Es ist korrekt das Karte 8 Memorychips hat? ansonsten kann das zu einer falschen Ausgabe führen:

e0000000 ist die Adresse der AMD Karte
8 die Nummer der Chips

Code:
python3 dmgg.py e0000000 10 8    
Detected AMD GPU card:
sudo: : command not found
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (rev c7) (prog-if 00 [VGA controller])
Subsystem: PC Partner Limited / Sapphire Technology Radeon RX 470/480
Flags: bus master, fast devsel, latency 0, IRQ 36
Memory at e0000000 (64-bit, prefetchable) [size=256M]
Memory at f0000000 (64-bit, prefetchable) [size=2M]
I/O ports at e000 [size=256]
Memory at f7d00000 (32-bit, non-prefetchable) [size=256K]
Expansion ROM at f7d40000 [disabled] [size=128K]
Capabilities: [48] Vendor Specific Information: Len=08 <?>
Capabilities: [50] Power Management version 3
Capabilities: [58] Express Legacy Endpoint, MSI 00
Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
Capabilities: [150] Advanced Error Reporting
Capabilities: [200] Physical Resizable BAR
Capabilities: [270] Secondary PCI Express
Capabilities: [2b0] Address Translation Service (ATS)
Capabilities: [2c0] Page Request Interface (PRI)
Capabilities: [2d0] Process Address Space ID (PASID)
Capabilities: [320] Latency Tolerance Reporting
Capabilities: [328] Alternative Routing-ID Interpretation (ARI)
Capabilities: [370] L1 PM Substates
Kernel driver in use: amdgpu
Kernel modules: amdgpu


Possible GPU address:  e0000000 f0000000

number of chips is set to: 8
This test is working to detect bad chips. Warning it can give wrong faulty chip number ; only the amount of faulty chips will be good
count the chips counter-clockwise from right to left with pcie near you

chip 3 and/or 4 is faulty at address:  0
chip 1 and/or 2 is faulty at address:  512
chip 5 and/or 6 is faulty at address:  1024
chip 7 and/or 8 is faulty at address:  1536

number of faulty chips=  4
Total bytes tested: 4*2621440
Total errors count:  10444499  - every  1.003950404519125  OK:  41261

Die Ausgabe des 2. Scripts "memtest.py" hier ist eine Angabe der Chips nicht nötig aber auch hier werden Fehler gefunden

Code:
python3 memtest.py e0000000 10  
first error detected at 0x0
\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff
patterns sorted by error count:
0b10111011 41509
0b10010111 41455        0b00100011 41375        0b10010100 41354        0b01011001 41320
0b01011010 41319        0b00000111 41316        0b10011001 41286        0b01000010 41280
0b11110111 41270        0b01000001 41265        0b00110001 41258        0b01000011 41239
0b01100101 41237        0b11100000 41227        0b01000100 41226        0b10000000 41225
0b00000011 41224        0b10000011 41223        0b00110100 41216        0b01110001 41215
0b11011111 41212        0b10110110 41208        0b00101010 41203        0b10001100 41200
0b10110111 41198        0b11010101 41197        0b00111110 41187        0b11101101 41182
0b10100111 41178        0b00011011 41178        0b00000010 41165        0b01010110 41162
0b10100100 41149        0b10010101 41147        0b11100010 41147        0b11001010 41146
0b01101010 41146        0b01100000 41146        0b10010110 41142        0b11111011 41142
0b00100001 41135        0b01100100 41128        0b00100000 41128        0b00011110 41124
0b11011010 41123        0b01110110 41120        0b00111011 41117        0b01110111 41116
0b00001010 41115        0b10111001 41115        0b00100111 41115        0b11011110 41112
0b01010100 41110        0b10001110 41109        0b11011011 41108        0b10101001 41107
0b00001001 41106        0b11010111 41106        0b10100101 41105        0b10111111 41103
0b11100101 41103        0b01110000 41102        0b11111001 41102        0b10111110 41101
0b10000010 41097        0b00010000 41097        0b11100011 41096        0b10100011 41095
0b11110001 41094        0b11111111 41093        0b00001110 41093        0b01100110 41088
0b11010010 41086        0b00011001 41083        0b10100110 41082        0b11000111 41082
0b00111000 41080        0b01010010 41080        0b00100110 41078        0b01101100 41074
0b11110100 41073        0b10010000 41073        0b11111100 41069        0b01100111 41059
0b01110011 41059        0b10101111 41059        0b01011110 41058        0b01101110 41055
0b10110001 41046        0b01001111 41044        0b11011100 41043        0b11101110 41036
0b01011011 41031        0b10110011 41030        0b01101000 41022        0b10000100 41022
0b10110000 41019        0b01001100 41017        0b10010011 41015        0b11001110 41014
0b01011111 41013        0b11101000 41013        0b10011000 41012        0b00101110 41012
0b11001100 41011        0b10111010 41010        0b00000100 41009        0b10000101 41008
0b11001001 41003        0b10101010 41000        0b11010000 40997        0b01111100 40995
0b00100100 40993        0b11000101 40992        0b01111000 40989        0b10011010 40985
0b00111100 40985        0b11000110 40984        0b10001101 40983        0b10101110 40981
0b01111011 40979        0b01011000 40976        0b11011001 40973        0b00101111 40972
0b00101000 40971        0b00110010 40969        0b01101101 40968        0b00000110 40967
0b11001101 40964        0b11101100 40960        0b01101111 40955        0b10001001 40954
0b11000100 40953        0b10001011 40951        0b11000011 40951        0b00011101 40948
0b01001011 40946        0b11000000 40943        0b01100010 40943        0b01000000 40940
0b00010100 40940        0b00110011 40939        0b00100010 40937        0b11100110 40935
0b01011101 40934        0b00111111 40932        0b10111000 40932        0b11111110 40930
0b00000001 40928        0b01111111 40927        0b00010011 40925        0b11110000 40925
0b11110011 40923        0b00110000 40923        0b11001011 40922        0b11100001 40922
0b01011100 40921        0b10000001 40919        0b01100001 40917        0b10011111 40911
0b00001011 40909        0b01110010 40903        0b11101111 40902        0b01001101 40899
0b00100101 40890        0b00000101 40889        0b00001000 40886        0b10000111 40885
0b11001111 40881        0b10011110 40878        0b01010011 40875        0b10000110 40871
0b00111001 40869        0b00111010 40867        0b11100100 40864        0b10110101 40856
0b01110101 40851        0b10100010 40847        0b00110101 40846        0b01010000 40843
0b00011010 40843        0b00001100 40842        0b01111110 40840        0b10001010 40839
0b00101100 40839        0b10110010 40833        0b11111000 40833        0b11011000 40831
0b11000010 40830        0b10111101 40826        0b00011000 40815        0b10111100 40814
0b11110110 40814        0b00010101 40809        0b10010001 40808        0b01101011 40807
0b01001000 40806        0b11101010 40806        0b10101011 40801        0b00111101 40791
0b11101001 40791        0b00001101 40790        0b11010110 40790        0b01010101 40788
0b11111101 40782        0b01111010 40779        0b10010010 40772        0b10011011 40768
0b00110110 40768        0b01101001 40767        0b11000001 40767        0b01001010 40763
0b10101000 40757        0b10001000 40756        0b00110111 40756        0b11010001 40755
0b01111101 40755        0b10001111 40754        0b01000111 40744        0b01010111 40740
0b10100001 40739        0b10100000 40739        0b10101101 40737        0b01001001 40725
0b00101011 40725        0b00010010 40722        0b01110100 40710        0b11001000 40706
0b11111010 40705        0b01111001 40702        0b00010111 40702        0b10101100 40701
0b10011101 40699        0b00010110 40697        0b11100111 40686        0b11010011 40684
0b01010001 40683        0b11011101 40676        0b00010001 40670        0b01000101 40662
0b01000110 40659        0b00001111 40659        0b11110101 40656        0b10011100 40654
0b11110010 40639        0b00011100 40628        0b11101011 40608        0b00101001 40597
0b11010100 40595        0b01001110 40529        0b00011111 40493        0b01100011 40485
0b00101101 40435        0b10110100 40387
First address for 0b10010111: 0x35
Address diffs:
0x224   0x1     0x1f2   0xba    0xa3    0x3c    0x117   0x25
0x10d   0x19    0x2ba   0x2f    0x64    0x393   0xb7    0x176
0x36e   0x1d9   0x3c

First address for 0b10111011: 0x17
Address diffs:
0x7d    0x14d   0x8e    0x139   0xcc
0x3c    0x45    0x24    0xe0    0x3b    0x89    0xd2    0xf9
0x17    0x3e    0x13c   0x15f   0xee    0x1f

First address for noerr_big+: 0x0
Address diffs:


First address for total: 0x0
Address diffs:
0x1     0x1
0x1     0x1     0x1     0x1     0x1     0x1     0x1     0x1
0x1     0x1     0x1     0x1     0x1     0x1     0x1     0x1
0x1

Total bytes tested: 4*2621440
rand total errors count:  10444500  - every  1.003950404519125  OK:  41260
Bit error numbers: 5241983, 5245280, 5241629, 5240126, 5242356, 5243139, 5242201, 5243584  max-avg= 3134.5714285718277
different errors patterns count:  255
Before errors, following passed: []
Traceback (most recent call last):
  File "/home/manjaro/Downloads/memtest.py", line 121, in <module>
    run_test()
  File "/home/manjaro/Downloads/memtest.py", line 117, in run_test
    verify_no_errors_with_data(bytes(random.getrandbits(8) for i in range(len(phys_arr))), "rand")
  File "/home/manjaro/Downloads/memtest.py", line 97, in verify_no_errors_with_data
    raise Exception("ERRORS found in test " + test_name)
Exception: ERRORS found in test rand

Kann ich jetzt definitiv davon ausgehen das die Karte einen defekt hat?

Die beiden Scripte:

Code:
 #!/usr/bin/env python3
# Copyright (C) 2017, 2018 Vasily Galkin (galkinvv.github.io)
# This file may be used and  redistributed accorindg to GPLv3 licance.
import sys, os, mmap, math, random, datetime, time
import subprocess
os.system("")
#sys.tracebacklimit=0
random.seed(12111)
passed = []
faultychips = 0
class color():
    RED = '\033[31m'
    GREEN='\033[32m'
    YELLOW='\033[33m'
    WHITE='\033[37m'
amaifost = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
print(color.GREEN+"Detected AMD GPU card:")
bbb=""
q=subprocess.call(['sudo',''])
p = subprocess.Popen(['lspci', '-v'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
aaa=str(p).split("\\n\\n")
for i in range(len(aaa)):
 if  "VGA" in aaa[i]:
  if "AMD" in aaa[i]:
   bbb=bbb+aaa[i]
ccc=bbb.split("\\n\\t")
vvv=""
for i in range(len(ccc)):
 print(ccc[i])
 if "Memory" and " pref" in ccc[i]:
  qqq=ccc[i].split(" ")
  vvv=vvv+" "+qqq[2]
print()
print()
#sys.argv[1]=vvv  #activate this line for autodetection (not sure it is working ok)
print(color.YELLOW+"Possible GPU address: "+vvv)
print(color.WHITE)
def run_test():
    if len(sys.argv) < 2: raise Exception("Usage: " + sys.argv[0] + " C8000000 [mb_to_test]")
    offset = int(sys.argv[1], 16)
    if len(sys.argv) > 3:
      nbchips = int(sys.argv[3], 10)
    else:
      nbchips = 8
      print("default 8 chips no value in command line received from user")
    print("number of chips is set to:",nbchips)
    if len(sys.argv) >= 3:
      bytes_to_test = int(1024 * 1024 * float(sys.argv[2]))
    else:
      bytes_to_test = 1024 * 1024 * 32 // 8
    physmem = os.open("/dev/" + os.environ.get("MEM","mem"), os.O_RDWR, 777)
    #physmem = os.open("/dev/fb0", os.O_RDWR)
    phys_arr = mmap.mmap(physmem, bytes_to_test, offset=offset)
    #with open("/tmp/in", "rb") as binin: phys_arr[:]=binin.read() and sys.exit(0)
    #with open("/tmp/out", "wb") as binout: binout.write(phys_arr) and sys.exit(0)
    def bin8(byte):
        return "0b{:08b}".format(byte)
    def verify_no_errors_with_data(data, test_name):
        global faultychips
        if len(phys_arr) > len(data):
            data += b'\x00' * (len(phys_arr) - len(data))
        print("This test is working to detect bad chips. Warning it can give wrong faulty chip number ; only the amount of faulty chips will be good")
        print("count the chips counter-clockwise from right to left with pcie near you")
        phys_arr[:]=data
        data_possibly_modified = phys_arr[:]
        time.sleep(0.5)
        #os.system("setfont")
        bad_addresses = {}
        all_errors = []
        firstbadadress=0
        bad_bits = [0]*8
        print(color.RED)
        for i in range(len(data)):
            xored_error = data[i] ^ data_possibly_modified[i]
            #if i>1 and i<500:
            # xored_error=1 #test
            if xored_error:
              #  print("Error at address: " , i)
               # print("\n")
                for a in range(nbchips):
                 #print("i=",hex(i))
                 #print("a=",a)
                 if i>=a*256*(1+int(i/(256*nbchips))) and i<(a+1)*256*(1+int(i/(256*nbchips))):
                 # print("i=",i)
                 # print("a=",a)
                 # print("v1=",a*256*(1+int(i/(256*nbchips))))
                 # print("v2=",(a+1)*256*(1+int(i/(256*nbchips))))
                  if nbchips>8:
                   #print("warning this is tested only for r9 390")
                   if a==0 and amaifost[0]==0:
                    amaifost[0]=1
                    faultychips=faultychips+1
                    print("chip 5 is faulty at address: ",i)
                    break
                   if a==1 and amaifost[1]==0:
                    amaifost[1]=1
                    faultychips=faultychips+1
                    print("chip 7 is faulty at address: ",i)
                    break
                   if a==2 and amaifost[2]==0:
                    amaifost[2]=1
                    faultychips=faultychips+1
                    print("chip 6 is faulty at address: ",i)
                    break
                   if a==3 and amaifost[3]==0:
                    amaifost[3]=1
                    faultychips=faultychips+1
                    print("chip 8 is faulty at address: ",i)
                    break
                   if a==4 and amaifost[4]==0:
                    amaifost[4]=1
                    faultychips=faultychips+1
                    print("chip 3 is faulty at address: ",i)
                    break
                   if a==5 and amaifost[5]==0:
                    amaifost[5]=1
                    faultychips=faultychips+1
                    print("chip 1 is faulty at address: ",i)
                    break
                   if a==6 and amaifost[6]==0:
                    amaifost[6]=1
                    faultychips=faultychips+1
                    print("chip 4 is faulty at address: ",i)
                    break
                   if a==7 and amaifost[7]==0:
                    amaifost[7]=1
                    faultychips=faultychips+1
                    print("chip 2 is faulty at address: ",i)
                    break
                   if a==8 and amaifost[8]==0:
                    amaifost[8]=1
                    faultychips=faultychips+1
                    print("chip 11 is faulty at address: ",i)
                    break
                   if a==9 and amaifost[9]==0:
                    amaifost[9]=1
                    faultychips=faultychips+1
                    print("chip 9 is faulty at address: ",i)
                    break
                   if a==10 and amaifost[10]==0:
                    amaifost[10]=1
                    faultychips=faultychips+1
                    print("chip 12 is faulty at address: ",i)
                    break
                   if a==11 and amaifost[11]==0:
                    amaifost[11]=1
                    faultychips=faultychips+1
                    print("chip 10 is faulty at address: ",i)
                    break
                   if a==12 and amaifost[12]==0:
                    amaifost[12]=1
                    faultychips=faultychips+1
                    print("chip 13 is faulty at address: ",i)
                    break
                   if a==13 and amaifost[13]==0:
                    amaifost[13]=1
                    faultychips=faultychips+1
                    print("chip 15 is faulty at address: ",i)
                    break
                   if a==14 and amaifost[14]==0:
                    amaifost[14]=1
                    faultychips=faultychips+1
                    print("chip 14 is faulty at address: ",i)
                    break
                   if a==15 and amaifost[15]==0:
                    amaifost[15]=1
                    faultychips=faultychips+1
                    print("chip 16 is faulty at address: ",i)
                    break
                  if nbchips==8:
                   #print("warning this was tested only for rx470 4gb")
                   if (a==0  and amaifost[0]==0) or (a==1 and amaifost[1]==0):
                    amaifost[0]=1
                    amaifost[1]=1
                    faultychips=faultychips+1
                    print("chip 3 and/or 4 is faulty at address: ",i)
                    break
                   if (a==2  and amaifost[2]==0) or (a==3 and amaifost[3]==0):
                    amaifost[2]=1
                    amaifost[3]=1
                    faultychips=faultychips+1
                    print("chip 1 and/or 2 is faulty at address: ",i)
                    break
                   if (a==4  and amaifost[4]==0) or (a==5 and amaifost[5]==0):
                    amaifost[4]=1
                    amaifost[5]=1
                    faultychips=faultychips+1
                    print("chip 5 and/or 6 is faulty at address: ",i)
                    break
                   if (a==6  and amaifost[6]==0) or (a==7 and amaifost[7]==0):
                    amaifost[6]=1
                    amaifost[7]=1
                    faultychips=faultychips+1
                    print("chip 7 and/or 8 is faulty at address: ",i)
                    break
                    #am=int(i%nbchips)  
                # print("sss")  #ceva[am]=i  
                if not bad_addresses:
                    firstbadadress=hex(i)
                   # print("first error detected at " + hex(i))
                #addr_file.write("{:08x}".format(i)+"\n")
                if xored_error not in bad_addresses:
                    bad_addresses[xored_error] = [0, []]
                bad_addresses[xored_error][0] += 1
                all_addresses = bad_addresses[xored_error][1]
                if 1:
                    for b in range(8):
                        if xored_error & (1<<b): bad_bits[b] += 1
                if 1:
                    if len(all_addresses) < 0x4000:
                        all_addresses.append(i)
                    if len(all_errors) < 0x4000:
                        all_errors.append(i)
        if not bad_addresses:
            passed.append(test_name)
            print(color.GREEN+"No faulty chips found")
            print(color.WHITE)
           # return
        print(color.WHITE)
        def totals():
             global faultychips
#            print("number of chips (default 4 is no user input) is set to:",nbchips)
             total_errors =  sum((v[0] for k, v in bad_addresses.items()))
             #bytesperchiptested=nbchips/(len(data)/total_errors)
             print("number of faulty chips= ",faultychips)
             print("Total bytes tested: 4*" + str(len(data)//4))
             print("Total errors count: ", total_errors, " - every ", len(data)/(total_errors+1), " OK: ", len(data) - total_errors)
           # max_bit = max(bad_bits)
           # others_avg_bit = (sum(bad_bits) - max_bit)/(len(bad_bits)-1)
          #  print("Bit error numbers:", ", ".join(map(str,bad_bits)), " max-avg=", max_bit - others_avg_bit)
           # for i in range(len(ceva)):
           #  print("by chip error: c"+str(i+1)+"= "+str(ceva[i])+"\n")
           # print("nbofchips= ",nbchips)
           # print("first bad adress: ",firstbadadress)
            #print("different errors patterns count: ", len(bad_addresses))
        totals()
       # print("patterns sorted by error count:")
       # columns = 0
       # patterns_by_count = sorted(bad_addresses.items(), key=lambda v:-v[1][0])
       # for k, v in patterns_by_count:
       #     print(bin8(k), v[0], end = "\t")
         #   if columns % 4 == 0:
        #        print("")
        #    columns += 1
       # columns = 0
      #  k, v = patterns_by_count[0]
       # k1, v1 = patterns_by_count[min(2, len(patterns_by_count))-1]
       # print("")
       # pat_to_print = {"total":all_errors, bin8(k):v[1], bin8(k1):v1[1]}
     #   for pk,pv in pat_to_print.items():
           # if not pv: break
           # prev = pv[0]
        #    print("First address for "+pk+":", hex(prev))
          #  continue
           # print("Address diffs:")
         #   for a in pv[1:]:
              #  print(hex(a - prev), end = "\t")
        #        prev = a
              #  if columns % 8 == 7:
                  #  print("")
       #         columns += 1
      #  totals()
    #    raise Exception("ERRORS found in test " + test_name)
    #verify_no_errors_with_data(b'\xFF'*len(phys_arr), "ONEs")
    #verify_no_errors_with_data(b'\x00'*len(phys_arr), "ZERO")
    #verify_no_errors_with_data(b'\x00'*len(phys_arr), "ZERO")
    #verify_no_errors_with_data(b'\xCC'*len(phys_arr), "xCC")
    #verify_no_errors_with_data(b'\x55'*len(phys_arr), "x55")
    #verify_no_errors_with_data(b'\xaa'*len(phys_arr), "xaa")
    #verify_no_errors_with_data(b'\x12\x34\x56\x78\x9A\xBC\xDE\xF0\x46\xa3\xe5\x13\xad'*(len(phys_arr)//13), "special")
    #verify_no_errors_with_data(b'\x55\xaa\x55'*(len(phys_arr)//3), "aa55")
    verify_no_errors_with_data(bytes(random.getrandbits(8) for i in range(len(phys_arr))), "rand")
    #verify_no_errors_with_data(bytes(random.getrandbits(8) for i in range(len(phys_arr))), "rand")
try:
    for i in range(1):
        run_test()
finally:
 #    os.system("setfont")
   # if bad_addresses:
     print(color.YELLOW+"\n\nUsage:\npython3 ./dmmg.py b0000000 1 16  \nScript file dmmg.py is on root of the USB if you need to edit ; run lspci -v to find address of your ati card default is b0000000 \n 1 is 1MB of memory \n 16 is the number of memory chips from the card")
#     os.system("setfont")

Code:
#!/usr/bin/env python3
# Copyright (C) 2017-2020 Vasily Galkin (galkinvv.github.io)
# This file may be used and redistributed accoring to GPLv3 license.

#1MB woking 1070 before mem init: \xfb\xac\xd0\xba\xff\xff\xff\xff\xfc\xac\xd0\xba\xff\xff\xff\xff (0badac??, ?? are rotating).
import sys, os, mmap, random, datetime, time
random.seed(12111)
passed = []
def run_test():
    if len(sys.argv) < 2: raise Exception("Usage: " + sys.argv[0] + " C8000000 [mb_to_test]")
    offset = int(sys.argv[1], 16)
    if len(sys.argv) >= 3:
        bytes_to_test = int(1024 * 1024 * float(sys.argv[2]))
    else:
        bytes_to_test = 1024 * 1024 * 32 // 8
    physmem = os.open("/dev/" + os.environ.get("MEM","mem"), os.O_RDWR)
    #physmem = os.open("/dev/fb0", os.O_RDWR)
    phys_arr = mmap.mmap(physmem, bytes_to_test, offset=offset)
    #with open("/tmp/in", "rb") as binin: phys_arr[:]=binin.read() and sys.exit(0)
    #with open("/tmp/out", "wb") as binout: binout.write(phys_arr) and sys.exit(0)
    def bin8(byte):
        return "0b{:08b}".format(byte)
    def verify_no_errors_with_data(data, test_name):
        if len(phys_arr) > len(data):
            data += b'\x00' * (len(phys_arr) - len(data))
        #print("Starting test " + test_name)
        phys_arr[:]=data
        data_possibly_modified = phys_arr[:]
        #time.sleep(0.5)
        #os.system("setfont")
        bad_addresses = {}
        all_errors = []
        bad_bits = [0]*8
        for i in range(0x0000, len(data)):
            xored_error = data[i] ^ data_possibly_modified[i]
            if xored_error: #and xored_error == 0b01000000:
                if not bad_addresses:
                    print("first error detected at " + hex(i))
                    print("\\x" + "\\x".join("{:02x}".format(n) for n in data_possibly_modified[i:i+32]))
                #addr_file.write("{:08x}".format(i)+"\n")
                if xored_error not in bad_addresses:
                    bad_addresses[xored_error] = [0, []]
                bad_addresses[xored_error][0] += 1
                all_addresses = bad_addresses[xored_error][1]
                if 1:
                    for b in range(8):
                        if xored_error & (1<<b): bad_bits[b] += 1
                if 1:
                    if len(all_addresses) < 0x4000:
                        all_addresses.append(i)
                    if len(all_errors) < 0x8000:
                        all_errors.append(i)
        if not bad_addresses:
            passed.append(test_name)
            return
        def totals():
            print("Total bytes tested: 4*" + str(len(data)//4))
            total_errors =  sum((v[0] for k, v in bad_addresses.items()))
            print(test_name + " total errors count: ", total_errors, " - every ", len(data)/total_errors, " OK: ", len(data) - total_errors)
            max_bit = max(bad_bits)
            others_avg_bit = (sum(bad_bits) - max_bit)/(len(bad_bits)-1)
            print("Bit error numbers:", ", ".join(map(str,bad_bits)), " max-avg=", max_bit - others_avg_bit)
            print("different errors patterns count: ", len(bad_addresses))
        print("patterns sorted by error count:")
        columns = 0
        patterns_by_count = sorted(bad_addresses.items(), key=lambda v:-v[1][0])
        for k, v in patterns_by_count:
            print(bin8(k), v[0], end = "\t")
            if columns % 4 == 0:
                print("")
            columns += 1
        columns = 0
        k, v = patterns_by_count[0]
        k1, v1 = patterns_by_count[min(2, len(patterns_by_count))-1]
        print("")
        pat_to_print = {bin8(k1):v[1][:20], bin8(k):v1[1][:20], "noerr_big+":all_errors[:20], "total":all_errors[:20]}
        for pk,pv in pat_to_print.items():
            if not pv: continue
            prev = pv[0]
            print("First address for "+pk+":", hex(prev))
            #continue
            print("Address diffs:")
            for a in pv[1:]:
                diff = a - prev
                if "big+" in pk:
                    if diff < 0x20:
                        prev = a
                        continue
                    print(hex(prev + 1), end = ":")
                print(hex(diff), end = "\t")
                prev = a
                if columns % 8 == 7:
                    print("")
                columns += 1
            print("\n")
        totals()
        raise Exception("ERRORS found in test " + test_name)
    dif_rands = 2048
    """
    verify_no_errors_with_data(
    #b'b'\x45\xff\x77\x48\x65\xff\x25\xce\x65\xff\x15\x66\x47\xff\x57\x6d\x45\xff\xff\x13\x07\xff\xf5\x45\x65\xff\x15\xb6\x47\xff\xd7\xae''
    b'\x9b\x8e\xb1\x02\xcf\x7a\xaf\x4e\xce\xfe\xff\x8e\xfe\x3b\xc2\xdd\x02\x9f\x0e\x2c\x58\xb6\xd7\x04\x7a\x54\xa2\x14\x48\x70\xe5\x4e'
        *(len(phys_arr)//32), "Polaris0x600Hynix")
    #"""
    #verify_no_errors_with_data(b'\xFF'*len(phys_arr), "ONEs")
    #verify_no_errors_with_data(b'\x00'*len(phys_arr), "ZERO")
    #verify_no_errors_with_data(b'\xCC'*len(phys_arr), "xCC")
    #verify_no_errors_with_data(b'\x55'*len(phys_arr), "x55")
    #verify_no_errors_with_data(b'\x31'*len(phys_arr), "x31")
    #verify_no_errors_with_data(b'\xaa'*len(phys_arr), "xaa")
    #verify_no_errors_with_data(b'\x12\x34\x56\x78\x9A\xBC\xDE\xF0\x46\xa3\xe5\x13\xad'*(len(phys_arr)//13), "special")
    #verify_no_errors_with_data(b'\x55\xaa\x55'*(len(phys_arr)//3), "aa55")
    amd_problem=0x200
    amd_total=0x8000
    amd_pat=b'\xee'*amd_problem + bytes(random.getrandbits(8) for i in range(0x100)) + b'\xaa'*(amd_total - 0x100 - amd_problem)
    #verify_no_errors_with_data(amd_pat * (len(phys_arr)//len(amd_pat)), "amd-mem")
    verify_no_errors_with_data(bytes(random.getrandbits(8) for i in range(len(phys_arr))), "rand")
    #verify_no_errors_with_data(bytes(random.getrandbits(8) for i in range(len(phys_arr))), "rand")
try:
    for i in range(1):
        run_test()
finally:
    os.system("setfont")
    print("Before errors, following passed:", passed)
    os.system("setfont")
 
Zuletzt bearbeitet:
Zurück
Oben