WEBVTT

00:00.120 --> 00:00.960
ผู้สอน: ในบทเรียนนี้

00:00.960 --> 00:05.040
เราจะพูดถึงหน่วยความจำ ECC หรือที่เรียกว่ารหัสการแก้ไขข้อผิดพลาด

00:05.040 --> 00:10.020
แต่ก่อนอื่น เราต้องครอบคลุมแนวคิดของความไม่เท่าเทียมกันและความเท่าเทียมกันในแง่ของหน่วยความจำ

00:10.020 --> 00:14.160
เมื่อเราพูดถึง non-parity นี่คือหน่วยความจำที่เป็นหน่วยความจำมาตรฐาน

00:14.160 --> 00:18.870
มันไม่ตรวจสอบข้อผิดพลาดและอนุญาตให้ใส่หรือนำข้อมูลออกจากหน่วยความจำได้ตามต้องการ

00:18.870 --> 00:21.390
และนี่คือสิ่งที่หน่วยความจำส่วนใหญ่จะเป็น

00:21.390 --> 00:23.910
การผลิตแบบไม่พาริตีมีราคาถูกมาก

00:23.910 --> 00:26.970
และมีความเร็วสูงกว่าหน่วยความจำพาริตี

00:26.970 --> 00:34.890
ในทางกลับกัน หน่วยความจำพาริตีจะถูกใช้เพื่อตรวจสอบข้อผิดพลาดพื้นฐานและเพื่อให้แน่ใจว่าเนื้อหาหน่วยความจำมีความน่าเชื่อถือและมีความสมบูรณ์

00:34.890 --> 00:38.460
ด้วยเหตุนี้ หน่วยความจำนี้จะช้ากว่าหน่วยความจำที่ไม่ใช่พาริตี

00:38.460 --> 00:44.910
แต่มีความน่าเชื่อถือที่จำเป็นสำหรับเซิร์ฟเวอร์และเวิร์กสเตชันเดสก์ท็อประดับไฮเอนด์บางรุ่น

00:44.910 --> 00:52.920
ตอนนี้หน่วยความจำที่มีการตรวจสอบพาริตีจะสามารถทำการคำนวณพื้นฐานตามสิ่งที่เห็นเพื่อตรวจสอบว่าข้อมูลนั้นดีหรือไม่

00:52.920 --> 00:55.110
และถ้าข้อมูลนั้นดีก็จะใช้มัน

00:55.110 --> 00:58.560
และถ้าไม่ใช่ก็จะเกิด Error แต่ไม่สามารถแก้ไขได้

00:58.560 --> 01:02.460
มันสามารถบอกได้ว่ามีข้อผิดพลาดที่นี่ แต่ฉันไม่รู้ว่าจะแก้ไขอย่างไร

01:02.460 --> 01:07.230
โดยพื้นฐานแล้ว มันใช้งานได้โดยให้ทุกไบต์มีแพริตีบิตเชื่อมโยงอยู่

01:07.230 --> 01:10.230
แทนที่จะมี 8 บิต ตอนนี้คุณมี 9 บิต

01:10.230 --> 01:13.860
เพราะข้อมูล 8 บิตบวก 1 บิตสำหรับแพริตี

01:13.860 --> 01:16.200
ตอนนี้พาริตีบิตนั้นจะถูกตั้งค่าในเวลาที่เหมาะสม

01:16.200 --> 01:17.970
จากนั้น มันจะถูกคำนวณและเปรียบเทียบเมื่อคุณอ่านจากหน่วยความจำ

01:17.970 --> 01:24.330
เพื่อพิจารณาว่าบิตใดมีการเปลี่ยนแปลงตั้งแต่ข้อมูลนั้นถูกเขียนลงในหน่วยความจำนั้นครั้งล่าสุดหรือไม่

01:24.330 --> 01:28.470
การตรวจสอบประเภทนี้จำกัดเฉพาะการตรวจหาข้อผิดพลาดบิตเดียวเหล่านั้น

01:28.470 --> 01:30.300
และถ้ามีสองบิตที่ถูกแก้ไข

01:30.300 --> 01:32.310
การตรวจสอบพาริตี้นั้นอาจผ่าน

01:32.310 --> 01:35.550
เพราะจำไว้ บิตสามารถเป็น 0 หรือ 1 เท่านั้น

01:35.550 --> 01:39.683
ตัวอย่างเช่น สมมติว่าฉันเก็บเลข

01:39.683 --> 01:44.460
0 ซึ่งเขียนเป็น 00000000 ในเลขฐานสอง

