AMD Ryzen 7000 डेस्कटॉप CPU में ECC RAM सपोर्ट की पुष्टि
(sunshowers.io)- AM5 लॉन्च के समय स्पेक शीट से गायब हुआ ECC RAM सपोर्ट Ryzen 7000 “Raphael” और ASRock मदरबोर्ड के संयोजन में काम करता हुआ फिर से पुष्टि हुआ
- टेस्ट Ryzen 7950X, ASRock B650E PG Riptide, UEFI 1.28, AGESA 1.0.0.7b, और v-color 32GB ECC UDIMM के 2 मॉड्यूल के साथ किया गया, और DDR5 link training के बाद Linux सफलतापूर्वक बूट हुआ
dmidecodeमें दिखने वाला 72-bit memory width औरMulti-bit ECCउपयोगी संकेत हैं, लेकिन क्योंकि यह UEFI की SMBIOS जानकारी है, यह अपने आप ECC के सक्रिय होने का अंतिम प्रमाण नहीं है- AMD UMC को SMN के जरिए सीधे क्वेरी करने पर
UmcCapHiका bit 30 ECC enabled स्थिति दिखाता है, और Linuxryzen_smuमें भी दोनों memory channels के लिए यह bit set मिला - वास्तविक error injection नहीं किया गया, लेकिन Linux kernel के EDAC logs UMC के ECC enabled bit की पुष्टि के बाद ही निकलते हैं, इसलिए यह ECC के काम करने का मजबूत संकेत है
Ryzen डेस्कटॉप ECC सपोर्ट में बदलाव
- AMD Ryzen डेस्कटॉप CPU में पहले से ECC RAM का आधिकारिक सपोर्ट एक बड़ी ताकत रहा है
- Ryzen 1000~5000 सीरीज़ के अधिकांश मॉडल, सही मदरबोर्ड के साथ, महंगे workstation-grade CPU के बिना भी ECC RAM इस्तेमाल कर सकते थे
- ASRock B550 Steel Legend specification page CPU generation के हिसाब से ECC RAM compatibility विस्तार से दिखाने का एक उदाहरण है
- Ryzen 7000 “Raphael” और Socket AM5 के लॉन्च के समय ECC सपोर्ट का उल्लेख गायब हो गया
- महंगे AM5 मदरबोर्ड ASRock X670E Taichi specification page पर भी, लेखन के समय तक, ECC support का कोई उल्लेख नहीं है
- Ryzen 7950X में अपग्रेड के बाद performance से संतुष्टि थी, लेकिन खरीदते समय ECC की अनुपस्थिति बड़ी कमी लगी
ASRock फ़ोरम से शुरू हुआ AM5 ECC टेस्ट
- ASRock forum thread में ApplesOfEpicness नाम के एक यूज़र ने AMD engineer के साथ AMD AGESA firmware में ECC RAM चलाने का अनुभव साझा किया
- उन्होंने बताया कि updated UEFI वाले ASRock मदरबोर्ड पर data pin और ground pin को short करके यह पुष्टि की गई कि error OS तक report हुआ
- इसके बाद टेस्ट में ASRock B650E PG Riptide और v-color 32GB ECC UDIMM के 2 मॉड्यूल इस्तेमाल किए गए
- मदरबोर्ड UEFI को 1.28 और AGESA को 1.0.0.7b तक अपडेट किया गया
- RAM बदलने के बाद लंबी DDR5 link training चली और फिर सिस्टम बूट हुआ
- इस सिस्टम में 64GB RAM की link training में लगभग 3 मिनट लगे
- Ryzen 7000 डेस्कटॉप पर यह RAM बदलने या timings बदलने के बाद केवल एक बार चाहिए, और UEFI परिणाम को cache करके बाद के boots में फिर इस्तेमाल करता है
Linux में दिखने वाले ECC संकेत और उनकी सीमाएँ
- Linux में
sudo dmidecode -t memoryECC से जुड़े मान दिखाता हैError Correction Type: Multi-bit ECCTotal Width: 72 bitsData Width: 64 bits
- Total Width 72 bits एक खास संकेत है
- non-ECC RAM में यह 64 bits दिखता है
- 64-bit ECC RAM में parity data के लिए अतिरिक्त 8 bits होते हैं
- Linux kernel का EDAC भी enabled दिखा
EDAC MC: Ver: 3.0.0EDAC MC0: Giving out device to module amd64_edacEDAC amd64: F19h_M60h detected
सिर्फ dmidecode क्यों पर्याप्त नहीं है
dmidecodeएक ऐसा tool है जो कंप्यूटर की DMI या SMBIOS tables को इंसानों के पढ़ने लायक रूप में दिखाता है- इन tables में hardware components, serial numbers, BIOS revision जैसी जानकारी होती है
- इससे hardware को सीधे probe किए बिना जानकारी मिल जाती है, लेकिन दिखाई गई जानकारी विश्वसनीय न भी हो सकती है
- SMBIOS BIOS द्वारा बनाई गई management information को पढ़ने के लिए data structures और access methods को परिभाषित करता है
- इससे operating system को devices को सीधे probe करने की ज़रूरत नहीं पड़ती
- ECC से जुड़ी
dmidecodeजानकारी processor से नहीं, बल्कि UEFI से आती है- memory speed जैसी कुछ जानकारी memory controller से आ सकती है
- लेकिन ECC जानकारी UEFI से आने के कारण यह दिखाती है कि memory ECC-capable है, पर यह गारंटी नहीं देती कि ECC वास्तव में enabled है
- ECC enabled है या नहीं, इसका अंतिम निर्णय सिस्टम का memory controller करता है
AMD UMC को सीधे क्वेरी करने का तरीका
- AMD processor एक bus expose करते हैं जिसे System Management Network या SMN कहा जाता है
- इस bus का उपयोग AMD Unified Memory Controller यानी UMC को query और configure करने के लिए किया जा सकता है
- illumos के AMD UMC documentation के अनुसार
UmcCapHiregister को query करके यह पता किया जा सकता है कि ECC enabled है या नहीं- संबंधित जानकारी public AMD Processor Programming Reference का हिस्सा नहीं है, लेकिन open source Linux और illumos kernel source से समझी जा सकती है
- SMN तक सीधे पहुंचना जोखिम भरा है
- खासकर write commands कंप्यूटर को गंभीर नुकसान पहुंचा सकते हैं
- SMN पर write operations नहीं करनी चाहिए
- illumos में Ryzen 7000 processor के दोनों memory channels को अलग-अलग query किया गया
- channel 0 address:
0x50df4 - channel 1 address:
0x150df4 - दोनों channels पर return value
0x40000030मिली
- channel 0 address:
- यहां मुख्य बिंदु bit 30 है
- अगर यह bit set हो, तो memory controller में ECC enabled है
Linux में ryzen_smu से SMN क्वेरी
- Linux में भी
ryzen_smudriver के जरिए SMN bus तक पहुंचा जा सकता है- इस सिस्टम पर install करने के लिए patch की ज़रूरत पड़ी
- driver
/sys/kernel/ryzen_smu_drv/smnfile उपलब्ध कराता है- query करने के लिए 4-byte address को little-endian format में लिखना होता है, और 4-byte result को little-endian format में पढ़ना होता है
- Python script से दोनों channels को query करने पर परिणाम इस प्रकार मिले
0x00050df4:0x400000000x00150df4:0x40000000
- return value में पहले nibble का
4यह दिखाता है कि bit 30 set है, यानी memory controller ECC enabled होने की रिपोर्ट कर रहा है - Windows में भी SMUDebugTool जैसे tools से इसी तरह की query संभव हो सकती है, लेकिन उस tool के व्यवहार की गारंटी नहीं है
वास्तविक error injection और EDAC की विश्वसनीयता
- ECC के काम करने की सबसे पक्की जांच वास्तविक error inject करना है
- ApplesOfEpicness ने मदरबोर्ड के data pin और ground pin को short किया
- एक और तरीका RAM overclock को अस्थिर बिंदु तक बढ़ाना है
- इस टेस्ट में physical pin short या बार-बार RAM overclock नहीं किया गया
- हर बार DDR5 link training में कई मिनट लगना भी overclock टेस्ट को बोझिल बनाता है
- अब तक कोई प्राकृतिक error दर्ज नहीं हुआ
- Linux kernel का EDAC message path AMD UMC के ECC enabled bit से जुड़ा है
Giving out device to modulelogedac_mc_add_mc_with_groupsसे आता है- यह function
init_one_instancepath में call होता है init_one_instanceकेवल तब call होता है जबpvt->ops->ecc_enabledtrue हो- Ryzen 7000 यानी Zen 4 family
0x19है, और इस स्थिति मेंumc_opsकाumc_ecc_enabledइस्तेमाल होता है
umc_ecc_enabled,umc_cap_hiकेUMC_ECC_ENABLEDbit की जांच करता हैUMC_ECC_ENABLEDहै bit 30- AMD processors में
EDAC MC0: Giving out device to module amd64_edacसंदेश एक विश्वसनीय संकेत है कि UMC ने ECC enabled होने की रिपोर्ट की है
निष्कर्ष
- Ryzen 7000 डेस्कटॉप CPU पर भी, कम से कम ASRock मदरबोर्ड के साथ, ECC RAM को अपेक्षाकृत आसानी से चलाया जा सकता है
- सिर्फ
dmidecodeकी SMBIOS-आधारित जानकारी पर्याप्त नहीं है, लेकिन UMC के bit 30 और Linux EDAC path को साथ देखकर ECC enabled स्थिति की अधिक प्रत्यक्ष पुष्टि की जा सकती है
1 टिप्पणियां
Hacker News की राय
मुझे प्रोसेसर अपग्रेड करना है और ECC RAM कॉन्फ़िगरेशन में काफी रुचि है
/r/AMD पर मैंने एक पोस्ट देखी जिसमें दो लोग इस बात पर बहस कर रहे थे कि AMD प्रोसेसर या motherboard सच में ECC support करते हैं या नहीं, लेकिन समझ नहीं आया कि कौन सही है: https://www.reddit.com/r/Amd/comments/lzxqod/list_of_am4_mot...
जानना चाहता हूं कि क्या इस लेख से यह पक्का हो जाता है कि AMD+ASRock कॉम्बिनेशन सच में ECC RAM है
आमतौर पर “Memory” सेक्शन में “ECC & Non-ECC, Unbuffered Memory” जैसी लाइन लिखी होती है
“On-die ECC” शब्द से सावधान रहें, क्योंकि यह Non-ECC memory में भी मौजूद feature है और यहां जिस ECC की बात हो रही है उससे इसका संबंध नहीं है
ECC DDR5 UDIMM खरीदना चाहिए, और गलती से ECC DDR5 RDIMM नहीं खरीदना चाहिए, जो AM5 motherboards के साथ compatible नहीं है
ECC DDR5 UDIMM 80-bit या 72-bit चौड़ाई वाला हो सकता है; बस Non-ECC DDR5 UDIMM के 64-bit वाला न हो
जब मैंने पहले चेक किया था, ASUS के पास ECC support वाले AM5 boards सबसे ज्यादा थे, और GPU slot के अलावा PCIe expansion अच्छा होने की वजह से PRIME X670E-PRO WIFI मुझे सबसे पसंद आया था
0 का मतलब बिल्कुल support नहीं—ECC RAM लगाने पर boot नहीं होगा; 1 का मतलब लगाया तो जा सकता है लेकिन ECC feature इस्तेमाल नहीं होता; 2 का मतलब circuitry मौजूद है लेकिन motherboard निर्माता ने error detection/correction verify नहीं किया; 3 का मतलब ECC feature मौजूद है और निर्माता ने verify किया है
Supermicro जैसे server-grade board से level 3 की उम्मीद की जा सकती है
AMD processor पर “ECC supported” दिखे तो यह जानना मुश्किल होता है कि कौन-सा level है, लेकिन Intel में अगर CPU/chipset ECC support कहता है तो माना जा सकता है कि यह सच में support करता है
मैंने जानबूझकर खराब ECC DIMM इस्तेमाल करके कम समय में correctable errors और uncorrectable errors पैदा कर लिए थे
जब बाकी components मौजूद हैं तो ASRock ने wiring नहीं की होगी, इसकी संभावना कम लगती है; अगर kernel कहता है कि ECC है, तो मैं उसे सही मानूंगा
नहीं तो board को defective बताकर return कर दें और किसी दूसरे निर्माता का इस्तेमाल करें
हालांकि mini-ITX/mATX X670E board न होना अफसोस की बात है। वह सिर्फ ASUS के पास है
dmidecode72-bit के बजाय 128-bit data width report करता है, लेकिन single-bit ही नहीं, multi-bit correction भी report करता हैIntel boards के UDIMM, जैसे Supermicro+Xeon में मैं 72-bit देखने का आदी था, लेकिन यह जानकारी actual hardware support के बजाय memory controller और motherboard की reporting style से प्रभावित लगती है
फिर भी EDAC काम करता है, सही driver register होता है, और EDAC/RAS से कभी-कभी यह warning मिलती है कि correctable error सच में correct किया गया, इसलिए मेरे हिसाब से यह मामला तय है
थोड़ा विषय से हटकर, लेकिन पुराने AM4 platform और Zen3 APU cores पर भी काम करने वाला ECC support इस तरह दिखता है और मेरे system में यह निश्चित रूप से मौजूद है
कॉम्बिनेशन ASRock B550M-ITX/ac और AMD Ryzen 5 PRO 5650G है, और पहले Ryzen 5 3600 व dedicated GPU इस्तेमाल करते समय भी यह इसी तरह काम करता था
आधुनिक GNU/Linux में ECC activity detect और log करने के लिए
rasdaemonservice enable करनी होती हैयह service MCE और अन्य hardware-related errors को interpret करके database में store करती है, और ऊपर query किया गया output भी उसी का result है
हालांकि दोबारा सोचने पर frequency काफी ज्यादा है, इसलिए memory module खराब भी हो सकता है। खासकर इसलिए कि हर बार वही module और वही address है
https://www.asus.com/global/support/FAQ/1045186/
dmidecode72-bit width दिखाता है औरdmesg | grep -i EDACभी बहुत सारी ऐसी जानकारी दिखाता है जिससे लगता है कि ECC on हैलेकिन उस command का output खाली है और सिर्फ “No Memory errors”, “No PCIe AER errors”, “No Extlog errors”, “No MCE errors” दिखता है
क्या errors log होने के लिए कुछ enable करना पड़ेगा, या मैं
dmidecodeऔरdmesgसे धोखा खा रहा हूं?अच्छा लेख है। मैं अपने Threadripper बोर्ड पर भी ECC RAM इस्तेमाल कर रहा हूँ
Blekko ऑपरेशंस टीम ने Intel बोर्डों में जो चीज़ें पाईं, उनमें से एक यह थी कि बोर्ड को स्पष्ट रूप से बताना पड़ता था कि वह सुधार योग्य errors को सच में report करे
default यह था कि अगर unrecoverable error हो तो machine check दे, और बाकी मामलों को बस छोड़ दे
मुझे याद है कि करीब 1600 192GB सिस्टमों में हम लगभग हफ्ते में एक बार सुधार योग्य error देखते थे
6 साल में एक भी unrecoverable error याद नहीं है, इसलिए यह काफी अच्छा था
हमारे पास मिलते-जुलते scale के उपकरण और औसतन करीब उतनी ही RAM capacity थी, और कभी-कभी unrecoverable errors भी होते थे। शायद साल में एक-दो बार, इसलिए एक policy बन गई थी
देखते थे कि क्या यह सिर्फ एक बार हुआ है; अगर जल्द दोबारा fail नहीं हुआ तो ठीक मानते थे, और अगर जल्द दोबारा fail हुआ तो RAM बदल देते थे
बेहतर server boards LED से यह भी बता देते हैं कि कौन-सा RAM module बदलना है
सुधार योग्य errors के मामले में, जब तक count काफी बड़ा नहीं हो जाता था, हम replace नहीं करते थे; और दिन में एक-दो errors देने वाले सिस्टम भी लंबे समय तक ठीक चलते रहे
इसके उलट, कुछ सिस्टम लंबे समय तक 0 पर रहते, फिर कुछ दिनों तक थोड़ी संख्या में errors आते और फिर अचानक बहुत बड़े आंकड़े तक पहुँच जाते
एक सिस्टम तो प्रति घंटे हजारों तक पहुँच गया था, और machine check exception handling की लागत के कारण सिस्टम इस्तेमाल के लायक नहीं रहा; लेकिन reporting interval 1 घंटा था, इसलिए अगली report आने तक कारण पता नहीं था
अभी Ryzen 3700X और ASUS TUF Gaming X570 motherboard इस्तेमाल कर रहा हूँ, और मुझे single-core performance और NVMe/disk speed की ज़्यादा जरूरत है
dual GPU, 2 M.2 NVMe और 6 SATA पहले से इस्तेमाल कर रहा हूँ
साल के आखिर में upgrade पर विचार कर रहा हूँ; PCIe lanes की वजह से Threadripper के बारे में भी थोड़ा सोचा था, लेकिन Zen4 Threadripper अभी नहीं है और कीमत भी बहुत ज्यादा होने की संभावना है
विकल्प यह हैं कि Ryzen 5900X पर जाऊँ और बाकी सब वैसा ही रखूँ, या ज्यादा पैसे खर्च करके AM5 Ryzen और नया motherboard लूँ
Intel भी देखा, लेकिन PCIe lanes 20 पर खत्म होते देखकर उसे छोड़ने की तरफ झुक गया
मैं 10Gb adapter जोड़कर कुछ spinning disks को बाहर निकालना चाहता हूँ, इसलिए ज्यादा PCIe lanes चाहिए
3700X की multicore performance पर्याप्त है, और अगर नया motherboard खरीदूँ तो speed के लिए कम से कम 2 NVMe mirror और 6 या उससे अधिक SATA ports चाहिए
AMD के बारे में नहीं जानता, लेकिन Intel boards में आम तौर पर सिर्फ एक M.2 slot सीधे CPU से जुड़ा होता है और बाकी तीन chipset से होकर जाते हैं, इसलिए वे 10Gb Ethernet card के साथ भी bottleneck share करते हैं
आखिरकार PCIe 5.0 support वाला board और पर्याप्त बड़ा single SSD खरीदना कहीं ज्यादा तेज निकला, और total IOPS व throughput दोनों पुराने RAID 0 array से अधिक थे
5900X उतना बड़ा upgrade नहीं है
संदर्भ के तौर पर, Hetzner कुछ महीनों से ECC RAM लगे Ryzen 7000 CPU servers दे रहा है
https://www.hetzner.com/dedicated-rootserver/matrix-ax
AX52 में ECC RAM optional upgrade के रूप में मिलता है, और AX102 में ECC default रूप से शामिल है
ऐसा नहीं लगता कि उन्होंने ऐसा ECC दिया होगा जो वास्तव में काम ही न करता हो
इसलिए वे शुरू से अंत तक ECC support पक्का सुनिश्चित कर सकते होंगे
काश lawmakers होश में आएँ और ECC को अनिवार्य कर दें
यह असहज करने वाली बात है कि ज्यादातर computing कमजोर Non-ECC systems पर होती है
यह artificial market segmentation का बहुत ही घटिया रूप है
ऐसे लोगों से ECC पर कानून बनाने की उम्मीद कैसे कर सकते हैं
लेकिन मेरा Intel system 64GB Non-ECC RAM के साथ रोज आधा दिन चलता है और रात में hibernate होता है; 3D CAD, Photoshop, ढेर सारे extensions वाला VS Code, और WSL2 Docker containers चलाने पर भी मुझे errors लगभग नहीं दिखते
crash या blue screen भी नहीं होती
bit flip errors से ठीक-ठीक क्या उम्मीद करनी चाहिए, यह जानना चाहता हूँ। अगर 64GB RAM लगभग पूरी भरी होने पर single bit flips इतने बार हो रहे हों, तो वे किसी न किसी तरह सामने आने चाहिए, ऐसा लगता है
पिनों को फिजिकली शॉर्ट करने की हिम्मत नहीं है, और DDR5 link training का हर बार कई मिनट इंतजार करते हुए RAM को धीरे-धीरे overclock करने का धैर्य भी नहीं है
इसलिए मैं इस बात से संतुष्ट हूं कि memory controller रिपोर्ट कर रहा है कि ECC चालू है
इसके बजाय RAM पर hair dryer की गर्म हवा मारना कैसा रहेगा? पहले errors पैदा करने के लिए ऐसी technique इस्तेमाल होते देखी है
https://hackaday.com/2022/01/29/blast-chips-with-this-bbq-li...
https://hackaday.com/tag/emfi/
वास्तविक इस्तेमाल के लिए recommended नहीं है, लेकिन memory limits खोजने या errors पैदा करने में काम आ सकता है
मेरे I7-4770K non-overclocked system पर errors दिख जाते हैं, लेकिन पुराने Supermicro X10 generation boards पर Rowhammer test अनिश्चित समय तक चलाने पर भी errors detect होते नहीं लगते
हालांकि अगर modern systems को Rowhammer attacks के प्रति vulnerable न रहने के लिए design किया गया है, तो यह तरीका काम नहीं कर सकता
Raspberry Pi 4B और CM4 की RAM के बारे में कहा जाता है कि वे ECC RAM इस्तेमाल करते हैं, लेकिन यह यहां बताई जा रही ECC से अलग है
यह on-die ECC है और chip yield सुधारने के उद्देश्य से है; ECC errors hardware के जरिए report नहीं होते और correct कर दिए जाते हैं
uncorrectable ECC errors शायद बस गलत data के रूप में read होंगे
सोच रहा हूं कि क्या modern RAM modules भी on-die ECC वाले chips इस्तेमाल करते हैं
link training को BIOS में बंद किया जा सकता है, जिससे borderline bandwidth settings जल्दी खोजी जा सकती हैं
results बहुत repeatable नहीं होंगे, लेकिन वह important नहीं है
कुछ, शायद सभी ASUS AM5 motherboards में official ECC support है
जिस model को मैंने अभी check किया, उसके board manual और BIOS manual दोनों में यह लिखा है
संबंधित BIOS settings में से एक का default Auto है, लेकिन intuition के उलट इस state में यह disabled रहता है, इसलिए इसे बदलना होगा
इन processors के लिए ECC reporting Linux 6.5 में आई, इसलिए Debian Stable users को इसके Backports में आने का इंतजार करना होगा या standard path से हटना होगा
https://www.phoronix.com/news/AMD-EDAC-Ryzen-7000-Series
अगर actual applied value दिख जाए तो फिर भी ठीक है, लेकिन दस में से नौ बार यह clear नहीं होता
अफवाह है कि पुराने AGESA versions में एक bug था, जिसकी वजह से chipset ECC RAM को ठीक से पहचान और इस्तेमाल नहीं कर पाता था
जबकि कहा जाता है कि उस chipset को support करना चाहिए था
जिस motherboard पर विचार कर रहे हैं, उसके लिए check करना चाहिए कि कम-से-कम AGESA 1.0.0.5 patch C वाला firmware update उपलब्ध है या नहीं
https://www.reddit.com/r/truenas/comments/10lqofy/
AGESA AMD system firmware का हिस्सा है, जो core system components को initialize करता है: https://en.wikipedia.org/wiki/AGESA
ECC RAM install करने से पहले मैंने AGESA 1.0.0.7b पर update किया था
मुझे नहीं पता था कि Ryzen 7000 series ECC support को officially specify नहीं करती
उदाहरण के लिए ASRock Rack line support करती है: https://www.asrockrack.com/general/productdetail.asp?Model=1...
यह ASUS motherboard भी ECC support का दावा करता है: https://www.asus.com/us/motherboards-components/motherboards...
दोनों तब उपलब्ध नहीं थे जब मैंने पहली बार AM5 motherboard खरीदा था। launch के ठीक बाद था और performance numbers इतने अच्छे थे कि मैंने जल्दी खरीद लिया
currently बिक रहे सभी Ryzen 7000 series CPUs में official ECC support है, लेकिन motherboard support भी जरूरी है
ऐसी conditional ECC support AMD के consumer CPUs में Athlon 64 तक पीछे से मौजूद रही है, लेकिन Ryzen 7000 series में AMD marketing material में इसे लिखे देखना शायद पहली बार है
author का मतलब था कि ASRock motherboard documentation से ECC support का mention गायब हो गया था
ASRock पहले के Ryzen motherboards में ECC support specify करता रहा है, इसलिए यह noticeable change था
Ryzen 5 7600 specifications page example: https://www.amd.com/en/product/12756#:~:text=ECC%20Support,R...)
ऊपर से यह सभी DDR5 द्वारा इस्तेमाल की जाने वाली on-chip ECC से भी confuse हो जाता है
DDR5 को normal operation के दौरान होने वाली errors correct करने के लिए on-chip ECC की जरूरत होती है, लेकिन यह memory bus के जरिए CPU तक भेजे जाने वाले data की protection करने वाली ECC नहीं है