2 คะแนน โดย GN⁺ 2023-10-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • มีการยืนยันอีกครั้งว่า รองรับ 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 และใน Linux ryzen_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 จะแสดงค่าที่เกี่ยวข้องกับ ECC
    • Error Correction Type: Multi-bit ECC
    • Total Width: 72 bits
    • Data Width: 64 bits
  • ค่า Total Width 72 bits เป็นสัญญาณที่สังเกตได้ชัด
    • หากเป็น RAM ที่ไม่ใช่ ECC จะแสดงเป็น 64 บิต
    • ECC RAM แบบ 64 บิตจะมี อีก 8 บิต เพิ่มเข้ามาสำหรับข้อมูล parity
  • EDAC ของ Linux kernel ก็แสดงว่าเปิดใช้งานอยู่เช่นกัน
    • EDAC MC: Ver: 3.0.0
    • EDAC MC0: Giving out device to module amd64_edac
    • EDAC 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 เหมือนกันทั้งสองแชนเนล
  • จุดสำคัญคือ 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: 0x40000000
    • 0x00150df4: 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
  • umc_ecc_enabled จะตรวจสอบบิต UMC_ECC_ENABLED ของ umc_cap_hi
    • UMC_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 ความคิดเห็น

 
GN⁺ 2023-10-10
ความคิดเห็นจาก Hacker News
  • ต้องอัปเกรดโปรเซสเซอร์ และสนใจ การจัดชุด ECC RAM มาก
    เคยเห็นโพสต์ใน /r/AMD ที่มีคนสองคนถกกันว่าโปรเซสเซอร์หรือเมนบอร์ดของ AMD รองรับ ECC จริงหรือไม่ แต่ไม่รู้ว่าใครถูก: https://www.reddit.com/r/Amd/comments/lzxqod/list_of_am4_mot...
    เลยสงสัยว่าบทความนี้ยืนยันได้หรือไม่ว่าชุด AMD+ASRock เป็น ECC RAM จริง ๆ

    • ตอนซื้อเมนบอร์ด ต้องตรวจสอบว่าสเปกระบุ การรองรับ ECC ไว้หรือไม่
      โดยปกติจะเขียนไว้ในส่วน “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 ดี
    • คำว่า “รองรับ” ใน ECC อาจมีได้หลายระดับ
      ระดับ 0 คือไม่รองรับเลย ถึงขั้นเสียบ ECC RAM แล้วบูตไม่ขึ้น, ระดับ 1 คือเสียบได้แต่ไม่ใช้ฟังก์ชัน ECC, ระดับ 2 คือมีวงจรแต่ผู้ผลิตเมนบอร์ดยังไม่ได้ตรวจสอบยืนยันการตรวจจับและแก้ไขข้อผิดพลาด, ระดับ 3 คือมีฟังก์ชัน ECC และผู้ผลิตตรวจสอบยืนยันแล้ว
      ถ้าเป็นบอร์ดระดับเซิร์ฟเวอร์อย่าง Supermicro ก็คาดหวังระดับ 3 ได้
      เมื่อเห็นว่าโปรเซสเซอร์ AMD ระบุ “ECC supported” ก็ยากจะรู้ว่าเป็นระดับไหน แต่ถ้า Intel บอกว่า CPU/ชิปเซ็ตรองรับ ECC ก็ถือได้ว่ารองรับจริง
    • ไม่แน่ใจเรื่อง ASRock แต่บอร์ด ASUS X570 ทำงานกับ ECC ได้แน่นอน
      เคยตั้งใจใช้ ECC DIMM ที่เสียเพื่อสร้างทั้งข้อผิดพลาดที่แก้ไขได้และแก้ไขไม่ได้ภายในเวลาไม่นาน
      ดูไม่น่าเป็นไปได้ที่ส่วนประกอบอื่น ๆ พร้อมหมดแล้วแต่ ASRock ไม่ได้เดินสายไว้ แต่ถ้าเคอร์เนลบอกว่ามี ECC ก็น่าจะถูกต้อง
      ไม่อย่างนั้นก็คืนบอร์ดเป็นของเสียแล้วไปใช้ผู้ผลิตรายอื่นก็ได้
    • กำลังใช้ ECC บน บอร์ด ASRock X570 และ B550 อยู่ และ ASRock ก็อนุญาตให้ใช้ unbuffered ECC มานานพอสมควรแล้ว
      แต่เสียดายที่ไม่มีบอร์ด mini-ITX/mATX X670E รุ่นนั้นมีแค่ ASUS
    • ใช้ชุด ASRock X570 PG 4S + Ryzen 5 2600 + Kingston 32GB 2666 ECC อยู่ และในรายการรองรับ CPU/หน่วยความจำของบอร์ดนี้ก็ระบุว่า ECC ทำงานได้กับชุดนี้
      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 และข้อผิดพลาดอื่น ๆ ที่เกี่ยวกับฮาร์ดแวร์ แล้วบันทึกลงฐานข้อมูล และเอาต์พุตที่ตรวจสอบด้านบนก็เป็นผลลัพธ์จากสิ่งนั้น

    • ด้วยความถี่ของข้อผิดพลาดระดับนี้ คงรู้สึกได้ว่าเชื่อถือข้อมูลที่ออกมาจาก คอมพิวเตอร์ที่ไม่มี ECC ได้ยาก
      แต่พอมาคิดอีกที ความถี่ค่อนข้างสูง จึงอาจเป็นไปได้ว่าโมดูลหน่วยความจำเสีย โดยเฉพาะอย่างยิ่งเพราะเป็นโมดูลเดิมและที่อยู่เดิมทุกครั้ง
    • APU ถูกระบุชัดเจนว่าไม่อยู่ในกลุ่มที่รองรับ ECC ยกเว้น PRO SKU
      https://www.asus.com/global/support/FAQ/1045186/
    • ติดตั้ง ECC RAM ในระบบ Gigabyte B550I แล้ว 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 พอร์ตขึ้นไป

    • เคยลองใช้ NVMe สองตัวแบบ mirroring แล้ว แต่มีจุดที่ต้องระวังหลายอย่างถ้าจะให้ได้ประสิทธิภาพสูงสุด
      ฝั่ง AMD ผมไม่รู้ แต่บอร์ด Intel ส่วนใหญ่มักมีสล็อต M.2 แค่ช่องเดียวที่ต่อเข้ากับ CPU โดยตรง ส่วนอีกสามช่องผ่านชิปเซ็ต ทำให้ต้องแชร์คอขวดกับการ์ด Ethernet 10Gb ด้วย
      สุดท้ายการซื้อบอร์ดที่รองรับ PCIe 5.0 กับ SSD เดี่ยวที่มีขนาดใหญ่พอเร็วกว่าเยอะ และทั้ง IOPS รวมกับ throughput ก็สูงกว่าอาร์เรย์ RAID 0 เดิม
    • อยากรู้ว่าใน workload แบบไหนที่ ความเร็ว NVMe กลายเป็นคอขวด
    • ใช้ 5900X อยู่ และรู้สึกว่าน่าจะรอแล้วซื้อ 5800X3D ดีกว่า
    • ถ้าต้องการมากกว่านั้น ไป 5950X ที่ราคาอยู่ราว 4/3 แต่จำนวนคอร์เป็นสองเท่า หรือพิจารณา CPU 3D cache เพื่อ Factorio UPS น่าจะดีกว่า
      5900X ไม่ได้เป็นอัปเกรดที่ใหญ่ขนาดนั้น
  • เป็นกรณีอ้างอิง Hetzner ให้บริการเซิร์ฟเวอร์ Ryzen 7000 CPU พร้อม ECC RAM มาตั้งแต่ไม่กี่เดือนก่อนแล้ว
    https://www.hetzner.com/dedicated-rootserver/matrix-ax
    AX52 มี ECC RAM เป็นตัวเลือกอัปเกรด ส่วน AX102 มี ECC มาเป็นค่าเริ่มต้น
    ไม่น่าจะให้บริการ ECC ที่ใช้งานจริงไม่ได้หรอก

    • เท่าที่รู้ Hetzner ทำเมนบอร์ดเองหรือว่าจ้างให้ผลิต
      ดังนั้นน่าจะรับประกัน การรองรับ ECC ได้แน่นอนตั้งแต่ต้นจนจบ
  • หวังว่านักนิติบัญญัติจะตาสว่างแล้วทำให้ ECC เป็นข้อบังคับ
    น่ากังวลที่การประมวลผลส่วนใหญ่เกิดขึ้นบนระบบ Non-ECC ที่เปราะบาง
    นี่เป็นรูปแบบการแบ่งตลาดโดยเจตนาที่เละเทะมาก

    • คงไม่เคยเห็นการไต่สวนที่สมาชิกรัฐสภาเรียกคนอย่าง Zuck มาแล้วถามวิธีใช้โทรศัพท์มือถือสินะ
      จะคาดหวังให้คนพวกนั้นออกกฎหมายเรื่อง ECC ได้ยังไง
    • ถ้าจะบอกว่า ระบบ Non-ECC เปราะบาง ทั้งที่มันทำงานได้สมบูรณ์ดีตลอด 99.9999% ของเวลา ก็คงเรียกว่าเปราะบางได้ยาก
    • ได้ยินบ่อยว่าเครื่อง Non-ECC เปราะบางอย่างสิ้นเชิง และถ้าคำนวณดูเหมือนว่า bit flip ควรจะเกิดขึ้นตลอดเวลา
      แต่ระบบ 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/
    • ถ้าเอาแบบสมจริงกว่านั้น บนระบบที่กำลังทำงานอยู่สามารถปรับ การโอเวอร์คล็อกหน่วยความจำ บางส่วนแบบเรียลไทม์ได้ และไม่ต้องทำ link training ด้วย
      ไม่แนะนำสำหรับการใช้งานจริง แต่ใช้ได้เวลาหาขีดจำกัดของหน่วยความจำหรือสร้างข้อผิดพลาด
    • จะใช้ การทดสอบ Rowhammer ตรวจได้ไหมว่าระบบมี ECC RAM หรือเปล่า?
      บนระบบ I7-4770K ของผมที่ไม่ได้โอเวอร์คล็อก ข้อผิดพลาดจะแสดงออกมา แต่บอร์ด Supermicro X10 รุ่นเก่าดูเหมือนจะไม่ตรวจพบข้อผิดพลาดแม้รันการทดสอบ Rowhammer ไปเรื่อย ๆ อย่างไม่มีกำหนด
      อย่างไรก็ตาม หากระบบรุ่นใหม่ถูกออกแบบมาให้ไม่เสี่ยงต่อการโจมตี Rowhammer วิธีนี้ก็อาจใช้ไม่ได้
      RAM ของ Raspberry Pi 4B และ CM4 เป็นที่รู้กันว่าใช้ ECC RAM แต่ไม่ใช่ ECC ในความหมายที่พูดถึงตรงนี้
      มันเป็น on-die ECC เพื่อปรับปรุง yield ของชิป และข้อผิดพลาด ECC จะถูกแก้ไขโดยไม่ถูกรายงานผ่านฮาร์ดแวร์
      ข้อผิดพลาด ECC ที่แก้ไขไม่ได้ก็น่าจะถูกอ่านออกมาเป็นข้อมูลผิด ๆ ไปเลย
      สงสัยเหมือนกันว่าโมดูล RAM รุ่นใหม่ ๆ ใช้ชิปที่มี on-die ECC ด้วยหรือไม่
    • แค่เอาโทรศัพท์มือถือไปไว้ใกล้ DIMM ก็อาจทำให้เกิดข้อผิดพลาดได้ไหม? ดูน่าจะลองได้ง่าย
    • การทำให้มีโอกาสต้อง reflow BGA บน PCBA I/O ความเร็วสูงที่จะรันต่อเนื่อง 10 ปี ดูเสี่ยงกว่าการชอร์ตพินคู่หนึ่งที่มีไดโอดป้องกันไว้
      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

    • เกลียด การตั้งค่า Auto ใน BIOS มาก
      ถ้าดูค่าที่ถูกนำไปใช้จริงได้ก็ยังพอรับได้ แต่เก้าครั้งในสิบครั้งมันไม่ชัดเจน
  • มีข่าวลือว่า 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

    • ดูจากเธรดในฟอรัม ASRock แล้วฟังดูน่าจะจริง
      ผมอัปเดตเป็น AGESA 1.0.0.7b ก่อนติดตั้ง ECC RAM
  • ไม่รู้มาก่อนว่า Ryzen 7000 series ไม่ได้ระบุการรองรับ ECC อย่างเป็นทางการ

    • หลังจากโพสต์บทความนี้ จึงได้รู้ว่ามี เมนบอร์ด AM5 ที่รองรับ 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