01:44.460 --> 01:47.700
ตอนนี้ถ้าฉันรวมบิตเหล่านั้นเข้าด้วยกัน ฉันได้

01:47.700 --> 01:50.400
0 แปดตัว ซึ่งให้ 0 สำหรับพาริตีบิตของฉัน

01:50.400 --> 01:52.560
ตอนนี้ถ้าฉันไปอ่านตัวเลขนั้นจากหน่วยความจำแล้วเห็นว่ามี

01:52.560 --> 01:56.220
0 อยู่แปดตัว ฉันบวกมันเข้าด้วยกันแล้วได้ 0 0 จับคู่แพริตีบิตของฉันเป็น

01:56.220 --> 01:59.850
0 ดังนั้นนี่จึงเป็นข้อมูลที่ดี

01:59.850 --> 02:00.720
ในทางกลับกัน

02:00.720 --> 02:02.430
สมมุติว่าผมกำลังเขียนเลข

02:02.430 --> 02:07.200
1 ซึ่งเขียนว่า 00000001

02:07.200 --> 02:10.470
ทีนี้ถ้าผมบวกเลขทั้งหมดเข้าด้วยกัน ผมจะได้ 1

02:10.470 --> 02:13.530
และฉันจะใส่มันในพาริตีบิตของบิตที่เก้า

02:13.530 --> 02:15.720
เมื่อทำสิ่งนี้ ตอนนี้ฉันอ่านจากสิ่งนั้นและฉันได้

02:15.720 --> 02:17.133
00000001

02:19.560 --> 02:21.210
และเนื่องจากทั้งหมดรวมกันเป็น

02:21.210 --> 02:22.410
1 และตรงกับพาริตีบิตของฉัน

02:22.410 --> 02:27.240
ฉันรู้ว่าข้อมูลนั้นดี แต่ถ้าฉันใส่ข้อมูลนั้นลงในหน่วยความจำและมันอยู่ที่นั่นสองสามชั่วโมง

02:27.240 --> 02:31.170
และ 1 นั้นเปลี่ยนเป็น 0 โดยบังเอิญ ถ้าฉันอ่าน ตอนนี้และฉันได้ 00000000

02:31.170 --> 02:42.510
และฉันรวมเข้าด้วยกัน ฉันได้ 0 และเปรียบเทียบมันกับพาริตีบิตซึ่งมี 1 อยู่ในนั้น ซึ่งตอนนี้บอกฉันว่ามีข้อผิดพลาดและมีบางอย่างผิดพลาด

02:42.510 --> 02:46.560
ฉันไม่รู้ว่าแปดบิตใดที่เปลี่ยนไป แต่อย่างน้อยหนึ่งในนั้นมีการเปลี่ยนแปลง

02:46.560 --> 02:47.580
ในทางกลับกัน

02:47.580 --> 02:48.413
ถ้าตัวเลขนั้นจาก

02:48.413 --> 03:01.590
00000001 เปลี่ยนเป็น 01010001 ตอนนี้ฉันมีบิตสองบิตที่เปลี่ยนจาก 0 เป็น 1 โดยไม่ได้ตั้งใจจากหน่วยความจำ

03:01.590 --> 03:04.260
เมื่อฉันดูที่พาริตีของฉัน มันจะยังคงเป็น

03:04.260 --> 03:06.930
1 เพราะเมื่อฉันบวกมัน ถ้ามันเป็นเลขคี่ มันจะเป็น

03:06.930 --> 03:08.940
1 สำหรับพาริตีบิตของฉัน

03:08.940 --> 03:10.770
และถ้าผมบวกมันแล้วมันเป็นเลขคู่

03:10.770 --> 03:12.090
มันจะเป็น 0

03:12.090 --> 03:17.340
อย่างที่คุณเห็น คุณจะไม่สามารถตรวจจับข้อผิดพลาดได้หากมีการเปลี่ยนแปลงสองบิตภายในสิ่งนี้

03:17.340 --> 03:20.100
หากคุณใช้การคำนวณประเภทพาริตี

03:20.100 --> 03:23.490
ข่าวดีก็คือประมาณ 90% ของข้อผิดพลาดส่วนใหญ่จะเป็นข้อผิดพลาดประเภทบิตเดียว

03:23.490 --> 03:30.000
ดังนั้นการตรวจสอบพาริตีจึงเพียงพอสำหรับสถานการณ์ส่วนใหญ่ของเรา

03:30.000 --> 03:31.530
แต่ถ้าคุณต้องรับมือกับบางอย่าง

03:31.530 --> 03:33.360
เช่น การรันเซิร์ฟเวอร์สำหรับธนาคาร การมีข้อผิดพลาดใดๆ

