อ่าน 10 นาที
หน่วยความจำ ECC
หน่วยความจำรหัสแก้ไขข้อผิดพลาด ( หน่วยความจำ ECC ) เป็นประเภทของ หน่วยเก็บข้อมูลคอมพิวเตอร์ ที่ใช้ รหัสแก้ไขข้อผิดพลาด [ a ] (ECC) เพื่อตรวจจับและแก้ไข ความเสียหายของข้อมูล n...
หน่วยความจำ ECC
หน่วยความจำรหัสแก้ไขข้อผิดพลาด ( หน่วยความจำ ECC ) เป็นประเภทของหน่วยเก็บข้อมูลคอมพิวเตอร์ที่ใช้รหัสแก้ไขข้อผิดพลาด[ a ] (ECC) เพื่อตรวจจับและแก้ไขความเสียหายของข้อมูลnบิตที่เกิดขึ้นในหน่วยความจำ
โดยทั่วไป หน่วยความจำ ECC จะรักษาระบบหน่วยความจำที่ทนต่อข้อผิดพลาดระดับบิตเดียว: ข้อมูลที่อ่านจากแต่ละเวิร์ดจะเหมือนกับข้อมูลที่เขียนลงไปเสมอ แม้ว่าบิตใดบิตหนึ่งที่จัดเก็บไว้จริงจะเปลี่ยนไปอยู่ในสถานะที่ไม่ถูกต้องก็ตาม หน่วยความจำที่ไม่ใช่ ECC ส่วนใหญ่ไม่สามารถตรวจจับข้อผิดพลาดได้ แม้ว่าหน่วยความจำที่ไม่ใช่ ECC บางประเภทที่มีการรองรับพาริตีจะช่วยให้ตรวจจับได้ แต่ไม่สามารถแก้ไขได้
หน่วยความจำ ECC ถูกใช้ในคอมพิวเตอร์ส่วนใหญ่ที่ไม่สามารถยอมรับความเสียหายของข้อมูลได้ เช่น แอปพลิเคชันควบคุมทางอุตสาหกรรม ฐานข้อมูลที่สำคัญ และแคชหน่วยความจำโครงสร้างพื้นฐาน
พื้นหลัง: ข้อผิดพลาดของหน่วยความจำ
แนวคิด
รหัสแก้ไขข้อผิดพลาด (ECC) ช่วยป้องกันความเสียหายของข้อมูลที่ตรวจไม่พบ และใช้ในคอมพิวเตอร์ที่ไม่สามารถยอมรับความเสียหายดังกล่าวได้ เช่น แอปพลิเคชันการคำนวณทางวิทยาศาสตร์และการเงิน หรือในฐานข้อมูลและเซิร์ฟเวอร์ไฟล์นอกจากนี้ ECC ยังสามารถลดจำนวนการหยุดทำงานในแอปพลิเคชันเซิร์ฟเวอร์แบบผู้ใช้หลายคนและระบบที่มีความพร้อมใช้งานสูงสุดได้อีกด้วย
การรบกวนทางไฟฟ้าหรือแม่เหล็กภายในระบบคอมพิวเตอร์อาจทำให้บิตเดียวของหน่วยความจำเข้าถึงแบบสุ่มไดนามิก ( DRAM ) เปลี่ยนไปเป็นสถานะตรงข้ามโดยไม่คาดคิด ในตอนแรกคิดว่าสาเหตุหลักมาจากอนุภาคอัลฟาที่ปล่อยออกมาจากสารปนเปื้อนในวัสดุบรรจุภัณฑ์ของชิป แต่การวิจัยแสดงให้เห็นว่าข้อผิดพลาดแบบอ่อน ที่เกิดขึ้นเพียงครั้งเดียวส่วนใหญ่ ในชิป DRAM เกิดจากรังสีพื้นหลังโดยเฉพาะนิวตรอนจาก อนุภาคทุติย ภูมิของรังสีคอสมิกซึ่งอาจเปลี่ยนแปลงเนื้อหาของเซลล์หน่วยความจำ หนึ่งเซลล์หรือมากกว่า หรือรบกวนวงจรที่ใช้ในการอ่านหรือเขียนข้อมูล[ 2 ]ดังนั้น อัตราข้อผิดพลาดจึงเพิ่มขึ้นอย่างรวดเร็วเมื่อระดับความสูงเพิ่มขึ้น ตัวอย่างเช่น เมื่อเทียบกับระดับน้ำทะเล อัตราการไหลของนิวตรอนจะสูงกว่า 3.5 เท่าที่ระดับความสูง 1.5 กม. และสูงกว่า 300 เท่าที่ระดับความสูง 10–12 กม. (ระดับความสูงในการบินของเครื่องบินพาณิชย์) [ 3 ]ด้วยเหตุนี้ ระบบที่ทำงานที่ระดับความสูงจึงต้องมีข้อกำหนดพิเศษเพื่อความน่าเชื่อถือ
ตัวอย่างเช่น ยานอวกาศCassini–Huygensที่ปล่อยขึ้นสู่อวกาศในปี 1997 มีเครื่องบันทึกการบินที่เหมือนกันสองเครื่อง แต่ละเครื่องมีหน่วยความจำ 2.5 กิกะบิตในรูปแบบของอาร์เรย์ของชิป DRAM เชิงพาณิชย์ เนื่องจากมี ฟังก์ชัน EDAC ในตัว ระบบโทรมาตรทางวิศวกรรมของยานอวกาศจึงรายงานจำนวนข้อผิดพลาดแบบบิตเดียวต่อคำ (ที่แก้ไขได้) และข้อผิดพลาดแบบสองบิตต่อคำ (ที่แก้ไขไม่ได้) ในช่วง 2.5 ปีแรกของการบิน ยานอวกาศรายงานอัตราข้อผิดพลาดแบบบิตเดียวที่เกือบจะคงที่ประมาณ 280 ข้อผิดพลาดต่อวัน อย่างไรก็ตาม ในวันที่ 6 พฤศจิกายน 1997 ในเดือนแรกที่อยู่ในอวกาศ จำนวนข้อผิดพลาดเพิ่มขึ้นมากกว่าสี่เท่าในวันนั้นวันเดียว ซึ่งเป็นผลมาจากเหตุการณ์อนุภาคจากดวงอาทิตย์ที่ตรวจพบโดยดาวเทียมGOES 9 [ 4 ]
มีข้อกังวลบางประการว่าเมื่อความหนาแน่นของ DRAM เพิ่มขึ้นเรื่อยๆ และส่วนประกอบบนชิปมีขนาดเล็ลง ในขณะที่แรงดันไฟฟ้าในการทำงานลดลงอย่างต่อเนื่อง ชิป DRAM จะได้รับผลกระทบจากรังสีดังกล่าวบ่อยขึ้น เนื่องจากอนุภาคพลังงานต่ำจะสามารถเปลี่ยนแปลงสถานะของเซลล์หน่วยความจำได้[ 3 ]ในทางกลับกัน เซลล์ที่มีขนาดเล็กกว่าจะทำให้เป็นเป้าหมายที่มีขนาดเล็กกว่า และการเปลี่ยนไปใช้เทคโนโลยีเช่นSOIอาจทำให้เซลล์แต่ละเซลล์มีความไวต่อรังสีน้อยลง และสามารถต่อต้านหรือแม้แต่พลิกกลับแนวโน้มนี้ได้ การศึกษาล่าสุด[ 5 ]แสดงให้เห็นว่าความผิดพลาดจากเหตุการณ์เดียวเนื่องจากรังสีคอสมิกได้ลดลงอย่างมากเมื่อพิจารณาเรขาคณิตของกระบวนการ และข้อกังวลก่อนหน้านี้เกี่ยวกับอัตราความผิดพลาดของเซลล์บิตที่เพิ่มขึ้นนั้นไม่มีมูลความจริง
อัตราความผิดพลาดและผลที่ตามมาในโลกแห่งความเป็นจริง
งานวิจัยที่ตีพิมพ์ระหว่างปี 2007 ถึง 2009 แสดงให้เห็นอัตราความผิดพลาดที่แตกต่างกันอย่างมาก โดยมีความแตกต่างกันมากกว่า 7 ระดับ ตั้งแต่ข้อผิดพลาด 10 −10 ครั้ง /(บิต·ชั่วโมง)หรือประมาณหนึ่งบิตผิดพลาดต่อชั่วโมงต่อกิกะไบต์ของหน่วยความจำข้อผิดพลาด 10 −17 /(บิต·ชั่วโมง)ประมาณหนึ่งบิตผิดพลาดต่อพันปีต่อกิกะไบต์ของหน่วยความจำ[ 5 ] [ 6 ] [ 7 ]การศึกษาขนาดใหญ่ที่อิงจาก เซิร์ฟเวอร์จำนวนมากของ Googleได้ถูกนำเสนอในการประชุม SIGMETRICS/Performance '09 [ 6 ]อัตราข้อผิดพลาดที่พบจริงนั้นสูงกว่าการศึกษาขนาดเล็กหรือการศึกษาในห้องปฏิบัติการก่อนหน้านี้หลายเท่า โดยอยู่ระหว่าง 25,000 (2.5 × 10 −11 ข้อผิดพลาด/(บิต·ชั่วโมง) ) และ 70,000 (7.0 × 10 −11 ข้อผิดพลาด/(บิต·ชั่วโมง)หรือ 1 ข้อผิดพลาดบิตต่อกิกะไบต์ของ RAM ต่อ 1.8 ชั่วโมง) ข้อผิดพลาดต่อพันล้านชั่วโมงการใช้งานอุปกรณ์ต่อเมกะบิต มากกว่า 8% ของโมดูลหน่วยความจำ DIMM ได้รับผลกระทบจากข้อผิดพลาดในแต่ละปี
ผลที่ตามมาของข้อผิดพลาดหน่วยความจำนั้นขึ้นอยู่กับระบบ ในระบบที่ไม่มี ECC ข้อผิดพลาดอาจนำไปสู่การหยุดทำงานหรือความเสียหายของข้อมูล ในไซต์การผลิตขนาดใหญ่ ข้อผิดพลาดหน่วยความจำเป็นหนึ่งในสาเหตุฮาร์ดแวร์ที่พบบ่อยที่สุดที่ทำให้เครื่องหยุดทำงาน[ 6 ]ข้อผิดพลาดหน่วยความจำอาจทำให้เกิดช่องโหว่ด้านความปลอดภัย[ 6 ]ข้อผิดพลาดหน่วยความจำอาจไม่มีผลกระทบใดๆ หากมีการเปลี่ยนแปลงบิตที่ไม่ก่อให้เกิดการทำงานผิดปกติที่สังเกตได้หรือส่งผลกระทบต่อข้อมูลที่ใช้ในการคำนวณหรือบันทึกไว้ การศึกษาจำลองในปี 2010 แสดงให้เห็นว่าสำหรับเว็บเบราว์เซอร์ มีเพียงส่วนน้อยของข้อผิดพลาดหน่วยความจำเท่านั้นที่ทำให้ข้อมูลเสียหาย แม้ว่าเนื่องจากข้อผิดพลาดหน่วยความจำจำนวนมากเกิดขึ้นเป็นระยะๆ และมีความสัมพันธ์กัน ผลกระทบของข้อผิดพลาดหน่วยความจำจึงมากกว่าที่คาดไว้สำหรับข้อผิดพลาดแบบอ่อนที่เป็นอิสระ[ 8 ]
การทดสอบบางอย่างสรุปได้ว่าการแยก เซลล์หน่วยความจำ DRAMสามารถหลีกเลี่ยงได้ด้วยผลข้างเคียงที่ไม่ได้ตั้งใจจากการเข้าถึงเซลล์ที่อยู่ติดกันที่สร้างขึ้นเป็นพิเศษ ดังนั้น การเข้าถึงข้อมูลที่จัดเก็บใน DRAM ทำให้เซลล์หน่วยความจำรั่วไหลประจุและโต้ตอบทางไฟฟ้า อันเป็นผลมาจากความหนาแน่นของเซลล์สูงในหน่วยความจำสมัยใหม่ ทำให้เนื้อหาของแถวหน่วยความจำใกล้เคียงที่ไม่ได้ถูกระบุในการเข้าถึงหน่วยความจำดั้งเดิมเปลี่ยนแปลงไป ผลกระทบนี้เรียกว่าrow hammerและยังถูกนำไปใช้ในการโจมตีทางไซเบอร์เพื่อยกระดับสิทธิ์ บางอย่างอีก ด้วย[ 9 ] [ 10 ]
ตัวอย่างของข้อผิดพลาดเพียงบิตเดียวที่ระบบที่ไม่มีการตรวจสอบข้อผิดพลาดจะมองข้ามไป แต่จะทำให้เครื่องที่มีการตรวจสอบพาริตีหยุดทำงาน หรือได้รับการแก้ไขโดย ECC อย่างเงียบๆ คือ บิตเดียวติดอยู่ที่ 1 เนื่องจากชิปที่ชำรุด หรือเปลี่ยนเป็น 1 เนื่องจากรังสีพื้นหลังหรือรังสีคอสมิก เช่น เมื่อโหลดสเปรดชีตที่เก็บตัวเลขในรูปแบบ ASCII และอักขระ "8" (ค่าทศนิยม 56 ในการเข้ารหัส ASCII) ถูกเก็บไว้ในไบต์ที่มีบิตที่ติดอยู่ ณ ตำแหน่งบิตต่ำสุด จากนั้นมีการเปลี่ยนแปลงในสเปรดชีตและบันทึก ผลที่ได้คือ "8" (0011 100 0ในเลขฐานสอง) เปลี่ยนเป็น "9" (0011 100 1 ) อย่างเงียบๆ
โซลูชัน
มีการพัฒนาแนวทางต่างๆ มากมายเพื่อรับมือกับการเปลี่ยนแปลงบิตที่ไม่พึงประสงค์ รวมถึงการเขียนโปรแกรมที่คำนึงถึงภูมิคุ้มกันหน่วยความจำพาริตี RAMและหน่วยความจำ ECC
ปัญหานี้สามารถบรรเทาได้โดยการใช้โมดูล DRAM ที่มีบิตหน่วยความจำเพิ่มเติมและตัวควบคุมหน่วยความจำที่ใช้ประโยชน์จากบิตเหล่านี้ บิตเพิ่มเติมเหล่านี้ใช้สำหรับบันทึกพาริตีหรือใช้รหัสแก้ไขข้อผิดพลาด (ECC) พาริตีช่วยให้ตรวจจับข้อผิดพลาดแบบบิตเดียวได้ทั้งหมด (จริงๆ แล้วคือจำนวนบิตที่ผิดพลาดเป็นเลขคี่) แต่ไม่สามารถแก้ไขได้ ดังนั้นระบบจึงต้องดำเนินการต่อไป (เพียงแค่แจ้งปัญหา) หรือหยุดทำงาน รหัสแก้ไขข้อผิดพลาดช่วยให้แก้ไขข้อผิดพลาดได้มากขึ้น ปริมาณการแก้ไขข้อผิดพลาดขึ้นอยู่กับชนิดของหน่วยความจำที่ใช้
หน่วยความจำ DRAMอาจให้การป้องกันที่เพิ่มขึ้นจากข้อผิดพลาดแบบอ่อน (soft errors) โดยอาศัยรหัสแก้ไขข้อผิดพลาดหน่วยความจำแก้ไขข้อผิดพลาด ดังกล่าว หรือ ที่รู้จักกันในชื่อ หน่วยความจำที่ได้รับการป้องกันด้วย ECCหรือEDACนั้นเป็นที่ต้องการอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องการความทนทานต่อความผิดพลาดสูง เช่น เซิร์ฟเวอร์ รวมถึงแอปพลิเคชันในอวกาศลึกเนื่องจากมีการแผ่รังสี เพิ่ม ขึ้น
บางระบบยัง " ล้าง " หน่วยความจำด้วยการอ่านที่อยู่ทั้งหมดเป็นระยะ และเขียนเวอร์ชันที่แก้ไขแล้วกลับเข้าไปหากจำเป็น เพื่อลบข้อผิดพลาดแบบอ่อนที่สะสมมา
โครงการต่างๆ
ระบบย่อยหน่วยความจำสมัยใหม่สามารถส่งมอบความสมบูรณ์ของข้อมูลผ่านแผนการอย่างใดอย่างหนึ่งหรือมากกว่าดังต่อไปนี้: [ 11 ]
- โดยตัวควบคุมหน่วยความจำ: แผนการเหล่านี้ใช้ตัวควบคุมหน่วยความจำในการส่งหรือรับข้อมูลเพิ่มเติมไปยังชิป
- การแก้ไขข้อผิดพลาด แบบ Side-band ECC (SBECC) เป็นวิธีการแบบดั้งเดิมที่ใช้ในเซิร์ฟเวอร์ ECC จะถูกจัดเก็บไว้ในชิป DRAM แยกต่างหาก และส่งไปพร้อมกับข้อมูลผ่านช่องทางเพิ่มเติม (บิตพิเศษต่อคำ) ตัวควบคุมหน่วยความจำจะคำนวณ ECC เมื่อเขียนข้อมูล แก้ไขข้อผิดพลาดเมื่ออ่านข้อมูล และรายงานการแก้ไขข้อผิดพลาดและการตรวจจับไปยังระบบปฏิบัติการหรือเฟิร์มแวร์ ( UEFIหรือBIOS )
- ระบบ ECC แบบอินไลน์หรือECC แบบอินแบนด์ (IBECC) ไม่ใช้ความกว้างของช่องสัญญาณเพิ่มเติม จึงสามารถใช้งานร่วมกับโมดูลหน่วยความจำแบบ "ไม่ใช่ ECC" ได้ ตัวควบคุมหน่วยความจำจะแบ่งพื้นที่ทางกายภาพออกเป็นส่วนๆ
- ในการใช้งานรูปแบบหนึ่งซึ่งแสดงโดยโปรเซสเซอร์ IBECC ของ Intel และ RTOS ของ TI พื้นที่แอดเดรสทางกายภาพจะถูกแบ่งออกเพื่อให้มีหน่วยความจำสำรองส่วน หนึ่ง [ 12 ]คำสั่งเขียนแต่ละคำสั่งจะต้องมีคำสั่งเขียนเพิ่มเติมอีกคำสั่งหนึ่ง และเช่นเดียวกันกับคำสั่งอ่าน ซึ่งส่งผลให้ความหน่วงของหน่วยความจำเพิ่มขึ้นประมาณสองเท่า โดยเฉพาะอย่างยิ่ง การใช้งานของ Intel มีผลกระทบต่อประสิทธิภาพน้อยที่สุดในการท่องเว็บและแอปพลิเคชันเพื่อการทำงาน แต่สามารถลดประสิทธิภาพได้มากถึง 25% ในงานเกมและการตัดต่อวิดีโอ[ 13 ]
- ในทางทฤษฎีแล้ว เป็นไปได้ที่จะแบ่งช่องสัญญาณที่มีอยู่ (เช่น 64 บิต ออกเป็น 56 บิตสำหรับข้อมูลและ 8 บิตสำหรับการตรวจสอบ) เพื่อให้ได้ ECC แบบอะนาล็อกของไซด์แบนด์ การอ่านคำอธิบายของ Synopsys เกี่ยวกับ "ECC แบบอินไลน์" อย่างคร่าวๆ ซึ่งกล่าวถึงการแบ่งช่องสัญญาณ 16 บิตต่อชิป จะนำไปสู่ความเข้าใจนี้ แต่สิ่งนี้ไม่ค่อยพบเห็นในผลิตภัณฑ์เชิงพาณิชย์[ 14 ]
- โดยชิปหน่วยความจำ: On-die ECC (ODECC) หรือที่เรียกว่า in-DRAM ECC หรือ integrated ECC [ 15 ]เป็นสิ่งจำเป็นใน โมดูลหน่วยความจำ DDR5และLPDDR6 [ 16 ] ทั้งหมด เพื่อลดอัตราข้อผิดพลาดที่สูงขึ้นซึ่งเกี่ยวข้องกับเซลล์หน่วยความจำที่มีขนาดเล็กกว่า วงจรจัดเก็บ ECC และแก้ไขข้อผิดพลาดเพิ่มเติมจะฝังอยู่ในชิป DRAM และมองไม่เห็นโดยตัวควบคุมหน่วยความจำ ข้อผิดพลาดในการส่งจะไม่ได้รับการแก้ไขเนื่องจาก ECC ไม่ได้ถูกส่งไปพร้อมกับข้อมูล และการแก้ไขและการตรวจจับข้อผิดพลาดจะไม่ถูกรายงาน ความหน่วงแฝงเพิ่มเติมจะเกิดขึ้นก็ต่อเมื่อต้องการแก้ไขข้อผิดพลาดเท่านั้น
- โดยทั้งสองฝ่าย
- Link ECCเพิ่มการแก้ไขข้อผิดพลาดให้กับลิงก์ข้อมูล แต่ไม่ใช่กับหน่วยเก็บข้อมูลพื้นฐาน ตัวควบคุมหน่วยความจำจะคำนวณและส่ง ECC ไปพร้อมกับข้อมูลเมื่อเขียนลงใน DRAM ซึ่งจะตรวจสอบและแก้ไขข้อผิดพลาด เมื่ออ่านข้อมูล DRAM จะคำนวณ ECC ที่ตัวควบคุมหน่วยความจำตรวจสอบอีกครั้ง นี่เป็นส่วนหนึ่งของLPDDR5ในขณะที่ Side-band ECC ให้ความซ้ำซ้อนระดับลิงก์โดยอัตโนมัติ แต่ Inband/Inline ECC ที่ใช้การสำรองพื้นที่แอดเดรสทางกายภาพและ On-die ECC ไม่ได้ให้ความซ้ำซ้อนเช่นนั้น จำเป็นต้องมีเลเยอร์Link ECCเพื่อป้องกันความเสียหายระหว่างการส่งข้อมูล
การรายงานข้อผิดพลาด
การใช้งานหน่วยความจำ ECC ในยุคแรกๆ จำนวนมาก รวมถึง ECC บนชิป จะซ่อนข้อผิดพลาดที่แก้ไขได้ โดยทำหน้าที่ "เสมือน" ว่าข้อผิดพลาดนั้นไม่เคยเกิดขึ้น และรายงานเฉพาะข้อผิดพลาดที่แก้ไขไม่ได้เท่านั้น การใช้งานในปัจจุบันจะบันทึกทั้งข้อผิดพลาดที่แก้ไขได้ (CE) และข้อผิดพลาดที่แก้ไขไม่ได้ (UE) บางคนเปลี่ยนโมดูลหน่วยความจำที่มีอัตราข้อผิดพลาดสูงล่วงหน้า เพื่อลดโอกาสที่จะเกิดเหตุการณ์ข้อผิดพลาดที่แก้ไขไม่ได้[ 17 ]
การนำไปใช้
หน่วยความจำเซิร์ฟเวอร์มาตรฐาน: SECDEC แบบไซด์แบนด์
หน่วยความจำเซิร์ฟเวอร์มาตรฐานได้รับการออกแบบมาสำหรับรหัสแฮมมิงแบบแก้ไขข้อผิดพลาดเดี่ยวและตรวจจับข้อผิดพลาดคู่ (SECDED) ซึ่งช่วยให้สามารถแก้ไขข้อผิดพลาดบิตเดียวและตรวจจับข้อผิดพลาดสองบิตต่อคำ (หน่วย การถ่าย โอนบัส ) ตั้งแต่DDR SDRAM เป็นต้น มา ความกว้างของบัสมาตรฐาน (ขนาดคำ) ในส่วนของหน่วยความจำคือ 64 บิต ดังนั้นการตั้งค่าทั่วไประหว่าง DDR และ DDR4 จึงเป็นคำ 72 บิตที่มีบิตข้อมูล 64 บิตและบิตตรวจสอบ 8 บิตDDR5 SDRAMแบ่งบัสออกเป็นสองช่องย่อย 32 บิตที่ค่อนข้างเป็นอิสระ ดังนั้นหน่วยความจำ ECC จึงใช้ความกว้างทั้งหมด 80 บิต แบ่งระหว่างสองช่อง 40 บิต (ข้อมูล 32 บิต ตรวจสอบ 8 บิต) [ 18 ] ECC ยังใช้กับขนาดที่เล็กกว่าและใหญ่กว่าด้วย
ตัวควบคุมหน่วยความจำที่รองรับ ECC จะใช้บิตเพิ่มเติมเพื่อจัดเก็บรหัส SECDED หน่วยความจำมีหน้าที่เพียงแค่เก็บบิตเพิ่มเติมเท่านั้น ตั้งแต่ช่วงปลายทศวรรษ 1990 ตัวควบคุมหน่วยความจำยังสื่อสารกับBIOSและเก็บจำนวนข้อผิดพลาดที่ตรวจพบและแก้ไขไว้ เพื่อช่วยระบุโมดูลหน่วยความจำที่ล้มเหลวก่อนที่ปัญหาจะร้ายแรง การอ่านตัวนับได้รับการสนับสนุนในหลายระบบด้วย มาตรฐาน SMBIOSซึ่งมีให้ใช้งานบนLinux , BSDและWindows ( Windows 2000และรุ่นต่อมา) [ 19 ]
โครงสร้างของบิต
การตรวจจับและแก้ไขข้อผิดพลาดขึ้นอยู่กับการคาดการณ์ประเภทของข้อผิดพลาดที่เกิดขึ้น โดยปริยายแล้ว จะถือว่าความล้มเหลวของแต่ละบิตในคำของหน่วยความจำนั้นเป็นอิสระต่อกัน ส่งผลให้โอกาสที่จะเกิดข้อผิดพลาดพร้อมกันสองอย่างนั้นมีน้อยมาก นี่เป็นกรณีที่เคยเป็นมาเมื่อชิปหน่วยความจำมีความกว้างเพียงหนึ่งบิต ซึ่งเป็นเรื่องปกติในช่วงครึ่งแรกของทศวรรษ 1980 ต่อมามีการพัฒนาให้สามารถรวมหลายบิตไว้ในชิปเดียวกันได้
จุดอ่อนนี้ได้รับการแก้ไขด้วยเทคโนโลยีต่างๆ รวมถึงChipkillของIBM , Extended ECCของSun Microsystems , ChipspareของHewlett-PackardและSingle Device Data Correction (SDDC) ของIntelซึ่งทั้งหมดนี้ช่วยให้มั่นใจได้ว่าหากชิปหน่วยความจำตัวใดตัวหนึ่งทำงานผิดพลาด จะส่งผลกระทบต่อบิตเพียงหนึ่งบิตต่อคำ ECC เท่านั้น โดยทำได้ด้วยการกระจายบิตของคำ ECC ไปยังชิปต่างๆ ซึ่งเป็นรูปแบบหนึ่งของการสลับลำดับ (interleaving ) เพื่อให้แน่ใจว่าแต่ละชิปจะได้รับเพียงหนึ่งบิตต่อคำ อาจจำเป็นต้องสลับลำดับข้ามโมดูลหน่วยความจำ (sticks) หลายโมดูล
โดยทั่วไปแล้ว การสลับลำดับข้อมูลเป็นเทคนิคที่มีประโยชน์ในการป้องกันความล้มเหลวของบิตหลายบิตที่สัมพันธ์กัน ตัวอย่างเช่น รังสีคอสมิกอาจทำให้บิตที่อยู่ใกล้เคียงกันทางกายภาพหลายบิตในหลายคำเกิดความผิดพลาดได้ โดยการเชื่อมโยงบิตที่อยู่ใกล้เคียงกับคำที่แตกต่างกัน ตราบใดที่ความผิดพลาดจากเหตุการณ์เดียว (SEU) ไม่เกินเกณฑ์ความผิดพลาด (เช่น ความผิดพลาดเพียงครั้งเดียว) ในคำใดคำหนึ่งระหว่างการเข้าถึง ก็สามารถแก้ไขได้ (เช่น โดยรหัสแก้ไขข้อผิดพลาดแบบบิตเดียว) และสามารถรักษาระบบหน่วยความจำที่ปราศจากข้อผิดพลาดได้อย่างมีประสิทธิภาพ[ 20 ]
โดยตัวชิปหน่วยความจำเอง
ชิป DRAM บางตัวมีวงจรแก้ไขข้อผิดพลาดภายใน "on-chip" หรือ "on-die" ซึ่งช่วยให้ระบบที่มีตัวควบคุมหน่วยความจำแบบไม่ใช้ ECC ยังคงได้รับประโยชน์ส่วนใหญ่จากหน่วยความจำ ECC ได้[ 21 ] [ 22 ]ในบางระบบ อาจได้ผลลัพธ์ที่คล้ายคลึงกันโดยใช้โมดูล หน่วยความจำ EOS
ดังที่กล่าวไว้ข้างต้น ECC บนชิปเป็นข้อบังคับสำหรับ DDR5 และ LPDDR6 อย่างไรก็ตาม การที่ไม่มีการรายงานทำให้ทราบสถานะที่แท้จริงของชิปหน่วยความจำน้อยมาก จนกว่าข้อผิดพลาดจะเกินความสามารถของอัลกอริทึมบนชิปในการแก้ไข และไม่มีข้อมูลเกี่ยวกับ "ระยะขอบ" ที่มีอยู่ อัลกอริทึมที่ซับซ้อนได้รับการสร้างขึ้นเพื่ออนุมานการมีอยู่ของข้อผิดพลาดที่ได้รับการแก้ไขโดยอิงจากข้อผิดพลาดที่ยังไม่ได้รับการแก้ไข[ 15 ]
ตำแหน่งของการแก้ไข
ระบบหน่วยความจำ ECC จำนวนมากใช้วงจร EDAC "ภายนอก" ระหว่าง CPU และหน่วยความจำ ระบบบางระบบที่มีหน่วยความจำ ECC ใช้ทั้งระบบ EDAC ภายในและภายนอก โดยระบบ EDAC ภายนอกควรได้รับการออกแบบมาเพื่อแก้ไขข้อผิดพลาดบางอย่างที่ระบบ EDAC ภายในไม่สามารถแก้ไขได้[ 21 ] CPU เดสก์ท็อปและเซิร์ฟเวอร์สมัยใหม่ได้รวมวงจร EDAC เข้าไว้ใน CPU [ 23 ]แม้กระทั่งก่อนการเปลี่ยนไปใช้ตัวควบคุมหน่วยความจำแบบรวมใน CPU ซึ่งเกี่ยวข้องกับ สถาปัตยกรรม NUMAการรวม CPU ช่วยให้ระบบ EDAC ทำงานได้อย่างไม่มีข้อผิดพลาด
อัลกอริทึมการแก้ไข
ณ ปี 2009 รหัสแก้ไขข้อผิดพลาดที่ใช้กันทั่วไปส่วนใหญ่ใช้รหัส Hamming หรือ Hsiao ซึ่งให้การแก้ไขข้อผิดพลาดแบบบิตเดียวและการตรวจจับข้อผิดพลาดแบบสองบิต (SEC-DED) นอกจากนี้ยังมีการเสนอรหัสแก้ไขข้อผิดพลาดอื่นๆ สำหรับการป้องกันหน่วยความจำ เช่น รหัสแก้ไขข้อผิดพลาดแบบสองบิตและตรวจจับข้อผิดพลาดแบบสามบิต (DEC-TED) รหัสแก้ไขข้อผิดพลาดแบบนิบเบิลเดียวและตรวจจับข้อผิดพลาดแบบนิบเบิลคู่ (SNC-DND) รหัสแก้ไขข้อผิดพลาด Reed–Solomonเป็นต้น อย่างไรก็ตาม ในทางปฏิบัติ การแก้ไขแบบหลายบิตมักจะใช้วิธีการสลับรหัส SEC-DED หลายรหัส[ 24 ] [ 25 ]
การวิจัยในช่วงแรกพยายามลดพื้นที่และเวลาหน่วงของวงจร ECC ให้เหลือน้อยที่สุด Hamming เป็นคนแรกที่แสดงให้เห็นว่ารหัส SEC-DED สามารถทำได้ด้วยเมทริกซ์ตรวจสอบเฉพาะตัวหนึ่ง Hsiao แสดงให้เห็นว่าเมทริกซ์ทางเลือกที่มีคอลัมน์น้ำหนักคี่ให้ความสามารถ SEC-DED โดยใช้พื้นที่ฮาร์ดแวร์น้อยกว่าและเวลาหน่วงสั้นกว่ารหัส SEC-DED ของ Hamming แบบดั้งเดิม[ 26 ]การวิจัยล่าสุดยังพยายามลดพลังงานนอกเหนือจากการลดพื้นที่และเวลาหน่วงด้วย[ 27 ] [ 28 ]
ระบบสำรองแทน ECC
โดยทั่วไปแล้ว ตัวควบคุมหน่วยความจำแก้ไขข้อผิดพลาดจะใช้รหัสแก้ไขข้อผิดพลาดที่เหมาะสมกับพื้นที่ เช่น Hamming และ Hsiao หากต้นทุนและพื้นที่ไม่ใช่ปัญหา แต่ความเร็วเป็นสิ่งสำคัญ อาจใช้ ระบบสำรองแบบโมดูลาร์สามชั้น (TMR) เนื่องจากมีการใช้งานฮาร์ดแวร์ที่เร็วกว่า[ 20 ]ระบบดาวเทียมมักใช้ TMR [ 29 ] [ 30 ] [ 31 ]แม้ว่า RAM ของดาวเทียมมักจะใช้การแก้ไขข้อผิดพลาดแบบ Hamming ก็ตาม[ 32 ]
คอมพิวเตอร์ส่วนบุคคล

