Xác nhận CPU desktop AMD Ryzen 7000 hỗ trợ RAM ECC
(sunshowers.io)- Hỗ trợ RAM ECC, vốn từng biến mất khỏi bảng thông số khi AM5 ra mắt, nay được xác nhận lại qua một trường hợp hoạt động với tổ hợp Ryzen 7000 “Raphael” và bo mạch chủ ASRock
- Thử nghiệm được thực hiện với Ryzen 7950X, ASRock B650E PG Riptide, UEFI 1.28, AGESA 1.0.0.7b và 2 thanh v-color 32GB ECC UDIMM; hệ thống khởi động Linux thành công sau quá trình huấn luyện liên kết DDR5
- Độ rộng bộ nhớ 72 bit và hiển thị
Multi-bit ECCtrongdmidecodelà manh mối hữu ích, nhưng vì đây là thông tin SMBIOS từ UEFI nên riêng nó không chứng minh được ECC đã được kích hoạt - Khi truy vấn trực tiếp AMD UMC qua SMN, bit 30 của
UmcCapHicho biết trạng thái kích hoạt ECC; trên Linux,ryzen_smucũng xác nhận giá trị có bit tương ứng được đặt ở cả hai kênh bộ nhớ - Dù chưa thực hiện bơm lỗi thực tế, log EDAC của nhân Linux được xuất ra theo đường dẫn kiểm tra bit kích hoạt ECC của UMC, nên đây là căn cứ mạnh để đánh giá ECC có hoạt động hay không
Sự thay đổi trong hỗ trợ ECC trên Ryzen desktop
- CPU desktop AMD Ryzen từ trước đến nay có một điểm mạnh là hỗ trợ chính thức RAM ECC
- Phần lớn dòng Ryzen 1000~5000 có thể dùng RAM ECC khi kết hợp với bo mạch chủ phù hợp, không cần CPU cấp workstation đắt tiền hơn
- Trang thông số ASRock B550 Steel Legend là ví dụ hiển thị chi tiết thông tin tương thích RAM ECC theo từng thế hệ CPU
- Tại thời điểm Ryzen 7000 “Raphael” và Socket AM5 ra mắt, các đề cập đến hỗ trợ ECC đã biến mất
- Ngay cả trên trang thông số ASRock X670E Taichi, một bo mạch chủ AM5 cao cấp, tại thời điểm viết bài cũng không có đề cập đến hỗ trợ ECC
- Sau khi nâng cấp lên Ryzen 7950X, hiệu năng rất đáng hài lòng, nhưng việc thiếu ECC tại thời điểm mua vẫn là một điểm tiếc nuối lớn
Thử nghiệm ECC trên AM5 bắt đầu từ diễn đàn ASRock
- Trong chủ đề trên diễn đàn ASRock, một người dùng tên ApplesOfEpicness đã chia sẻ trải nghiệm làm RAM ECC hoạt động trong firmware AMD AGESA cùng với một kỹ sư AMD
- Người này cho biết đã xác nhận lỗi được báo lên tận OS bằng cách nối tắt chân dữ liệu và chân ground trên bo mạch chủ ASRock có UEFI đã cập nhật
- Các thử nghiệm sau đó sử dụng ASRock B650E PG Riptide và 2 thanh v-color 32GB ECC UDIMM
- UEFI của bo mạch chủ được cập nhật lên 1.28, AGESA lên 1.0.0.7b
- Sau khi thay RAM, quá trình huấn luyện liên kết DDR5 diễn ra khá lâu rồi hệ thống khởi động được
- Trên hệ thống này, việc huấn luyện liên kết cho 64GB RAM mất gần 3 phút
- Trên Ryzen 7000 desktop, việc này chỉ cần thực hiện một lần sau khi thay RAM hoặc đổi timing; UEFI sẽ cache kết quả và tái sử dụng ở các lần khởi động sau
Các hiển thị ECC thấy được trên Linux và giới hạn của chúng
- Trên Linux,
sudo dmidecode -t memoryhiển thị các giá trị liên quan đến ECCError Correction Type: Multi-bit ECCTotal Width: 72 bitsData Width: 64 bits
- Total Width 72 bits là tín hiệu đáng chú ý
- Với RAM không ECC, giá trị này hiển thị là 64 bit
- RAM ECC 64 bit có thêm 8 bit dành cho dữ liệu parity
- EDAC của nhân Linux cũng có vẻ đã được kích hoạt
EDAC MC: Ver: 3.0.0EDAC MC0: Giving out device to module amd64_edacEDAC amd64: F19h_M60h detected
Vì sao chỉ dmidecode là chưa đủ
dmidecodelà công cụ xuất bảng DMI hoặc SMBIOS của máy tính dưới dạng con người đọc được- Các bảng này chứa thông tin như thành phần phần cứng, số serial, phiên bản BIOS
- Không cần thăm dò trực tiếp phần cứng thực tế, nhưng thông tin hiển thị có thể không đáng tin cậy
- SMBIOS định nghĩa cấu trúc dữ liệu và phương thức truy cập để đọc thông tin quản lý do BIOS tạo ra
- Nhờ đó hệ điều hành không cần thăm dò trực tiếp thiết bị
- Thông tin
dmidecodeliên quan đến ECC đến từ UEFI, không phải bộ xử lý- Một số thông tin, như tốc độ bộ nhớ, có thể đến từ bộ điều khiển bộ nhớ
- Thông tin ECC đến từ UEFI, nên dù nó cho thấy bộ nhớ có khả năng ECC, nó không bảo đảm ECC thực sự đã được kích hoạt
- Việc ECC có được kích hoạt hay không cuối cùng do bộ điều khiển bộ nhớ của hệ thống quyết định
Cách truy vấn trực tiếp AMD UMC
- Bộ xử lý AMD phơi bày một bus gọi là System Management Network, tức SMN
- Bus này có thể được dùng để truy vấn và cấu hình AMD Unified Memory Controller, tức UMC
- Dựa trên tài liệu AMD UMC của illumos, có thể kiểm tra ECC đã được kích hoạt hay chưa bằng cách truy vấn thanh ghi
UmcCapHi- Thông tin liên quan không nằm trong AMD Processor Programming Reference công khai, mà có thể suy ra từ mã nguồn kernel Linux và illumos mã nguồn mở
- Truy cập trực tiếp SMN rất nguy hiểm
- Đặc biệt, lệnh ghi có thể làm hỏng nghiêm trọng máy tính
- Không nên thực hiện thao tác ghi lên SMN
- Trên illumos, hai kênh bộ nhớ của bộ xử lý Ryzen 7000 được truy vấn riêng
- Địa chỉ kênh 0:
0x50df4 - Địa chỉ kênh 1:
0x150df4 - Giá trị trả về ở cả hai kênh đều là
0x40000030
- Địa chỉ kênh 0:
- Điểm cốt lõi là bit 30
- Nếu bit này được đặt, ECC đang được kích hoạt trong bộ điều khiển bộ nhớ
Truy vấn SMN bằng ryzen_smu trên Linux
- Trên Linux cũng có thể truy cập bus SMN bằng driver
ryzen_smu- Trên hệ thống này, cần bản vá để cài đặt
- Driver cung cấp file
/sys/kernel/ryzen_smu_drv/smn- Để truy vấn, ghi địa chỉ 4 byte ở dạng little-endian, rồi đọc kết quả 4 byte ở dạng little-endian
- Kết quả truy vấn hai kênh bằng script Python như sau
0x00050df4:0x400000000x00150df4:0x40000000
- Chữ số
4ở nibble đầu tiên trong giá trị trả về nghĩa là bit 30 đã được đặt, và bộ điều khiển bộ nhớ đang báo ECC đã được kích hoạt - Trên Windows, có thể truy vấn tương tự bằng các công cụ như SMUDebugTool, nhưng hoạt động của công cụ này không được bảo đảm
Bơm lỗi thực tế và độ tin cậy của EDAC
- Cách chắc chắn nhất để kiểm chứng ECC hoạt động là bơm lỗi thực tế
- ApplesOfEpicness đã nối tắt chân dữ liệu và chân ground trên bo mạch chủ
- Một cách khác là đẩy ép xung RAM lên mức không ổn định
- Trong thử nghiệm này, không thực hiện nối tắt chân vật lý hay ép xung RAM lặp đi lặp lại
- Việc huấn luyện liên kết DDR5 mất vài phút mỗi lần cũng làm thử nghiệm ép xung trở nên nặng nề hơn
- Cho đến hiện tại chưa quan sát thấy lỗi phát sinh tự nhiên nào
- Đường dẫn thông báo EDAC của nhân Linux được liên kết với bit kích hoạt ECC của AMD UMC
- Log
Giving out device to modulexuất phát từedac_mc_add_mc_with_groups - Hàm này được gọi trong đường dẫn
init_one_instance init_one_instancechỉ được gọi khipvt->ops->ecc_enabledlà true- Ryzen 7000, tức Zen 4, thuộc family
0x19; trong trường hợp nàyumc_ecc_enabledcủaumc_opsđược dùng
- Log
umc_ecc_enabledkiểm tra bitUMC_ECC_ENABLEDcủaumc_cap_hiUMC_ECC_ENABLEDlà bit 30- Trên bộ xử lý AMD, thông báo
EDAC MC0: Giving out device to module amd64_edaclà một chỉ dấu đáng tin cậy rằng UMC đã báo ECC được kích hoạt
Kết luận
- Ngay cả với CPU desktop Ryzen 7000, ít nhất khi kết hợp với bo mạch chủ ASRock, có thể làm RAM ECC hoạt động khá dễ dàng
- Chỉ thông tin dựa trên SMBIOS của
dmidecodelà chưa đủ, nhưng khi xem cùng bit 30 của UMC và đường dẫn EDAC trên Linux, có thể xác nhận trực tiếp hơn trạng thái kích hoạt ECC
1 bình luận
Ý kiến trên Hacker News
Tôi cần nâng cấp bộ xử lý và rất quan tâm đến cấu hình RAM ECC
Tôi đã thấy một bài trên /r/AMD nơi hai người tranh luận liệu bộ xử lý hoặc bo mạch chủ AMD có thực sự hỗ trợ ECC hay không, nhưng không biết ai đúng: https://www.reddit.com/r/Amd/comments/lzxqod/list_of_am4_mot...
Tôi muốn biết liệu bài này có xác nhận rằng tổ hợp AMD+ASRock thật sự là RAM ECC hay không
Thường trong mục “Memory” sẽ ghi kiểu như “ECC & Non-ECC, Unbuffered Memory”
Cần lưu ý rằng cụm “On-die ECC” là tính năng cũng có trên bộ nhớ Non-ECC, nên không liên quan đến ECC đang nói ở đây
Phải mua ECC DDR5 UDIMM, và đừng mua nhầm ECC DDR5 RDIMM vốn không tương thích với bo mạch chủ AM5
ECC DDR5 UDIMM có thể có độ rộng 80 bit hoặc 72 bit, miễn là không phải 64 bit như Non-ECC DDR5 UDIMM
Lần trước khi tôi kiểm tra, ASUS có nhiều bo AM5 hỗ trợ ECC nhất, và tôi thích PRIME X670E-PRO WIFI nhất vì khả năng mở rộng PCIe ngoài khe GPU cũng tốt
Cấp 0 là hoàn toàn không hỗ trợ, đến mức cắm RAM ECC vào thì không khởi động được; cấp 1 là có thể cắm nhưng không dùng chức năng ECC; cấp 2 là có mạch nhưng nhà sản xuất bo mạch chủ chưa xác minh việc phát hiện/sửa lỗi; cấp 3 là có chức năng ECC và đã được nhà sản xuất xác minh
Với bo cấp máy chủ như Supermicro, có thể kỳ vọng cấp 3
Khi thấy “ECC supported” trên bộ xử lý AMD thì khó biết đó là cấp nào, nhưng với Intel, nếu CPU/chipset nói hỗ trợ ECC thì có thể xem là thực sự hỗ trợ
Tôi đã cố ý dùng ECC DIMM lỗi để tạo ra lỗi có thể sửa và lỗi không thể sửa trong thời gian ngắn
Khi các thành phần khác đều đã đầy đủ thì khả năng ASRock không đi dây là thấp, nhưng nếu kernel nói có ECC thì tôi cho là đúng
Nếu không thì cứ trả bo vì lỗi và dùng nhà sản xuất khác
Chỉ tiếc là không có bo mini-ITX/mATX X670E. Loại đó chỉ ASUS có
dmidecodebáo độ rộng dữ liệu 128 bit chứ không phải 72 bit, nhưng cũng báo cả sửa lỗi đa bit chứ không chỉ một bitTrên bo Intel dùng UDIMM, chẳng hạn Supermicro+Xeon, tôi quen thấy 72 bit, nhưng thông tin này có vẻ chịu ảnh hưởng từ cách bộ điều khiển bộ nhớ và bo mạch chủ báo cáo hơn là hỗ trợ phần cứng thực tế
Dù vậy, EDAC hoạt động, driver đúng được đăng ký, và thỉnh thoảng tôi nhận được cảnh báo từ EDAC/RAS rằng lỗi có thể sửa đã thực sự được sửa, nên tôi xem thế là đã đủ kết luận
Hơi lạc đề một chút, nhưng hỗ trợ ECC hoạt động cả trên nền tảng AM4 cũ và nhân APU Zen3 trông như thế này, và chắc chắn tồn tại trên hệ thống của tôi
Tôi dùng ASRock B550M-ITX/ac với AMD Ryzen 5 PRO 5650G, và trước đây khi dùng Ryzen 5 3600 cùng GPU rời thì nó cũng hoạt động y hệt
Trên GNU/Linux mới, để phát hiện và ghi lại hoạt động ECC, cần bật dịch vụ
rasdaemonDịch vụ này diễn giải MCE và các lỗi liên quan đến phần cứng khác rồi lưu vào cơ sở dữ liệu; đầu ra được truy vấn ở trên cũng là kết quả của việc đó
Tuy nhiên nghĩ lại thì tần suất khá cao, nên có thể mô-đun bộ nhớ đã hỏng. Đặc biệt là lần nào cũng cùng mô-đun và cùng địa chỉ
https://www.asus.com/global/support/FAQ/1045186/
dmidecodehiển thị độ rộng 72 bit vàdmesg | grep -i EDACcũng cho thấy khá nhiều thông tin như ECC đã bậtNhưng đầu ra của lệnh đó trống, và chỉ có “No Memory errors”, “No PCIe AER errors”, “No Extlog errors”, “No MCE errors”
Tôi thắc mắc có cần bật thứ gì để lỗi được ghi lại không, hay là tôi đã bị
dmidecodevàdmesgđánh lừaBài hay. Trên bo mạch Threadripper của tôi cũng đang dùng ECC RAM
Một trong những điều đội vận hành Blekko phát hiện trên bo mạch Intel là phải báo rõ cho bo mạch rằng hãy thực sự báo cáo các lỗi có thể sửa được
Mặc định là nếu có lỗi không thể khôi phục thì phát machine check, còn những lỗi khác thì bỏ qua
Tôi nhớ trên khoảng 1600 hệ thống 192GB, chúng tôi thấy lỗi có thể sửa được khoảng mỗi tuần 1 lần
Trong 6 năm tôi không nhớ có lỗi không thể khôi phục nào, nên như vậy là khá tốt
Chúng tôi có quy mô thiết bị tương tự và dung lượng RAM trung bình cũng gần như vậy, và thỉnh thoảng cũng có lỗi không thể khôi phục. Có lẽ mỗi năm một hai lần, nên đã có chính sách xử lý
Theo dõi xem đó có phải chỉ xảy ra một lần hay không; nếu không sớm lỗi lại thì coi là ổn, còn nếu sớm lỗi lại thì thay RAM
Các bo mạch máy chủ tốt hơn còn dùng LED để cho biết cần thay mô-đun RAM nào
Với lỗi có thể sửa được thì chúng tôi không thay cho đến khi số lần khá lớn; có hệ thống lỗi một hai lần mỗi ngày nhưng vẫn chạy tốt trong thời gian dài
Ngược lại cũng có hệ thống lâu nay 0 lỗi, rồi trong vài ngày xuất hiện một số ít lỗi trước khi nhảy vọt lên con số lớn
Một hệ thống tăng tới hàng nghìn lỗi mỗi giờ, đến mức không dùng nổi vì chi phí xử lý ngoại lệ machine check, nhưng chu kỳ báo cáo là 1 giờ nên trước lần báo cáo tiếp theo chúng tôi không biết nguyên nhân
Hiện tôi dùng Ryzen 3700X và bo mạch chủ ASUS TUF Gaming X570, và cần thêm hiệu năng đơn nhân cũng như tốc độ NVMe/đĩa
Tôi đã dùng GPU kép, 2 M.2 NVMe và 6 SATA
Tôi đang cân nhắc nâng cấp cuối năm; vì số lane PCIe nên cũng từng nghĩ thoáng qua đến Threadripper, nhưng Zen4 Threadripper vẫn chưa có và giá có lẽ sẽ rất cao
Các lựa chọn là nâng lên Ryzen 5900X và giữ nguyên phần còn lại, hoặc chi thêm tiền để chuyển sang AM5 Ryzen cùng bo mạch chủ mới
Tôi cũng đã xem Intel, nhưng thấy số lane PCIe dừng ở 20 nên nghiêng về việc loại ra
Tôi muốn thêm adapter 10Gb để đưa một phần đĩa quay ra ngoài, nên cần nhiều lane PCIe hơn
Hiệu năng đa nhân của 3700X là đủ, và nếu mua bo mạch chủ mới thì vì tốc độ, tôi muốn tối thiểu mirror 2 NVMe và ít nhất 6 cổng SATA
Tôi không rõ phía AMD thế nào, nhưng bo mạch Intel thường chỉ có một khe M.2 nối trực tiếp với CPU, ba khe còn lại đi qua chipset, nên cũng chia sẻ nút thắt cổ chai với card Ethernet 10Gb
Cuối cùng, mua bo mạch hỗ trợ PCIe 5.0 và một SSD đơn đủ lớn lại nhanh hơn nhiều; cả tổng IOPS lẫn throughput đều cao hơn mảng RAID 0 trước đây
5900X không phải là một nâng cấp lớn đến vậy
Để tham khảo, Hetzner đã cung cấp máy chủ CPU Ryzen 7000 kèm ECC RAM từ vài tháng trước
https://www.hetzner.com/dedicated-rootserver/matrix-ax
AX52 cung cấp ECC RAM dưới dạng nâng cấp tùy chọn, còn AX102 có ECC mặc định
Tôi không nghĩ họ lại cung cấp ECC mà thực tế không hoạt động
Vì vậy có lẽ họ có thể đảm bảo chắc chắn hỗ trợ ECC từ đầu đến cuối
Mong các nhà lập pháp tỉnh táo và bắt buộc ECC
Thật bất an khi phần lớn hoạt động điện toán diễn ra trên các hệ thống Non-ECC dễ tổn thương
Đây là một dạng phân khúc thị trường nhân tạo cực kỳ tệ hại
Làm sao có thể kỳ vọng những người như vậy lập pháp về ECC được
Nhưng hệ thống Intel của tôi dùng 64GB RAM Non-ECC, chạy nửa ngày mỗi ngày rồi ban đêm hibernate, chạy 3D CAD, Photoshop, VS Code cài đầy extension, các container WSL2 Docker, vậy mà hầu như không thấy lỗi
Cũng không crash hay màn hình xanh
Tôi tò mò chính xác thì nên kỳ vọng điều gì từ lỗi bit flip. Nếu single-bit flip xảy ra thường xuyên như vậy khi gần như dùng đầy 64GB RAM, thì có vẻ nó phải lộ ra bằng cách nào đó chứ
Tôi không đủ can đảm để chập chân về mặt vật lý, cũng không đủ kiên nhẫn để chờ DDR5 link training vài phút mỗi lần trong khi ép xung RAM từ từ
Vì vậy tôi hài lòng với việc bộ điều khiển bộ nhớ báo rằng ECC đã được bật
Thay vào đó, thử thổi luồng khí ấm từ máy sấy tóc vào RAM thì sao? Trước đây tôi từng thấy người ta dùng kỹ thuật như vậy để tạo lỗi
https://hackaday.com/2022/01/29/blast-chips-with-this-bbq-li...
https://hackaday.com/tag/emfi/
Không khuyến nghị cho sử dụng thực tế, nhưng có thể dùng khi tìm giới hạn bộ nhớ hoặc tạo lỗi
Trên hệ thống I7-4770K không ép xung của tôi, lỗi xuất hiện, nhưng các bo mạch Supermicro X10 đời cũ dường như không phát hiện lỗi dù chạy kiểm thử Rowhammer vô thời hạn
Tuy nhiên nếu các hệ thống mới được thiết kế để không dễ bị tấn công Rowhammer, cách này có thể không hiệu quả
RAM của Raspberry Pi 4B và CM4 được biết là dùng RAM ECC, nhưng khác với ECC đang nói ở đây
Đó là ECC on-die, nhằm cải thiện tỷ lệ chip đạt chuẩn, và lỗi ECC được sửa mà không được báo cáo qua phần cứng
Lỗi ECC không thể sửa có lẽ chỉ được đọc thành dữ liệu sai
Tôi thắc mắc liệu các mô-đun RAM hiện đại cũng dùng chip có ECC on-die hay không
Link training có thể tắt trong BIOS, nên có thể nhanh chóng tìm các thiết lập băng thông sát ngưỡng
Kết quả có thể không lặp lại hoàn toàn, nhưng điều đó không quan trọng
Một số, có thể là tất cả bo mạch chủ ASUS AM5 có hỗ trợ ECC chính thức
Cả sách hướng dẫn bo mạch và sách hướng dẫn BIOS của mẫu tôi vừa kiểm tra đều có nêu
Một trong các thiết lập BIOS liên quan có giá trị mặc định là Auto, nhưng trái với trực giác, ở trạng thái này nó bị vô hiệu hóa nên cần đổi lại
Việc báo cáo ECC của các bộ xử lý này đã được đưa vào Linux 6.5, nên người dùng Debian Stable phải chờ nó vào Backports hoặc đi lệch khỏi lộ trình chuẩn
https://www.phoronix.com/news/AMD-EDAC-Ryzen-7000-Series
Nếu có thể xem giá trị thực sự được áp dụng thì còn đỡ, nhưng chín trên mười lần là không rõ ràng
Có tin đồn rằng trong các phiên bản AGESA cũ có lỗi khiến chipset không nhận diện và sử dụng đúng RAM ECC
Dù chipset đó lẽ ra phải hỗ trợ
Với bo mạch chủ đang cân nhắc, cần kiểm tra xem có bản cập nhật firmware chứa ít nhất AGESA 1.0.0.5 patch C hay không
https://www.reddit.com/r/truenas/comments/10lqofy/
AGESA là một phần của firmware hệ thống AMD, dùng để khởi tạo các thành phần hệ thống cốt lõi: https://en.wikipedia.org/wiki/AGESA
Tôi đã cập nhật lên AGESA 1.0.0.7b trước khi lắp RAM ECC
Tôi không biết rằng Ryzen 7000 series không nêu rõ hỗ trợ ECC một cách chính thức
Ví dụ dòng ASRock Rack có hỗ trợ: https://www.asrockrack.com/general/productdetail.asp?Model=1...
Bo mạch chủ ASUS này cũng tuyên bố hỗ trợ ECC: https://www.asus.com/us/motherboards-components/motherboards...
Cả hai đều chưa ra mắt vào thời điểm tôi mua bo mạch chủ AM5 đầu tiên. Lúc đó mới ngay sau khi ra mắt, và các con số hiệu năng quá tốt nên tôi đã xuống tiền sớm
Tất cả CPU Ryzen 7000 series đang bán hiện nay đều có hỗ trợ ECC chính thức, nhưng cũng cần hỗ trợ từ bo mạch chủ
Kiểu hỗ trợ ECC có điều kiện này vốn đã tồn tại trên CPU tiêu dùng AMD từ tận Athlon 64, nhưng có lẽ đây là lần đầu tôi thấy nó được nêu trong tài liệu marketing của AMD đối với Ryzen 7000 series
Điều tác giả nói là việc tài liệu bo mạch chủ ASRock đã bỏ phần đề cập hỗ trợ ECC
Vì ASRock từng nêu rõ hỗ trợ ECC trên các bo mạch chủ Ryzen trước đây, nên đây là một thay đổi đáng chú ý
Ví dụ trang thông số Ryzen 5 7600: https://www.amd.com/en/product/12756#:~:text=ECC%20Support,R...)
Hơn nữa nó còn bị nhầm với ECC on-chip mà mọi DDR5 đều dùng
DDR5 cần ECC on-chip để sửa lỗi phát sinh trong quá trình hoạt động bình thường, nhưng đó không phải là ECC bảo vệ cả dữ liệu được truyền qua bus bộ nhớ tới CPU