03:33.360 --> 03:35.520
ก็ตามอาจเป็นสิ่งที่ไม่ดี

03:35.520 --> 03:37.890
ดังนั้นเราจึงต้องการสิ่งที่ดีกว่าความเท่าเทียมกัน

03:37.890 --> 03:40.650
และนั่นคือสิ่งที่ ECC เข้ามามีบทบาท

03:40.650 --> 03:43.830
ตอนนี้ ECC ย่อมาจาก Error Correcting Code

03:43.830 --> 03:48.390
รหัสแก้ไขข้อผิดพลาดคือประเภทของหน่วยความจำที่นำพาริตีขึ้นไปอีกระดับ

03:48.390 --> 03:50.460
ตอนนี้ไม่เพียงแต่ตรวจจับว่ามีข้อผิดพลาดได้

03:50.460 --> 03:51.810
เช่นเดียวกับที่พาริตีทำได้

03:51.810 --> 03:54.780
แต่ยังสามารถแก้ไขข้อผิดพลาดนั้นให้คุณได้ด้วย

03:54.780 --> 03:57.300
ตอนนี้ ECC ช้ากว่า parity เล็กน้อยซึ่งช้ากว่า

03:57.300 --> 03:59.490
non-parity ด้วย

03:59.490 --> 04:02.610
ดังนั้นคุณจึงสูญเสียประสิทธิภาพบางอย่างสำหรับความสามารถพิเศษนี้

04:02.610 --> 04:06.300
แต่คุณได้รับความสมบูรณ์และความน่าเชื่อถือที่สูงขึ้นจากหน่วยความจำของคุณเมื่อคุณใช้

04:06.300 --> 04:11.760
ECC เนื่องจากจะสามารถตรวจจับข้อผิดพลาดเหล่านั้นและแก้ไขข้อผิดพลาดเหล่านั้นได้

04:11.760 --> 04:15.570
โดยทั่วไป คุณจะเห็นเฉพาะ ECC หรือรหัสแก้ไขข้อผิดพลาดที่ใช้ในเวิร์กสเตชันหรือเซิร์ฟเวอร์ระดับไฮเอนด์จริงๆ

04:15.570 --> 04:25.230
เนื่องจากมีค่าใช้จ่ายเพิ่มเติมและความสมบูรณ์ระดับสูงเป็นพิเศษนั้นจำเป็นเฉพาะในสภาพแวดล้อมประเภทเหล่านั้นเท่านั้น

04:25.230 --> 04:26.340
ตอนนี้คุณอาจสงสัยว่า

04:26.340 --> 04:30.990
ECC ระบุได้อย่างไรว่ามีอะไรผิดปกติและจะแก้ไขได้อย่างไร

04:30.990 --> 04:35.700
ในการทำเช่นนั้น มันจะใช้สิ่งที่เรียกว่าหน่วยความจำบัฟเฟอร์หรือการลงทะเบียน

04:35.700 --> 04:39.570
ตอนนี้หน่วยความจำบัฟเฟอร์หรือหน่วยความจำที่ลงทะเบียนมีฮาร์ดแวร์เพิ่มเติมที่จะนั่งระหว่างหน่วยความจำกับ

04:39.570 --> 04:42.870
CPU หรือโปรเซสเซอร์ของคุณ

04:42.870 --> 04:48.720
ฮาร์ดแวร์นี้เรียกว่ารีจิสเตอร์และเก็บข้อมูลไปยังบัฟเฟอร์ก่อนที่จะถูกส่งไปยังซีพียู

04:48.720 --> 04:50.760
คุณสมบัตินี้ใช้เป็นมาตรวัดความน่าเชื่อถือในระบบจำนวนมาก

04:50.760 --> 04:56.910
โดยเฉพาะระบบเช่นเซิร์ฟเวอร์ที่มีโมดูลหน่วยความจำที่แตกต่างกันจำนวนมากซึ่งอาจเกิดข้อผิดพลาดได้

04:56.910 --> 05:02.370
ระบบเหล่านี้ต้องการบัฟเฟอร์หรือลงทะเบียนข้อมูลเพื่อลดภาระทางไฟฟ้าที่ใช้โดยระบบเหล่านี้ที่มีโมดูลหน่วยความจำจำนวนมาก

05:02.370 --> 05:13.020
และสิ่งนี้สามารถจับคู่กับพาริตีหรือหน่วยความจำรหัสแก้ไขข้อผิดพลาดเพื่อให้สามารถให้ความน่าเชื่อถือเพิ่มเติมแก่คุณได้ คุณกำลังมองหาและตรวจพบข้อผิดพลาดเหล่านั้น