เซย์มัวร์ เครย์กล่าวอย่างมีชื่อเสียงว่า " ความเท่าเทียมกันมีไว้สำหรับเกษตรกร " เมื่อถูกถามว่าทำไมเขาจึงละเว้นสิ่งนี้ออกจากCDC 6600 [ 33 ]ต่อมาเขาได้รวมความเท่าเทียมกันไว้ในCDC 7600ซึ่งทำให้ผู้เชี่ยวชาญตั้งข้อสังเกตว่า "เห็นได้ชัดว่าเกษตรกรจำนวนมากซื้อคอมพิวเตอร์" คอมพิวเตอร์ IBM PC รุ่นแรก และพีซีทั้งหมดจนถึงต้นทศวรรษ 1990 ใช้การตรวจสอบความเท่าเทียมกัน[ 34 ]รุ่นต่อมาส่วนใหญ่ไม่ได้ใช้
เส้นทางข้อมูลส่วนใหญ่ในคอมพิวเตอร์ส่วนบุคคลยุค 2020 รวมถึง PCIe, SATA, การเชื่อมต่อระหว่างชิป และการจัดเก็บข้อมูลบนดิสก์ มีการป้องกัน ECC ในรูปแบบใดรูปแบบหนึ่ง การขาด ECC ในหน่วยความจำหลักนั้นถือว่าผิดปกติ โดยเฉพาะอย่างยิ่งเมื่อพิจารณาจากขนาดและความน่าจะเป็นที่จะเกิดความเสียหายที่สูงขึ้นLinus Torvaldsได้เขียนโพสต์ยาวในฟอรัมในปี 2021 โจมตีการตัดสินใจของ Intel ที่จะละเว้นการสนับสนุน ECC บนแพลตฟอร์มเดสก์ท็อป ในขณะที่แพลตฟอร์มเดสก์ท็อป AMD ในปัจจุบันสามารถใช้ (แต่ไม่จำเป็นต้องเปิดใช้งานคุณสมบัติ ECC) DIMM ที่ลงทะเบียนพร้อมการสนับสนุน ECC ได้ [ 35 ]
แคช
ซีพียูหลายตัวใช้รหัสแก้ไขข้อผิดพลาดในแคชบนชิปรวมถึงโปรเซสเซอร์ Intel Itanium , Xeon , CoreและPentium (ตั้งแต่สถาปัตยกรรมไมโคร P6 ) [ 36 ] [ 37 ]โปรเซสเซอร์ AMD Athlon , Opteron , โปรเซสเซอร์ Zenทั้งหมด[ 38 ]และZen+ [ 39 ] ( EPYC , EPYC Embedded , Ryzen และ Ryzen Threadripper ) และ DEC Alpha 21264 [ 24 ] [ 40 ]
ณ ปี 2549 EDC/ECC และ ECC/ECC เป็นสองเทคนิคการป้องกันข้อผิดพลาดของแคชที่ใช้กันมากที่สุดในไมโครโปรเซสเซอร์เชิงพาณิชย์ เทคนิค EDC/ECC ใช้รหัสตรวจจับข้อผิดพลาด (EDC) ในแคชระดับ 1 หากตรวจพบข้อผิดพลาด ข้อมูลจะถูกกู้คืนจากแคชระดับ 2 ที่ได้รับการป้องกันด้วย ECC เทคนิค ECC/ECC ใช้แคชระดับ 1 ที่ได้รับการป้องกันด้วย ECC และแคชระดับ 2 ที่ได้รับการป้องกันด้วย ECC [ 41 ] CPU ที่ใช้เทคนิค EDC/ECC จะเขียน STORE ทั้งหมดไปยังแคชระดับ 2 เสมอ เพื่อให้เมื่อตรวจพบข้อผิดพลาดระหว่างการอ่านจากแคชข้อมูลระดับ 1 สำเนาของข้อมูลนั้นสามารถกู้คืนได้จากแคชระดับ 2
หน่วยความจำที่ลงทะเบียน
หน่วยความจำแบบลงทะเบียน หรือแบบบัฟเฟอร์ ไม่เหมือนกับ ECC เทคโนโลยีทั้งสองทำหน้าที่ต่างกัน โดยทั่วไปแล้ว หน่วยความจำที่ใช้ในเซิร์ฟเวอร์มักจะเป็นทั้งแบบลงทะเบียน เพื่อให้สามารถใช้งานโมดูลหน่วยความจำจำนวนมากได้โดยไม่มีปัญหาทางไฟฟ้า และมี ECC เพื่อความสมบูรณ์ของข้อมูล
ต้นทุนและผลประโยชน์
การใช้ ECC เพื่อเพิ่มความปลอดภัยของข้อมูลมักมาพร้อมกับค่าใช้จ่ายที่สูงขึ้น ส่งผลให้ประสิทธิภาพการทำงานช้าลงเล็กน้อยและค่าใช้จ่ายด้านหน่วยความจำเพิ่มขึ้น
หน่วยความจำ ECC มีราคาแพงกว่าหน่วยความจำที่ไม่ใช่ ECC เนื่องจากมีฟังก์ชันการตรวจสอบข้อผิดพลาด เพิ่มเติม [ 42 ]ต้นทุนเพิ่มเติมของหน่วยความจำ ECC ขนาด 1 GB ในปี 2010 แตกต่างกันไปตั้งแต่ 0 ถึง 15 ดอลลาร์ ขึ้นอยู่กับประสิทธิภาพและผู้ผลิต[ 43 ]การออกแบบ ECC และวัตถุประสงค์ในการใช้งานที่มีความน่าเชื่อถือสูงทำให้มีค่าใช้จ่ายเพิ่มเติมสำหรับการตรวจสอบความถูกต้องและการออกแบบระดับวงจรเพิ่มเติมภายในหน่วยความจำ[ 6 ]คุณสมบัติดังกล่าวโดยทั่วไปส่งผลให้ต้นทุนในการใช้งาน ECC สูงขึ้น
ผู้ผลิตเมนบอร์ดอาจเลือกที่จะเพิ่มความเข้ากันได้ของ ECC ในระดับต่างๆ ขึ้นอยู่กับกลุ่มตลาด[ 44 ]เมนบอร์ดและโปรเซสเซอร์ที่เปิดใช้งาน ECC บางตัวสามารถรองรับ ECC แบบไม่บัฟเฟอร์ (ไม่ลงทะเบียน) ได้ แต่ก็ยังสามารถใช้งานร่วมกับหน่วยความจำที่ไม่ใช่ ECC ได้เช่นกัน เฟิร์มแวร์ของระบบจะเปิดใช้งานฟังก์ชัน ECC หากมีการติดตั้งหน่วยความจำ ECC [ 45 ]
ECC อาจลดประสิทธิภาพของหน่วยความจำลงประมาณ 2–3 เปอร์เซ็นต์ในบางระบบ ขึ้นอยู่กับแอปพลิเคชันและการใช้งาน เนื่องจากต้องใช้เวลาเพิ่มเติมสำหรับตัวควบคุมหน่วยความจำ ECC ในการตรวจสอบข้อผิดพลาด[ 46 ]อย่างไรก็ตาม ระบบสมัยใหม่ได้รวมการทดสอบ ECC เข้ากับ CPU ซึ่งจะไม่ทำให้เกิดความล่าช้าเพิ่มเติมในการเข้าถึงหน่วยความจำตราบใดที่ไม่มีการตรวจพบข้อผิดพลาด[ 23 ] [ 47 ] [ 48 ]
กรณีนี้ไม่เป็นเช่นนั้นสำหรับECC แบบอินแบนด์ซึ่งจัดเก็บตารางที่ใช้สำหรับการป้องกันในพื้นที่ที่สงวนไว้ของหน่วยความจำระบบหลัก[ 49 ] [ 50 ]ซึ่งได้รับการสนับสนุนโดยIntelสำหรับChromebookซึ่งแสดงให้เห็นผลกระทบเพียงเล็กน้อยต่อการท่องเว็บ และงานด้านการผลิต แต่ทำให้ ประสิทธิภาพ ใน การเล่นเกมและการตัดต่อวิดีโอลดลงถึง 25% [ 13 ]
หมายเหตุ
ลิงก์ภายนอก
- SoftECC: ระบบตรวจสอบความสมบูรณ์ของหน่วยความจำซอฟต์แวร์
- ไลบรารีตรวจจับและแก้ไขข้อผิดพลาด DRAM แบบปรับแต่งได้ด้วยซอฟต์แวร์สำหรับ HPC
- การตรวจจับและแก้ไขความเสียหายของข้อมูลที่เกิดขึ้นโดยไม่แสดงอาการ สำหรับการประมวลผลประสิทธิภาพสูงขนาดใหญ่
- ข้อผิดพลาดบิตเดียว: มุมมองของผู้ผลิตโมดูลหน่วยความจำเกี่ยวกับสาเหตุ ผลกระทบ และการตรวจจับ
- คู่มือการกำหนดค่าหน่วยความจำสำหรับโปรเซสเซอร์ Intel Xeon E3 - 1200
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ หน่วยความจำ ECC
หน่วยความจำรหัสแก้ไขข้อผิดพลาด ( หน่วยความจำ ECC ) เป็นประเภทของ หน่วยเก็บข้อมูลคอมพิวเตอร์ ที่ใช้ รหัสแก้ไขข้อผิดพลาด [ a ] (ECC) เพื่อตรวจจับและแก้ไข ความเสียหายของข้อมูล n...
แนวคิด
รหัสแก้ไขข้อผิดพลาด (ECC) ช่วยป้องกันความเสียหายของข้อมูลที่ตรวจไม่พบ และใช้ในคอมพิวเตอร์ที่ไม่สามารถยอมรับความเสียหายดังกล่าวได้ เช่น แอปพลิเคชันการคำนวณทางวิทยาศาสตร์และการเงิน หรือใน ฐานข้อมูลและเซิร์ฟเวอร์ไฟล์ นอกจากนี้ ECC...
อัตราความผิดพลาดและผลที่ตามมาในโลกแห่งความเป็นจริง
งานวิจัยที่ตีพิมพ์ระหว่างปี 2007 ถึง 2009 แสดงให้เห็นอัตราความผิดพลาดที่แตกต่างกันอย่างมาก โดยมีความแตกต่างกันมากกว่า 7 ระดับ ตั้งแต่ ข้อผิดพลาด 10 −10 ครั้ง /(บิต·ชั่วโมง) หรือประมาณหนึ่งบิตผิดพลาดต่อชั่วโมงต่อกิกะไบต์ของหน่วยความจำ ข้อผิดพลาด 10 −17...
โซลูชัน
มีการพัฒนาแนวทางต่างๆ มากมายเพื่อรับมือกับการเปลี่ยนแปลงบิตที่ไม่พึงประสงค์ รวมถึงการเขียนโปรแกรมที่คำนึงถึงภูมิคุ้มกัน หน่วยความจำพาริตี RAM และหน่วยความจำ ECC