ยืนยันการรองรับ ECC RAM ของซีพียูเดสก์ท็อป AMD Ryzen 7000
(sunshowers.io)- มีการยืนยันอีกครั้งว่า รองรับ ECC RAM ซึ่งเคยหายไปจากตารางสเปกตอนเปิดตัว AM5 โดยพบกรณีที่ใช้งานได้กับการจับคู่ระหว่าง Ryzen 7000 “Raphael” และเมนบอร์ด ASRock
- การทดสอบใช้ Ryzen 7950X, ASRock B650E PG Riptide, UEFI 1.28, AGESA 1.0.0.7b และ v-color 32GB ECC UDIMM จำนวน 2 แถว โดยบูต Linux สำเร็จหลังผ่านการทำ DDR5 link training
- ค่า memory width 72 บิต และการแสดงผล
Multi-bit ECCในdmidecodeเป็นเบาะแสที่มีประโยชน์ แต่เพราะเป็นข้อมูล SMBIOS จาก UEFI จึงยังไม่สามารถพิสูจน์การเปิดใช้ ECC ได้ด้วยตัวมันเอง - เมื่ออ่านค่า AMD UMC โดยตรงผ่าน SMN จะพบว่า bit 30 ของ
UmcCapHiบอกสถานะการเปิดใช้ ECC และใน Linuxryzen_smuก็ยืนยันว่าบิตดังกล่าวถูกตั้งค่าในหน่วยความจำทั้งสองแชนเนล - แม้จะไม่ได้ฉีดข้อผิดพลาดจริง แต่ log ของ Linux kernel EDAC จะถูกแสดงผ่านเส้นทางที่ตรวจสอบบิตเปิดใช้ ECC ของ UMC ก่อน จึงเป็นหลักฐานที่หนักแน่นในการตัดสินว่า ECC ทำงานอยู่
การเปลี่ยนแปลงของการรองรับ ECC บน Ryzen เดสก์ท็อป
- ซีพียูเดสก์ท็อป AMD Ryzen มีจุดเด่นเรื่อง รองรับ ECC RAM อย่างเป็นทางการ มาตั้งแต่ก่อนหน้านี้
- ซีรีส์ Ryzen 1000~5000 ส่วนใหญ่สามารถใช้ ECC RAM ได้เมื่อจับคู่กับเมนบอร์ดที่เหมาะสม โดยไม่ต้องขยับไปใช้ซีพียูเวิร์กสเตชันที่แพงกว่า
- หน้าสเปก ASRock B550 Steel Legend เป็นตัวอย่างที่แสดงข้อมูลความเข้ากันได้ของ ECC RAM แยกตามรุ่นซีพียูอย่างละเอียด
- เมื่อ Ryzen 7000 “Raphael” และ Socket AM5 เปิดตัว คำอธิบายเรื่องการรองรับ ECC กลับหายไป
- แม้แต่ หน้าสเปก ASRock X670E Taichi ซึ่งเป็นเมนบอร์ด AM5 ระดับสูง ก็ยัง ไม่มีการระบุเรื่องรองรับ ECC ณ เวลาที่เขียน
- แม้จะพอใจกับประสิทธิภาพหลังอัปเกรดเป็น Ryzen 7950X แต่การไม่มี ECC ตอนตัดสินใจซื้อก็ยังเป็นเรื่องน่าเสียดายมาก
การทดสอบ ECC บน AM5 ที่เริ่มจากฟอรัม ASRock
- ใน หัวข้อบนฟอรัม ASRock ผู้ใช้ชื่อ ApplesOfEpicness ได้แชร์ประสบการณ์ที่ทำให้ ECC RAM ทำงานได้บนเฟิร์มแวร์ AMD AGESA ร่วมกับวิศวกรของ AMD
- เขาระบุว่าสามารถยืนยันได้ว่าข้อผิดพลาดถูกรายงานไปถึง OS โดยการชอร์ตขา data pin กับขา ground บนเมนบอร์ด ASRock ที่อัปเดต UEFI แล้ว
- หลังจากนั้น การทดสอบใช้ ASRock B650E PG Riptide และ v-color 32GB ECC UDIMM 2 แถว
- UEFI ของเมนบอร์ดอัปเดตเป็น 1.28 และ AGESA เป็น 1.0.0.7b
- หลังเปลี่ยน RAM ระบบสามารถบูตได้หลังจากใช้เวลาทำ DDR5 link training ค่อนข้างนาน
- บนระบบนี้ การทำ link training กับ RAM ขนาด 64GB ใช้เวลาเกือบ 3 นาที
- บน Ryzen 7000 เดสก์ท็อป ขั้นตอนนี้จำเป็นเพียงครั้งเดียวหลังเปลี่ยน RAM หรือปรับ timing และ UEFI จะ cache ผลลัพธ์เพื่อนำกลับมาใช้ในการบูตครั้งต่อ ๆ ไป
สัญญาณของ ECC ที่มองเห็นได้ใน Linux และข้อจำกัด
- บน Linux คำสั่ง
sudo dmidecode -t memoryจะแสดงค่าที่เกี่ยวข้องกับ ECCError Correction Type: Multi-bit ECCTotal Width: 72 bitsData Width: 64 bits
- ค่า Total Width 72 bits เป็นสัญญาณที่สังเกตได้ชัด
- หากเป็น RAM ที่ไม่ใช่ ECC จะแสดงเป็น 64 บิต
- ECC RAM แบบ 64 บิตจะมี อีก 8 บิต เพิ่มเข้ามาสำหรับข้อมูล parity
- EDAC ของ Linux kernel ก็แสดงว่าเปิดใช้งานอยู่เช่นกัน
EDAC MC: Ver: 3.0.0EDAC MC0: Giving out device to module amd64_edacEDAC amd64: F19h_M60h detected
เหตุใด dmidecode เพียงอย่างเดียวจึงไม่พอ
dmidecodeเป็นเครื่องมือที่แสดงผลตาราง DMI หรือ SMBIOS ของคอมพิวเตอร์ให้อ่านได้ง่าย- ตารางนี้เก็บข้อมูลอย่างองค์ประกอบฮาร์ดแวร์ หมายเลขซีเรียล และ BIOS revision
- แม้จะไม่ต้องสำรวจฮาร์ดแวร์จริงโดยตรง แต่ข้อมูลที่แสดง อาจเชื่อถือไม่ได้เสมอไป
- SMBIOS กำหนดโครงสร้างข้อมูลและวิธีเข้าถึงข้อมูลการจัดการที่ BIOS สร้างไว้
- ช่วยให้ระบบปฏิบัติการไม่จำเป็นต้องสำรวจอุปกรณ์โดยตรง
- ข้อมูล ECC ใน
dmidecodeไม่ได้มาจากตัวโปรเซสเซอร์ แต่จาก UEFI- ข้อมูลบางอย่าง เช่น ความเร็วหน่วยความจำ อาจมาจาก memory controller
- แต่ข้อมูล ECC มาจาก UEFI ดังนั้นจึงบอกได้เพียงว่าหน่วยความจำรองรับ ECC ไม่ได้ยืนยันว่า ECC ถูกเปิดใช้งานจริง
- การตัดสินขั้นสุดท้ายว่า ECC เปิดหรือไม่ อยู่ที่ memory controller ของระบบ
วิธีอ่านค่า AMD UMC โดยตรง
- โปรเซสเซอร์ AMD เปิดให้เข้าถึงบัสชื่อ System Management Network หรือ SMN
- บัสนี้สามารถใช้ในการอ่านค่าและตั้งค่าของ AMD Unified Memory Controller หรือ UMC ได้
- จากเอกสาร AMD UMC ของ illumos หากอ่านรีจิสเตอร์
UmcCapHiก็จะตรวจสอบการเปิดใช้ ECC ได้- ข้อมูลส่วนนี้ไม่ได้อยู่ในเอกสาร AMD Processor Programming Reference แบบสาธารณะทั้งหมด แต่สามารถตรวจสอบได้จากซอร์สของเคอร์เนล Linux และ illumos แบบโอเพนซอร์ส
- การเข้าถึง SMN โดยตรงมีความเสี่ยง
- โดยเฉพาะคำสั่งเขียนอาจทำให้คอมพิวเตอร์ เสียหายร้ายแรง ได้
- จึงไม่ควรทำการเขียนใด ๆ ไปยัง SMN
- ใน illumos มีการอ่านค่าสองแชนเนลหน่วยความจำของโปรเซสเซอร์ Ryzen 7000 แยกกัน
- ที่อยู่ของแชนเนล 0:
0x50df4 - ที่อยู่ของแชนเนล 1:
0x150df4 - ค่าที่ได้กลับมาคือ
0x40000030เหมือนกันทั้งสองแชนเนล
- ที่อยู่ของแชนเนล 0:
- จุดสำคัญคือ bit 30
- หากบิตนี้ถูกตั้งค่า แปลว่า ECC ถูกเปิดใช้งานใน memory controller
อ่านค่า SMN บน Linux ด้วย ryzen_smu
- บน Linux ก็สามารถเข้าถึงบัส SMN ผ่านไดรเวอร์
ryzen_smuได้- สำหรับระบบนี้ จำเป็นต้องใช้แพตช์ เพื่อติดตั้ง
- ไดรเวอร์นี้มีไฟล์
/sys/kernel/ryzen_smu_drv/smnให้ใช้งาน- หากต้องการ query ต้องเขียนที่อยู่ 4 ไบต์ในรูปแบบ little endian แล้วอ่านผลลัพธ์ 4 ไบต์กลับมาในรูปแบบ little endian เช่นกัน
- ผลจากการอ่านสองแชนเนลด้วยสคริปต์ Python เป็นดังนี้
0x00050df4:0x400000000x00150df4:0x40000000
- ตัวเลข
4ใน nibble แรกของค่าที่ได้ หมายความว่า bit 30 ถูกตั้งค่าไว้ และ memory controller กำลังรายงานว่า ECC เปิดใช้งานอยู่ - บน Windows ก็อาจอ่านค่าแบบเดียวกันได้ด้วยเครื่องมืออย่าง SMUDebugTool แต่ไม่ได้รับประกันการทำงานของเครื่องมือนี้
การฉีดข้อผิดพลาดจริงและความน่าเชื่อถือของ EDAC
- วิธีที่แน่ชัดที่สุดในการยืนยันว่า ECC ทำงาน คือการฉีดข้อผิดพลาดจริง
- ApplesOfEpicness ใช้วิธีชอร์ต data pin กับ ground pin บนเมนบอร์ด
- อีกวิธีหนึ่งคือโอเวอร์คล็อก RAM ไปจนถึงจุดที่ไม่เสถียร
- การทดสอบนี้ไม่ได้ทำการชอร์ตขาจริงหรือโอเวอร์คล็อก RAM ซ้ำ ๆ
- การที่ DDR5 link training ใช้เวลาหลายนาทีทุกครั้งก็เป็นภาระสำหรับการทดสอบโอเวอร์คล็อกเช่นกัน
- จนถึงตอนนี้ยังไม่พบข้อผิดพลาดที่เกิดขึ้นเองตามธรรมชาติ
- เส้นทางการแสดงข้อความ EDAC ของ Linux kernel เชื่อมโยงกับบิตเปิดใช้ ECC ของ AMD UMC
- log
Giving out device to moduleมาจากedac_mc_add_mc_with_groups - ฟังก์ชันนี้ถูกเรียกจากเส้นทาง
init_one_instance - และ
init_one_instanceจะถูกเรียกก็ต่อเมื่อpvt->ops->ecc_enabledเป็นจริงเท่านั้น - Ryzen 7000 หรือ Zen 4 ใช้ family
0x19และในกรณีนี้จะใช้umc_opsของumc_ecc_enabled
- log
umc_ecc_enabledจะตรวจสอบบิตUMC_ECC_ENABLEDของumc_cap_hiUMC_ECC_ENABLEDคือ bit 30- บนโปรเซสเซอร์ AMD ข้อความ
EDAC MC0: Giving out device to module amd64_edacจึงเป็นตัวชี้วัดที่เชื่อถือได้ว่า UMC รายงานว่า ECC ถูกเปิดใช้งาน
บทสรุป
- แม้จะเป็น Ryzen 7000 เดสก์ท็อป ก็ยังสามารถทำให้ ECC RAM ทำงานได้ค่อนข้างง่าย อย่างน้อยในชุดที่ใช้ เมนบอร์ด ASRock
- ข้อมูลจาก SMBIOS ใน
dmidecodeเพียงอย่างเดียวยังไม่พอ แต่เมื่อดูร่วมกับ bit 30 ของ UMC และเส้นทาง EDAC ของ Linux ก็จะยืนยันสถานะการเปิดใช้ ECC ได้โดยตรงมากขึ้น
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ต้องอัปเกรดโปรเซสเซอร์ และสนใจ การจัดชุด ECC RAM มาก
เคยเห็นโพสต์ใน /r/AMD ที่มีคนสองคนถกกันว่าโปรเซสเซอร์หรือเมนบอร์ดของ AMD รองรับ ECC จริงหรือไม่ แต่ไม่รู้ว่าใครถูก: 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 ด้วย จึงไม่เกี่ยวกับ ECC ที่พูดถึงในที่นี้
ต้องซื้อ ECC DDR5 UDIMM และอย่าเผลอซื้อ ECC DDR5 RDIMM ซึ่งไม่เข้ากันกับเมนบอร์ด AM5
ECC DDR5 UDIMM อาจมีความกว้าง 80 บิตหรือ 72 บิต ขอแค่ไม่ใช่ 64 บิตแบบ Non-ECC DDR5 UDIMM ก็พอ
ตอนที่เคยตรวจสอบ ASUS มีบอร์ด AM5 ที่รองรับ ECC มากที่สุด และผมชอบ PRIME X670E-PRO WIFI มากที่สุดเพราะมีความสามารถในการขยาย PCIe นอกเหนือจากสล็อต GPU ดี
ระดับ 0 คือไม่รองรับเลย ถึงขั้นเสียบ ECC RAM แล้วบูตไม่ขึ้น, ระดับ 1 คือเสียบได้แต่ไม่ใช้ฟังก์ชัน ECC, ระดับ 2 คือมีวงจรแต่ผู้ผลิตเมนบอร์ดยังไม่ได้ตรวจสอบยืนยันการตรวจจับและแก้ไขข้อผิดพลาด, ระดับ 3 คือมีฟังก์ชัน ECC และผู้ผลิตตรวจสอบยืนยันแล้ว
ถ้าเป็นบอร์ดระดับเซิร์ฟเวอร์อย่าง Supermicro ก็คาดหวังระดับ 3 ได้
เมื่อเห็นว่าโปรเซสเซอร์ AMD ระบุ “ECC supported” ก็ยากจะรู้ว่าเป็นระดับไหน แต่ถ้า Intel บอกว่า CPU/ชิปเซ็ตรองรับ ECC ก็ถือได้ว่ารองรับจริง
เคยตั้งใจใช้ ECC DIMM ที่เสียเพื่อสร้างทั้งข้อผิดพลาดที่แก้ไขได้และแก้ไขไม่ได้ภายในเวลาไม่นาน
ดูไม่น่าเป็นไปได้ที่ส่วนประกอบอื่น ๆ พร้อมหมดแล้วแต่ ASRock ไม่ได้เดินสายไว้ แต่ถ้าเคอร์เนลบอกว่ามี ECC ก็น่าจะถูกต้อง
ไม่อย่างนั้นก็คืนบอร์ดเป็นของเสียแล้วไปใช้ผู้ผลิตรายอื่นก็ได้
แต่เสียดายที่ไม่มีบอร์ด mini-ITX/mATX X670E รุ่นนั้นมีแค่ ASUS
dmidecodeรายงานความกว้างข้อมูลเป็น 128 บิต ไม่ใช่ 72 บิต แต่ก็รายงานการแก้ไขแบบหลายบิตด้วย ไม่ใช่แค่บิตเดียวกับ UDIMM บนบอร์ด Intel เช่น Supermicro+Xeon เคยชินกับ 72 บิต แต่ข้อมูลนี้ดูเหมือนจะขึ้นกับวิธีรายงานของคอนโทรลเลอร์หน่วยความจำและเมนบอร์ด มากกว่าการรองรับจริงของฮาร์ดแวร์
ถึงอย่างนั้น EDAC ก็ทำงาน มีไดรเวอร์ที่ถูกต้องถูกลงทะเบียน และบางครั้งได้รับคำเตือนจาก EDAC/RAS ว่าข้อผิดพลาดที่แก้ไขได้ถูกแก้ไขจริงแล้ว ดังนั้นถือว่าน่าจะสรุปได้แล้ว
ออกนอกประเด็นเล็กน้อย แต่ การรองรับ ECC ที่ทำงานได้บนแพลตฟอร์ม AM4 รุ่นเก่าและคอร์ Zen3 APU มีหน้าตาประมาณนี้ และในระบบของผมมีอยู่แน่นอน
เป็นชุด ASRock B550M-ITX/ac กับ AMD Ryzen 5 PRO 5650G และตอนก่อนหน้านี้ที่ใช้ Ryzen 5 3600 กับ GPU แยกก็ทำงานเหมือนกัน
หากต้องการตรวจจับและบันทึกกิจกรรม ECC บน GNU/Linux รุ่นใหม่ ต้องเปิดใช้งานบริการ
rasdaemonบริการนี้จะแปลความหมาย MCE และข้อผิดพลาดอื่น ๆ ที่เกี่ยวกับฮาร์ดแวร์ แล้วบันทึกลงฐานข้อมูล และเอาต์พุตที่ตรวจสอบด้านบนก็เป็นผลลัพธ์จากสิ่งนั้น
แต่พอมาคิดอีกที ความถี่ค่อนข้างสูง จึงอาจเป็นไปได้ว่าโมดูลหน่วยความจำเสีย โดยเฉพาะอย่างยิ่งเพราะเป็นโมดูลเดิมและที่อยู่เดิมทุกครั้ง
https://www.asus.com/global/support/FAQ/1045186/
dmidecodeแสดงความกว้าง 72 บิต และdmesg | grep -i EDACก็แสดงข้อมูลจำนวนมากที่ดูเหมือนว่า ECC เปิดอยู่แต่เอาต์พุตของคำสั่งดังกล่าวกลับว่างเปล่า และมีเพียง “No Memory errors”, “No PCIe AER errors”, “No Extlog errors”, “No MCE errors” เท่านั้น
สงสัยว่าต้องเปิดอะไรบางอย่างเพื่อให้มีการบันทึกข้อผิดพลาดหรือไม่ หรือถูก
dmidecodeกับdmesgหลอกกันแน่เป็นบทความที่ดี ผมเองก็ใช้ ECC RAM บนบอร์ด Threadripper ของผมอยู่เหมือนกัน
สิ่งหนึ่งที่ทีมปฏิบัติการของ Blekko พบในบอร์ด Intel คือ ต้องบอกบอร์ดอย่างชัดเจนให้รายงานข้อผิดพลาดที่แก้ไขได้จริง ๆ
ค่าเริ่มต้นคือ ถ้ามีข้อผิดพลาดที่กู้คืนไม่ได้ก็จะส่ง machine check แต่กรณีอื่น ๆ ก็ปล่อยผ่านไป
เท่าที่จำได้ ในระบบ 192GB ราว 1,600 เครื่อง เราเห็นข้อผิดพลาดที่แก้ไขได้ประมาณสัปดาห์ละครั้ง
ตลอด 6 ปีไม่เคยจำได้ว่ามีข้อผิดพลาดที่กู้คืนไม่ได้เลย ถือว่าค่อนข้างดี
เรามีเครื่องขนาดใกล้เคียงกันและปริมาณ RAM เฉลี่ยใกล้เคียงกัน และก็มีข้อผิดพลาดที่กู้คืนไม่ได้เป็นครั้งคราว น่าจะปีละครั้งหรือสองครั้ง จนเกิดเป็นนโยบายขึ้นมา
ถ้าเกิดขึ้นแค่ครั้งเดียวก็เฝ้าดูไว้ ถ้าไม่ล้มเหลวซ้ำในเร็ว ๆ นี้ก็ถือว่าโอเค แต่ถ้าล้มเหลวซ้ำในเร็ว ๆ นี้ก็เปลี่ยน RAM
บอร์ดเซิร์ฟเวอร์ที่ดีกว่ายังบอกด้วย LED ได้ด้วยว่าต้องเปลี่ยนโมดูล RAM ตัวไหน
ส่วนข้อผิดพลาดที่แก้ไขได้ เราจะไม่เปลี่ยนจนกว่าจำนวนจะสูงพอสมควร และมีระบบที่มีข้อผิดพลาดวันละครั้งสองครั้งแต่ก็ทำงานได้ดีอยู่นาน
กลับกันก็มีระบบที่เป็น 0 อยู่นาน แล้วเกิดขึ้นเล็กน้อยไม่กี่วัน ก่อนตัวเลขจะกระโดดขึ้นมาก
มีระบบหนึ่งขึ้นไปถึงหลายพันครั้งต่อชั่วโมง จนใช้งานไม่ได้เพราะค่าใช้จ่ายในการจัดการ machine check exception แต่รอบการรายงานคือ 1 ชั่วโมง จึงไม่รู้สาเหตุก่อนรายงานครั้งถัดไป
ตอนนี้ใช้ Ryzen 3700X กับเมนบอร์ด ASUS TUF Gaming X570 อยู่ และต้องการ ประสิทธิภาพคอร์เดี่ยว กับความเร็ว NVMe/ดิสก์มากขึ้น
ตอนนี้ใช้งาน GPU คู่, M.2 NVMe 2 ตัว และ SATA 6 ตัวอยู่แล้ว
กำลังพิจารณาอัปเกรดปลายปี เพราะเรื่อง PCIe lanes เลยเคยคิดถึง Threadripper แวบหนึ่ง แต่ Zen4 Threadripper ยังไม่มีและราคาน่าจะสูงมาก
ทางเลือกคืออัปเป็น Ryzen 5900X แล้วคงส่วนที่เหลือไว้ หรือจ่ายเพิ่มไป AM5 Ryzen กับเมนบอร์ดใหม่
ดู Intel แล้วเหมือนกัน แต่พอเห็นว่า PCIe lanes จบที่ 20 เลนก็เอนเอียงไปทางตัดออก
อยากเพิ่มอะแดปเตอร์ 10Gb เพื่อย้ายดิสก์จานหมุนบางส่วนออกไปข้างนอก เลยต้องการ PCIe lanes มากขึ้น
ประสิทธิภาพมัลติคอร์ของ 3700X เพียงพอแล้ว และถ้าจะซื้อเมนบอร์ดใหม่ ก็อยากได้อย่างน้อย NVMe 2 ตัวทำ mirror เพื่อความเร็ว และพอร์ต SATA 6 พอร์ตขึ้นไป
ฝั่ง AMD ผมไม่รู้ แต่บอร์ด Intel ส่วนใหญ่มักมีสล็อต M.2 แค่ช่องเดียวที่ต่อเข้ากับ CPU โดยตรง ส่วนอีกสามช่องผ่านชิปเซ็ต ทำให้ต้องแชร์คอขวดกับการ์ด Ethernet 10Gb ด้วย
สุดท้ายการซื้อบอร์ดที่รองรับ PCIe 5.0 กับ SSD เดี่ยวที่มีขนาดใหญ่พอเร็วกว่าเยอะ และทั้ง IOPS รวมกับ throughput ก็สูงกว่าอาร์เรย์ RAID 0 เดิม
5900X ไม่ได้เป็นอัปเกรดที่ใหญ่ขนาดนั้น
เป็นกรณีอ้างอิง Hetzner ให้บริการเซิร์ฟเวอร์ Ryzen 7000 CPU พร้อม ECC RAM มาตั้งแต่ไม่กี่เดือนก่อนแล้ว
https://www.hetzner.com/dedicated-rootserver/matrix-ax
AX52 มี ECC RAM เป็นตัวเลือกอัปเกรด ส่วน AX102 มี ECC มาเป็นค่าเริ่มต้น
ไม่น่าจะให้บริการ ECC ที่ใช้งานจริงไม่ได้หรอก
ดังนั้นน่าจะรับประกัน การรองรับ ECC ได้แน่นอนตั้งแต่ต้นจนจบ
หวังว่านักนิติบัญญัติจะตาสว่างแล้วทำให้ ECC เป็นข้อบังคับ
น่ากังวลที่การประมวลผลส่วนใหญ่เกิดขึ้นบนระบบ Non-ECC ที่เปราะบาง
นี่เป็นรูปแบบการแบ่งตลาดโดยเจตนาที่เละเทะมาก
จะคาดหวังให้คนพวกนั้นออกกฎหมายเรื่อง ECC ได้ยังไง
แต่ระบบ Intel ของผมใช้ RAM Non-ECC 64GB เปิดวันละครึ่งวัน และ hibernate ตอนกลางคืน รัน 3D CAD, Photoshop, VS Code ที่ติดตั้งส่วนขยายเต็มไปหมด, คอนเทนเนอร์ WSL2 Docker ต่าง ๆ ก็แทบไม่เห็นข้อผิดพลาด
ไม่มีการแครชหรือจอฟ้าด้วย
อยากรู้ว่าจริง ๆ แล้วควรคาดหวังอะไรจาก ข้อผิดพลาด bit flip กันแน่ ถ้าในสถานการณ์ที่ใช้ RAM 64GB แทบเต็มแล้วเกิด bit flip แบบบิตเดียวบ่อยขนาดนั้น มันน่าจะโผล่ให้เห็นไม่ทางใดก็ทางหนึ่ง
ไม่กล้าพอที่จะชอร์ตพินทางกายภาพ และก็ไม่มีความอดทนพอจะรอ DDR5 link training ครั้งละหลายนาทีเพื่อค่อย ๆ โอเวอร์คล็อก RAM
ดังนั้นแค่เห็น memory controller รายงานว่าเปิด ECC อยู่ก็พอใจแล้ว
แต่ถ้าใช้ลมอุ่นจากไดร์เป่าผมเป่าใส่ RAM ล่ะ? เคยเห็นคนใช้เทคนิคแบบนั้นเพื่อสร้างข้อผิดพลาดมาก่อน
https://hackaday.com/2022/01/29/blast-chips-with-this-bbq-li...
https://hackaday.com/tag/emfi/
ไม่แนะนำสำหรับการใช้งานจริง แต่ใช้ได้เวลาหาขีดจำกัดของหน่วยความจำหรือสร้างข้อผิดพลาด
บนระบบ I7-4770K ของผมที่ไม่ได้โอเวอร์คล็อก ข้อผิดพลาดจะแสดงออกมา แต่บอร์ด Supermicro X10 รุ่นเก่าดูเหมือนจะไม่ตรวจพบข้อผิดพลาดแม้รันการทดสอบ Rowhammer ไปเรื่อย ๆ อย่างไม่มีกำหนด
อย่างไรก็ตาม หากระบบรุ่นใหม่ถูกออกแบบมาให้ไม่เสี่ยงต่อการโจมตี Rowhammer วิธีนี้ก็อาจใช้ไม่ได้
RAM ของ Raspberry Pi 4B และ CM4 เป็นที่รู้กันว่าใช้ ECC RAM แต่ไม่ใช่ ECC ในความหมายที่พูดถึงตรงนี้
มันเป็น on-die ECC เพื่อปรับปรุง yield ของชิป และข้อผิดพลาด ECC จะถูกแก้ไขโดยไม่ถูกรายงานผ่านฮาร์ดแวร์
ข้อผิดพลาด ECC ที่แก้ไขไม่ได้ก็น่าจะถูกอ่านออกมาเป็นข้อมูลผิด ๆ ไปเลย
สงสัยเหมือนกันว่าโมดูล RAM รุ่นใหม่ ๆ ใช้ชิปที่มี on-die ECC ด้วยหรือไม่
link training ปิดได้ใน BIOS จึงหาการตั้งค่าแบนด์วิดท์ที่อยู่ตรงเส้นขอบได้อย่างรวดเร็ว
ผลลัพธ์อาจไม่ได้ทำซ้ำได้เป๊ะมากนัก แต่ก็ไม่สำคัญ
เมนบอร์ด ASUS AM5 บางรุ่น หรืออาจจะทุกรุ่น มีการรองรับ ECC อย่างเป็นทางการ
รุ่นที่เพิ่งตรวจดูมีระบุไว้ทั้งในคู่มือบอร์ดและคู่มือ BIOS
หนึ่งในการตั้งค่า BIOS ที่เกี่ยวข้องมีค่าเริ่มต้นเป็น Auto แต่ขัดกับสัญชาตญาณคือในสถานะนี้มันจะถูกปิดใช้งาน จึงต้องเปลี่ยนค่า
การรายงาน ECC ของโปรเซสเซอร์เหล่านี้ถูกใส่เข้ามาใน Linux 6.5 ดังนั้นผู้ใช้ Debian Stable ต้องรอให้เข้ามาใน Backports หรือไม่ก็ต้องออกนอกเส้นทางมาตรฐาน
https://www.phoronix.com/news/AMD-EDAC-Ryzen-7000-Series
ถ้าดูค่าที่ถูกนำไปใช้จริงได้ก็ยังพอรับได้ แต่เก้าครั้งในสิบครั้งมันไม่ชัดเจน
มีข่าวลือว่า AGESA เวอร์ชันเก่าบางตัวมีบั๊กที่ทำให้ชิปเซ็ตไม่สามารถตรวจพบและใช้งาน ECC RAM ได้อย่างถูกต้อง
ทั้งที่ว่ากันว่าชิปเซ็ตนั้นควรจะรองรับ
สำหรับเมนบอร์ดที่กำลังพิจารณา ควรตรวจสอบว่ามีอัปเดตเฟิร์มแวร์ที่มีอย่างน้อย AGESA 1.0.0.5 patch C หรือไม่
https://www.reddit.com/r/truenas/comments/10lqofy/
AGESA เป็นส่วนหนึ่งของเฟิร์มแวร์ระบบ AMD ใช้เริ่มต้นคอมโพเนนต์หลักของระบบ: https://en.wikipedia.org/wiki/AGESA
ผมอัปเดตเป็น AGESA 1.0.0.7b ก่อนติดตั้ง ECC RAM
ไม่รู้มาก่อนว่า Ryzen 7000 series ไม่ได้ระบุการรองรับ ECC อย่างเป็นทางการ
เช่นไลน์ ASRock Rack รองรับ: https://www.asrockrack.com/general/productdetail.asp?Model=1...
เมนบอร์ด ASUS ตัวนี้ก็อ้างว่ารองรับ ECC: https://www.asus.com/us/motherboards-components/motherboards...
ทั้งสองรุ่นยังไม่ออกมาตอนที่ผมซื้อเมนบอร์ด AM5 ตัวแรก ตอนนั้นเพิ่งเปิดตัว และตัวเลขประสิทธิภาพดีมากจนผมรีบจัดตั้งแต่แรก
CPU Ryzen 7000 series ทุกรุ่นที่วางขายอยู่ตอนนี้รองรับ ECC อย่างเป็นทางการ แต่ก็จำเป็นต้องมี การรองรับจากเมนบอร์ด ด้วย
การรองรับ ECC แบบมีเงื่อนไขเช่นนี้มีอยู่ใน CPU สำหรับผู้บริโภคของ AMD ย้อนกลับไปถึง Athlon 64 แต่ผมคิดว่านี่เป็นครั้งแรกที่เห็นระบุไว้ในเอกสารการตลาดของ AMD สำหรับ Ryzen 7000 series
สิ่งที่ผู้เขียนพูดถึงคือการที่เอกสารของเมนบอร์ด ASRock ไม่มีการกล่าวถึงการรองรับ ECC แล้ว
เพราะ ASRock เคยระบุการรองรับ ECC ในเมนบอร์ด Ryzen รุ่นก่อน ๆ จึงเป็นการเปลี่ยนแปลงที่สะดุดตา
ตัวอย่างหน้าสเปก Ryzen 5 7600: https://www.amd.com/en/product/12756#:~:text=ECC%20Support,R...)
แถมยังสับสนกับ on-chip ECC ที่ DDR5 ทุกตัวใช้ด้วย
DDR5 ต้องมี on-chip ECC เพื่อแก้ไขข้อผิดพลาดที่เกิดขึ้นระหว่างการทำงานปกติ แต่มันไม่ใช่ ECC ที่ปกป้องข้อมูลที่ส่งผ่านบัสหน่วยความจำไปยัง CPU