- Phân tích báo cáo crash của Firefox cho thấy lỗi phần cứng do bit flip chiếm một phần đáng kể trong tổng số vụ crash
- Trong khoảng một tuần gần đây, khoảng 25.000 trên 470.000 báo cáo crash được phát hiện là các trường hợp có khả năng liên quan đến bit flip
- Đã xác nhận rằng lỗi phần cứng, chứ không phải bug phần mềm, có thể là nguyên nhân của tối đa 10~15% số vụ crash
- Công cụ kiểm tra bộ nhớ chạy sau khi crash chỉ kiểm tra tối đa 1GiB trong vòng chưa đầy 3 giây, nhưng vẫn phát hiện được nhiều lỗi thực tế
- Vấn đề này ảnh hưởng đến mọi thiết bị như PC, smartphone, router, máy in, cho thấy giới hạn về độ tin cậy của phần cứng tiêu dùng
Firefox crash và phát hiện bit flip
- Một phương pháp đã được thiết kế để phát hiện hiện tượng bit flip trong báo cáo crash của Firefox, sau đó công cụ kiểm tra bộ nhớ tự động chạy trên thiết bị người dùng sau khi crash đã được triển khai
- Công cụ này chạy trên thiết bị người dùng ngay sau khi trình duyệt crash để kiểm tra lỗi bộ nhớ
- Kết quả phân tích dữ liệu thu thập được xác nhận rằng heuristic phát hiện bit flip là hợp lệ, và nhiều vụ crash xảy ra do bộ nhớ lỗi hoặc phần cứng không ổn định
Kết quả thống kê
- Trong một tuần gần đây đã ghi nhận khoảng 470.000 báo cáo crash, nhưng đây chỉ là một phần của tổng số crash (theo cơ chế opt-in)
- Trong đó khoảng 25.000 trường hợp (khoảng 5%) được phát hiện là crash có khả năng liên quan đến bit flip
- Tỷ lệ thực tế là một ước tính thận trọng, và có thể cao hơn gấp đôi
- Trong toàn bộ các vụ Firefox crash, tối đa 10% là do lỗi phần cứng; nếu loại trừ các vụ crash do cạn kiệt tài nguyên như thiếu bộ nhớ, con số này lên tới khoảng 15%
- Con số này có thể bị lệch phần nào vì người dùng có phần cứng lỗi thường gặp crash thường xuyên hơn
Kết quả kiểm tra bộ nhớ
- Công cụ kiểm tra bộ nhớ chạy sau khi crash có thể kiểm tra tối đa 1GiB bộ nhớ trong vòng chưa đầy 3 giây, nhưng vẫn phát hiện được nhiều lỗi phần cứng thực tế
- Trong hai vụ crash được cho là do bit flip, một vụ đã xác nhận có lỗi thực sự
- Dù phạm vi kiểm tra bị giới hạn, kết quả vẫn cho thấy tỷ lệ lỗi thực tế cao
Ảnh hưởng trên toàn bộ phần cứng
- Vấn đề này ảnh hưởng không chỉ đến máy tính và smartphone mà còn cả router, máy in và mọi thiết bị điện tử khác
- Ngay cả trên các thiết bị như MacBook dùng ARM với RAM được hàn trên package CPU cũng có nhiều vụ crash được báo cáo
- Việc thay RAM trên các thiết bị này là bất khả thi nếu không có thiết bị chuyên dụng và kỹ thuật viên lành nghề
Thảo luận cộng đồng và thông tin bổ sung
- Một số người dùng đã chia sẻ các trường hợp RAM lỗi và kinh nghiệm chạy
memtest86, đồng thời chỉ ra sự thiếu hụt trong khâu kiểm soát chất lượng của nhà sản xuất
- Đã có thảo luận về sự cần thiết của ECC RAM, với ý kiến cho rằng chỉ riêng SECDED ECC cũng có thể kéo dài đáng kể tuổi thọ của thiết bị tiêu dùng
- Có các nghiên cứu về lỗi bộ nhớ trong môi trường server, nhưng cũng có ý kiến cho rằng điều kiện ở thiết bị tiêu dùng khác biệt nên khó so sánh trực tiếp
- Phân tích dữ liệu cho thấy mối tương quan mạnh giữa độ cũ của thiết bị và tỷ lệ phát sinh lỗi bộ nhớ
- Bit flip không chỉ gây crash đơn thuần mà còn có thể dẫn đến mất dữ liệu vĩnh viễn như hỏng hệ thống tập tin, vì vậy tầm quan trọng của filesystem dựa trên checksum được nhấn mạnh
Kết luận
- Đã thấy rõ rằng một tỷ lệ đáng kể các vụ Firefox crash bắt nguồn từ vấn đề phần cứng chứ không phải lỗi phần mềm
- Nhu cầu về phát hiện lỗi bộ nhớ và áp dụng ECC trên thiết bị tiêu dùng đang được nhấn mạnh
- Đây là một ví dụ cho thấy việc đảm bảo độ tin cậy phần cứng gắn trực tiếp với việc cải thiện độ ổn định phần mềm
1 bình luận
Ý kiến trên Hacker News
Tôi đã từng nói về chuyện này trên HN trước đây, nhưng một đồng nghiệp cũ thời ArenaNet của tôi là Mike O’Brien (người tạo ra battle.net) đã xây dựng một hệ thống phát hiện bit flip cho Guild Wars vào khoảng năm 2004
Ở mỗi khung hình (khoảng 60FPS), hệ thống cấp phát bộ nhớ ngẫu nhiên, chạy các phép toán và so sánh kết quả với bảng giá trị chuẩn, và khoảng 1 trên 1000 máy đã thất bại
Nguyên nhân chủ yếu là CPU ép xung, timing bộ nhớ sai, thiếu điện, tản nhiệt kém, và vì game render rất nhiều địa hình ngoài trời nên máy tính thường bị quá nhiệt
Về sau người ta còn nhận ra nguyên nhân có thể là vấn đề chất lượng linh kiện giá rẻ của Dell hoặc tấn công RowHammer
Tôi đã viết đoạn mã để khi bài kiểm tra thất bại thì mở trình duyệt và hiện một trang bảo người dùng “hãy vệ sinh quạt máy tính”
Trong những trường hợp như vậy, tôi thường nghĩ phần lớn là do bit flip ngẫu nhiên hoặc phần cứng lỗi
Nó có đắt hơn một chút, nhưng gần như giải quyết được hầu hết các vấn đề kiểu này. Một số mainboard consumer đã hỗ trợ ECC rồi
Không có phí thuê bao hàng tháng nên bố mẹ tôi rất thích, còn hệ thống build 8 kỹ năng thì thực sự là thiên tài
Nếu có phần 3, tôi mong họ tăng thêm độ tự do trong việc thể hiện build
Trong lúc kiểm thử ép xung, chính ECC đã giúp phát hiện các lỗi nhỏ, và từ đó tôi không còn tin tưởng việc ép xung không có ECC nữa
DDR5 đặc biệt khó đảm bảo độ ổn định và nhạy cảm với nhiệt, nên tôi cho rằng ép xung không có ECC là bất khả thi
Bộ nhớ ECC lẽ ra phải trở thành tiêu chuẩn từ khi dung lượng vượt 1GB
Giờ đây RAM RGB LED vô dụng thì rẻ, còn ECC lại đắt, điều đó thật bực mình
AMD còn “hỗ trợ một phần” ECC trên CPU consumer, nhưng Intel chỉ cho phép ở phân khúc workstation
Nhưng chưa rõ nó có đáng tin cậy hơn DDR4 không ECC hay không
Nếu có thể, tôi muốn dùng một chiếc laptop có ECC
Nhưng trong môi trường máy chủ với điều kiện điện và nhiệt độ ổn định, nó ngăn được 99% lỗi
Nhóm Go đã đưa vào sử dụng hệ thống báo cáo crash dựa trên telemetry
Họ dùng
runtime.SetCrashOutputđể thu thập stack crash của goroutine và đã bắt được hàng trăm lỗiNhưng một số báo cáo vẫn là những trường hợp không thể giải thích, như hỏng bộ nhớ hoặc CPU hoạt động sai
Vì phần lớn người dùng laptop dùng bộ nhớ không có ECC, họ cho rằng khả năng cao là lỗi phần cứng
Tôi cũng muốn chia sẻ một trường hợp bit flip trên blog JuliaLang
Khẳng định rằng “10% crash của Firefox là do lỗi phần cứng” nghe có vẻ quá mạnh tay
Trên các trình duyệt nền Chromium, tôi không thấy crash xảy ra thường xuyên đến vậy
Việc Chrome ổn định hơn có thể là vì họ xử lý tốt hơn 90% còn lại của các lỗi phần mềm
Ngược lại, điều đó cũng có thể có nghĩa là phần lớn crash của Firefox là vấn đề phần mềm
Tôi thấy có bài viết nói rằng “chúng tôi chắc chắn nguyên nhân là bit flip”, nhưng giải thích về cách phát hiện lại chưa đủ rõ
memory_test.rs trong mã nguồn Mozilla có vẻ cũng làm vai trò như vậy
Tôi mua PC mới và ép xung RAM lên 5800MHz thì Fedora bắt đầu treo kỳ lạ và ứng dụng không khởi chạy được
Khi chạy memtest, chỉ sau 2 phút là lỗi đỏ xuất hiện hàng loạt; hạ tốc độ xuống 5200 thì ổn định
Thật đúng lúc khi lại thấy một bài như thế này trên trang nhất HN
Tôi ngạc nhiên vì tỷ lệ crash của Firefox cao hơn tôi nghĩ
Suốt nhiều năm nay tôi vẫn liên tục gặp crash khi thoát và lần nào cũng gửi báo cáo
Dù tất cả extension đều là WebExtension, nguyên nhân hiển thị lại rất đa dạng
Firefox xử lý nhiều cửa sổ và tab tốt, nhưng độ ổn định thì vẫn cần cải thiện
Quá trình thoát giải phóng rất nhiều bộ nhớ nên bit flip dễ lộ ra hơn
Nếu muốn xác minh nguyên nhân, tốt nhất nên chạy kiểm tra bộ nhớ
about:crashesThật vui khi thấy có người thực sự thu thập loại dữ liệu này
Tôi cho rằng vấn đề bộ nhớ lỗi là một trong những chủ đề bị đánh giá thấp nhất trong ngành điện toán
Sẽ rất hay nếu có một bản tổng hợp ngắn theo dạng technical whitepaper