05:13.020 --> 05:15.510
ตอนนี้ เพื่อใช้โมดูลรหัสแก้ไขข้อผิดพลาด

05:15.510 --> 05:18.840
เมนบอร์ดของคุณต้องรองรับเช่นเดียวกับ CPU ของคุณ

05:18.840 --> 05:21.450
หากส่วนประกอบเหล่านั้นไม่รองรับ ECC แม้ว่าคุณจะซื้อโมดูล

05:21.450 --> 05:24.450
ECC ซึ่งมีราคาสูงกว่า คุณจะไม่ได้รับสิทธิประโยชน์เพิ่มเติมของ

05:24.450 --> 05:27.150
ECC นั้น

05:27.150 --> 05:28.800
ดังนั้นโปรดระลึกไว้เสมอว่า

05:28.800 --> 05:32.700
เมนบอร์ดส่วนใหญ่รองรับ ECC หรือไม่รองรับ

05:32.700 --> 05:34.140
มันไม่ใช่ตัวเลือกโดยทั่วไป

05:34.140 --> 05:36.690
ดังนั้น หากคุณซื้อเมนบอร์ดที่รองรับ

05:36.690 --> 05:41.490
ECC คุณจะต้องซื้อโมดูล ECC ซึ่งเป็นโมดูลหน่วยความจำที่ลงทะเบียนไว้

05:41.490 --> 05:44.160
ตอนนี้หากคุณพบเมนบอร์ดที่รองรับโมดูล

05:44.160 --> 05:49.110
ECC หรือที่ไม่ใช่ ECC โดยทั่วไปแล้วจะไม่รองรับทั้งสองอย่างพร้อมกัน

05:49.110 --> 05:51.570
ดังนั้นโมดูลทั้งหมดของคุณจะต้องเป็น ECC หรือไม่มีโมดูลใดเลยที่สามารถเป็น

05:51.570 --> 05:53.880
ECC ได้

05:53.880 --> 05:58.950
การมีส่วนผสมเหล่านี้อาจทำให้เกิดข้อผิดพลาดในระบบและเมนบอร์ดจะไม่ทราบวิธีจัดการ

05:58.950 --> 06:00.210
สิ่งสุดท้ายที่ฉันอยากจะพูดถึงก็คือ

06:00.210 --> 06:06.780
หากคุณใช้ DDR5 อยู่ DDR5 จะมีข้อผิดพลาดบางอย่างในการตรวจสอบภายในตัวโมดูลเอง

06:06.780 --> 06:10.500
ไม่ถือว่าเป็น ECC หรือโมดูล ECC

06:10.500 --> 06:11.850
ดังนั้นการแก้ไขข้อผิดพลาดนี้ภายในโมดูล

06:11.850 --> 06:14.520
DDR5 รุ่นใหม่จึงสามารถใช้กับเมนบอร์ดที่ไม่สนับสนุน

06:14.520 --> 06:19.710
ECC และคุณจะยังมีความสามารถในการตรวจสอบข้อผิดพลาดอยู่บ้าง

06:19.710 --> 06:21.420
นี่คือการตรวจสอบข้อผิดพลาดรูปแบบอื่น

06:21.420 --> 06:23.910
และไม่ถือว่าเป็นรหัสแก้ไขข้อผิดพลาด

06:23.910 --> 06:27.810
ดังนั้นจำไว้และอย่าให้สิ่งนั้นทำให้คุณสับสนเมื่อคุณอยู่ในสนาม

06:27.810 --> 06:29.640
นี่เป็นรูปแบบการตรวจสอบข้อผิดพลาดที่แตกต่างกัน

06:29.640 --> 06:32.040
และโมดูล DDR5 ยังคงสามารถขายเป็นโมดูล ECC

06:32.040 --> 06:37.290
หรือไม่ใช่ ECC ได้ เนื่องจากนอกเหนือจากการตรวจสอบข้อผิดพลาดภายในแล้ว โมดูลเหล่านี้ยังสามารถทำงานร่วมกับ

06:37.290 --> 06:44.040
CPU และเมนบอร์ดได้หากสนับสนุน ECC ตอนนี้รหัสแก้ไขข้อผิดพลาดเช่นกัน

06:44.040 --> 06:45.510
ฉันรู้ว่ามันทำให้สับสนเล็กน้อย

06:45.510 --> 06:48.210
ดังนั้นจงตระหนักไว้เสมอเมื่อคุณออกไปภาคสนาม
