12/10/2026 · VietTechies · Biên tập

Đến ngày 25 tháng 2 năm 1991, một khẩu đội tên lửa Patriot của Lục quân Mỹ, làm nhiệm vụ bảo vệ căn cứ không quân Dhahran ở Ả Rập Xê Út, đã chạy liên tục hơn 100 giờ, và thời gian do máy tính của khẩu đội tính ra đã lệch khoảng một phần ba giây. Hôm ấy, một quả Scud của Iraq, loại tên lửa đạn đạo tầm ngắn, lao tới. Khẩu đội không khai hỏa. Quả Scud rơi trúng một doanh trại của Lục quân, làm 28 lính Mỹ thiệt mạng.
Một phiên bản phần mềm bù sai số này đã được phát hành từ chín ngày trước đó. Phải đến một ngày sau vụ tấn công, phiên bản ấy mới tới Dhahran.
Tháng 3 năm 1992, một bài viết trên tạp chí Science gọi nguyên nhân sự cố là “một lỗi toán học cực nhỏ”. Nói vậy đúng, nhưng chưa đủ. Một nhà khoa học máy tính đã xem xét kỹ hơn và lập luận rằng riêng sai số nhỏ xíu ấy lẽ ra không gây hại gì.
Một phần mười giây không thể biểu diễn chính xác bằng nhị phân
Theo Văn phòng Kế toán Tổng hợp Hoa Kỳ (GAO), cơ quan điều tra của Quốc hội Mỹ, máy tính điều khiển vũ khí của Patriot “dựa trên một thiết kế từ thập niên 1970, có khả năng tương đối hạn chế trong các phép tính đòi hỏi độ chính xác cao”. Máy dùng thanh ghi dài 24 bit. Đồng hồ trong máy đếm thời gian bằng số nguyên, mỗi đơn vị là một phần mười giây, và đếm lại từ 0 mỗi khi máy tính khởi động lại.
Phần mềm nhân số đếm này với 0,1 để ra số giây. Nhưng một phần mười không có dạng nhị phân chính xác: viết ở cơ số 2, ta được 0,000110011001100…, lặp lại mãi không dứt. Để lưu vừa trong một thanh ghi dấu phẩy tĩnh (fixed-point) 24 bit, số 0,1 mà Patriot dùng đã bị cắt bớt, nên nhỏ hơn giá trị thật khoảng một phần triệu.
Tức là cứ mỗi nhịp đếm lại hụt mất khoảng 0,000000095 giây, quá nhỏ để gây ảnh hưởng gì trong vòng một phút. Nhưng số đếm càng lớn, tổng sai số càng lớn. Theo số liệu của GAO, sau 8 giờ hoạt động liên tục, thời gian tính ra đã lệch 0,0275 giây; sau 100 giờ, độ lệch là 0,3433 giây.
Vì sao sai số nhỏ xíu lại hóa lớn
Khi radar phát hiện một vật thể di chuyển giống tên lửa Scud, một “cổng cự ly” (range gate) dự đoán vùng trời nhỏ nơi vật thể ấy sẽ xuất hiện tiếp theo, dựa trên vận tốc của vật thể và thời điểm phát hiện gần nhất. Hệ thống chỉ xử lý những gì nằm trong vùng này. Nếu tìm thấy vật thể trong vùng ấy, hệ thống xác nhận đây là một quả Scud.
Việc bám mục tiêu lẽ ra phải phụ thuộc vào khoảng thời gian giữa hai xung radar, chứ không phải vào thời gian tuyệt đối trên đồng hồ. Nếu cả hai mốc thời gian cùng mang một sai số tương đối nhỏ như nhau, sai số ấy gần như triệt tiêu khi lấy mốc này trừ mốc kia. Robert Skeel, nhà khoa học máy tính tại Đại học Illinois, đã chỉ ra điều này vào tháng 7 năm 1992 trên SIAM News, bản tin của Hiệp hội Toán học Công nghiệp và Ứng dụng (SIAM): nếu các sai số nhất quán, hiệu giữa hai mốc thời gian “lẽ ra chỉ sai 0,0001%, một mức thực sự không đáng kể”.
Skeel viết: “Tìm hiểu thêm thì bí ẩn đã sáng tỏ.” Khi các khẩu đội Patriot được điều sang vùng Vịnh, phần mềm của hệ thống, viết bằng hợp ngữ (assembly) từ khoảng 20 năm trước, đã được sửa nhiều lần để đối phó với tên lửa đạn đạo tốc độ cao. Ít nhất một lần sửa đã bổ sung một chương trình con giúp chuyển đổi thời gian đồng hồ với độ chính xác cao hơn. Chương trình cần đến phép chuyển đổi này ở khoảng nửa tá chỗ, nhưng không phải chỗ nào cũng được sửa để gọi chương trình con mới. Ông viết: “Vì vậy, khi lấy thời gian chính xác hơn của một xung radar trừ đi thời gian đã bị cắt cụt và kém chính xác hơn của một xung radar khác, sai số không còn triệt tiêu nữa.”
Theo giải thích của Skeel, chính lần sửa đổi chỉ được áp dụng một phần ấy đã khiến sai số trở nên đáng kể: hiệu thời gian giữa hai xung lúc này mang theo toàn bộ độ trôi của đồng hồ kể từ lần khởi động lại gần nhất, mà ở Dhahran là khoảng một phần ba giây. Báo cáo của GAO, vốn không nhắc tới lần sửa đổi này, ước tính rằng sau 100 giờ, cổng cự ly đã dịch đi khoảng 687 mét.
Lời cảnh báo không kèm con số
Patriot được chế tạo cho một cuộc chiến khác. Theo GAO, ban đầu hệ thống được thiết kế cho châu Âu, để chống máy bay và tên lửa hành trình của Liên Xô bay với tốc độ tối đa khoảng Mach 2, và để “cơ động, chỉ hoạt động vài giờ tại một địa điểm”. Ở vùng Vịnh, các khẩu đội nhìn chung đóng tại vị trí cố định và phải đối phó với tên lửa Scud bay ở tốc độ khoảng Mach 5.
Ngày 11 tháng 2 năm 1991, Văn phòng Dự án Patriot của Lục quân nhận được dữ liệu từ Israel cho thấy cổng cự ly bị dịch 20% sau 8 giờ hoạt động liên tục. Các quan chức dự án cho biết khi độ dịch lên tới 50%, Patriot sẽ không bám được Scud nữa; ngoại suy từ số liệu của Israel, GAO ước tính ngưỡng này đến sau khoảng 20 giờ. Các quan chức Lục quân coi trường hợp của Israel là cá biệt. Dù vậy, họ vẫn sửa phần mềm để bù sai số, và bản sửa được phát hành ngày 16 tháng 2. Nhưng họ không dùng dữ liệu của Israel để tính xem Patriot có thể chạy bao lâu trước khi sai số làm hệ thống mất tác dụng.
Ngày 21 tháng 2, văn phòng dự án cảnh báo các đơn vị sử dụng Patriot rằng thời gian chạy rất dài có thể làm dịch cổng cự ly, và cho biết sắp có một bản sửa phần mềm. GAO viết: “Tuy nhiên, thông báo không nêu rõ thế nào là thời gian chạy rất dài.” Các quan chức Lục quân mặc nhiên cho rằng các đơn vị sẽ không để khẩu đội chạy lâu đến thế, nên thấy không cần đưa ra hướng dẫn chi tiết hơn.
Một lần khởi động lại mất từ 60 đến 90 giây và đưa đồng hồ về 0. Theo GAO, nếu khởi động lại vài giờ một lần thì đã có thể loại bỏ được tình trạng cổng cự ly dịch đáng kể. Bốn ngày sau lời cảnh báo, khẩu đội ở Dhahran đã chạy liên tục hơn 100 giờ. Các quan chức Lục quân cho biết việc thu xếp vận chuyển trong thời chiến tốn thời gian, khiến bản phần mềm mới bị chậm đến ngày 26 tháng 2.
Hồ sơ nói gì, và không nói gì
Tháng 5 năm 1991, các quan chức Lục quân được tờ The New York Times dẫn lời đã gọi sự cố này là “một hiện tượng bất thường chưa từng xuất hiện trong hàng nghìn giờ thử nghiệm”. Nhưng tổng số giờ thử nghiệm chẳng nói lên được bao nhiêu về một lỗi chỉ lộ ra sau một lần chạy dài, không ngắt quãng. Hơn nữa, dữ liệu từ Israel đã cho thấy hiện tượng dịch cổng cự ly từ hai tuần trước vụ tấn công.
Hồ sơ cũng có những giới hạn. GAO cho biết sai số làm hệ thống tìm mục tiêu ở sai chỗ và khiến việc đánh chặn thành công “khó xảy ra hơn”. Liệu một khẩu đội tính giờ chính xác có tiêu diệt được quả Scud này hay không lại là một câu hỏi khác. Một báo cáo sau đó của GAO, công bố tháng 9 năm 1992, mang tựa đề “Không có dữ liệu để kết luận chắc chắn Patriot đã hoạt động tốt đến mức nào”.
Bài học vượt ra ngoài chuyện Patriot
Nếu đọc như câu chuyện về một hằng số sai, vụ Dhahran dạy bạn dè chừng con số 0,1. Còn nếu đọc theo cách giải thích của Skeel, câu chuyện dạy một điều rộng hơn: một sai số nhỏ mà mọi chỗ đều mắc như nhau thường sẽ tự triệt tiêu khi bạn lấy mốc thời gian này trừ mốc thời gian kia. Sửa chỗ này mà không sửa chỗ kia thì bạn đang âm thầm so sánh hai chiếc đồng hồ khác nhau.
Bài học còn lại là về thời gian chạy liên tục (uptime). Sai số lớn dần theo từng nhịp đếm: chạy vài giờ thì còn nhỏ, nhưng theo ngoại suy của GAO, sau khoảng 20 giờ đã đủ để đẩy một quả Scud ra ngoài cổng cự ly. Một lời cảnh báo về “thời gian chạy rất dài” không cho các kíp vận hành điều gì cụ thể để hành động. Một con số thì đã cho họ điều đó.
Phần nào trong hệ thống của bạn mới chỉ được kiểm thử lâu bằng thời gian nó được thiết kế để chạy, chứ chưa lâu bằng thời gian nó thực sự chạy?
Bài liên quan
Đọc bằng ngôn ngữ khác: English
Nguồn
- U.S. General Accounting Office, “Patriot Missile Defense: Software Problem Led to System Failure at Dhahran, Saudi Arabia”, GAO/IMTEC-92-26, ngày 4 tháng 2 năm 1992 (toàn văn báo cáo, PDF)
- Trang thông tin của GAO về báo cáo GAO/IMTEC-92-26
- Robert Skeel, “Roundoff Error and the Patriot Missile”, SIAM News, tập 25, số 4, tháng 7 năm 1992 (bản lưu do Douglas N. Arnold đăng tải)
- Douglas N. Arnold, “The Patriot Missile Failure”, Đại học Minnesota
- RISKS Digest, tập 11, số 70: “Patriot Lapse and Software Failure”, trích dẫn The New York Times ngày 20 tháng 5 năm 1991
- U.S. General Accounting Office, “Operation Desert Storm: Data Does Not Exist to Conclusively Say How Well Patriot Performed”, GAO/NSIAD-92-340, tháng 9 năm 1992
- Ảnh bìa: tên lửa Patriot phóng lên đánh chặn một tên lửa Scud của Iraq trên bầu trời Tel Aviv, ngày 12 tháng 2 năm 1991 (ảnh minh họa, không phải khẩu đội ở Dhahran). Ảnh: Nathan Alpert, Government Press Office (Israel), qua Wikimedia Commons, CC BY-SA 3.0
