Đến nội dung chính
Thư viện GKNơi khơi nguồn tò mò
Tiếng Việt

Chậm đi nhanh hơn phần cứng tăng tốc: Định luật Wirth (Wirth's Law)

Chiếc máy tính xách tay mới mua chạy rất nhanh trong vài tháng đầu. Nhưng sau vài lần cập nhật hệ điều hành và chương trình, chẳng mấy chốc nó bắt đầu giật, lag như chiếc máy tính cũ. Chip nhanh hơn qua từng năm, nhưng tốc độ người dùng cảm nhận lại hiếm khi được cải thiện. Có một câu nói đã chỉ ra hiện tượng kỳ lạ này một cách sắc sảo. Đó chính là “Định luật Wirth (Wirth's Law)”.

Nói đơn giản, định luật Wirth là một quy luật kinh nghiệm cho rằng “tốc độ phần mềm chậm đi nhanh hơn tốc độ phần cứng tăng tốc”. Điều này có nghĩa là dù phần cứng có tốt lên đến đâu, phần mềm cũng tiêu tốn trước phần hiệu năng tăng thêm ấy, khiến tốc độ người dùng cảm nhận vẫn giậm chân tại chỗ, thậm chí còn thụt lùi.

Trong tài liệu này, chúng ta sẽ lần lượt tìm hiểu nguồn gốc của định luật Wirth, lý do phần mềm ngày càng nặng, những ví dụ hiện diện quanh ta ngày nay và các cách xây dựng phần mềm gọn nhẹ.

Sơ đồ giải thích định luật Wirth. Trong ví dụ giả định, khối lượng công việc 4 với tốc độ xử lý 1 mất 4 giây, còn khối lượng công việc 12 với tốc độ xử lý 2 mất 6 giây; nếu khối lượng công việc tăng nhanh hơn tốc độ phần cứng, thời gian chờ có thể kéo dài. Sơ đồ đề xuất tập trung vào các chức năng thiết yếu, giảm mã không cần thiết và đo tốc độ cùng mức sử dụng bộ nhớ.
Đây là ví dụ giả định được đơn giản hóa để giúp hiểu định luật Wirth, không phải kết quả đo hiệu năng thực tế. Nguồn: Niklaus Wirth, “A Plea for Lean Software”, Computer 28(2), 64–68 (1995). Bài báo gốc

Phần mềm nặng nề đuổi kịp những con chip ngày càng nhanh

Định luật Wirth bắt nguồn từ đâu?

Trong phòng máy tính của một trường đại học Thụy Sĩ vào thập niên 1990, trên bàn gỗ có một máy trạm cũ màu be với màn hình CRT đang hiển thị hình ảnh mờ, bàn phím và chuột, những chồng tạp chí học thuật có bìa để trống cùng một tách cà phê; ngoài cửa sổ thấp thoáng những ngọn núi.

Tên gọi của định luật này bắt nguồn từ nhà khoa học máy tính người Thụy Sĩ Niklaus Wirth. Wirth công bố ngôn ngữ lập trình Pascal vào năm 1970 và nhận giải Turing, được gọi là giải Nobel của ngành khoa học máy tính, vào năm 1984.

(1) “Lời kêu gọi xây dựng phần mềm gọn nhẹ”
Năm 1995, Wirth đăng bài viết “Lời kêu gọi xây dựng phần mềm gọn nhẹ (A Plea for Lean Software)” trên tạp chí Computer. Trong bài, ông dẫn lời đồng nghiệp Martin Reiser rằng “phần mềm đang chậm đi nhanh hơn tốc độ phần cứng tăng tốc”, và câu nói này về sau được gọi là định luật Wirth.

(2) Sự phình to của phần mềm qua những con số
Wirth viết rằng chỉ khoảng 25 năm trước đó, người ta có thể tạo một trình soạn thảo văn bản tương tác với 8,000 byte, còn một trình biên dịch phải nằm gọn trong 32 kilobyte. Thế nhưng, ông phê phán rằng các thế hệ kế tiếp của chúng lại đòi hỏi bộ nhớ tính bằng megabyte và thậm chí sẽ không thể sử dụng được nếu phần cứng không nhanh hơn khoảng một nghìn lần.

(3) Một quan sát song hành với định luật Moore
Nếu định luật Moore (Moore's Law) dự đoán rằng số lượng transistor trong chất bán dẫn sẽ liên tục tăng gấp đôi, thì định luật Wirth là quan sát ở chiều ngược lại: hiệu năng thu được nhờ đó không được chuyển trọn vẹn đến người dùng. Wirth viết rằng hiệu năng của các bộ xử lý thuộc dòng Intel 80x86 đã tăng 335 lần từ năm 1978 đến năm 1993, nhưng ông cũng nói thêm rằng sự tham lam vô tận của phần mềm vẫn chưa có dấu hiệu giảm bớt.


Vì sao phần mềm ngày càng nặng?

Trên mặt biển êm đềm, một chiếc thuyền giấy nhỏ, nhẹ nổi bên cạnh con tàu chở hàng khổng lồ chất quá nhiều container đủ màu sắc, tạo hình ảnh ví von giữa phần mềm gọn nhẹ và phần mềm phình to.

Wirth nêu ra hai lý do khiến mọi người dễ dàng chấp nhận hiện tượng phần mềm ngày càng lớn. Một là hiệu năng phần cứng được cải thiện quá nhanh; hai là thái độ của người tiêu dùng khi không phân biệt được chức năng thực sự cần thiết với chức năng có thì tốt.

(1) Gia tăng tính năng (Feature Creep)
Khi mỗi phiên bản mới lại được bổ sung thêm một vài tính năng, ngay cả những tính năng mà phần lớn mọi người hiếm khi dùng cũng tích tụ lại, khiến chương trình trở nên nặng nề. Wirth chỉ ra rằng mọi người nhầm lẫn sự phức tạp với sự tinh tế.

(2) Các lớp chồng chất (Layers of Abstraction)
Khi xếp chồng nhiều lớp công cụ và thư viện giúp việc phát triển dễ dàng hơn, quá trình xây dựng sẽ nhanh hơn, nhưng số bước phải đi qua khi thực thi cũng tăng tương ứng.

(3) Niềm tin vào phần cứng nhanh
Khi suy nghĩ “dù sao máy tính rồi cũng sẽ nhanh hơn, nên tối ưu hóa sau cũng được” lan rộng, công việc cải thiện hiệu quả bị đẩy lùi lại. Như một câu nói khác mà Wirth trích dẫn, phần mềm sẽ tiếp tục lớn lên cho đến khi lấp đầy bộ nhớ có thể sử dụng.


Định luật Wirth quanh ta ngày nay

Trước một chiếc bàn sáng sủa, một nhân viên văn phòng trẻ nhìn màn hình máy tính xách tay mới chỉ hiện biểu tượng đang tải mờ nhạt với vẻ hơi sốt ruột; bên cạnh là điện thoại thông minh đã tắt màn hình, một chậu cây và tách cà phê.

Định luật Wirth đã nhiều lần được nhắc lại dưới những tên gọi khác nhau qua từng thời kỳ. Vào thập niên 1990, câu nói đùa “Microsoft lấy đi những gì Intel mang lại” từng rất phổ biến; tại sự kiện dành cho nhà phát triển của Google năm 2009, Sergey Brin cũng gọi hiện tượng này là “định luật Page”, theo tên người đồng sáng lập Larry Page.

  • Ứng dụng nhắn tin (Messenger Apps): Việc trao đổi tin nhắn bằng chữ vẫn như trước đây, nhưng một ứng dụng chiếm hàng trăm megabyte bộ nhớ đã trở thành chuyện thường gặp.
  • Trang web (Web Pages): Chỉ để đọc vài đoạn bài viết, người dùng phải tải xuống cả quảng cáo, mã theo dõi và trình phát video, khiến nội dung trên màn hình xuất hiện chậm.
  • Trình soạn thảo văn bản (Word Processors): Những công việc cơ bản như thêm, xóa và di chuyển văn bản vẫn vậy, nhưng dung lượng cài đặt và thời gian khởi động lại tăng lên qua từng phiên bản. Wirth chỉ ra rằng sự xuất hiện của cửa sổ và biểu tượng không làm thay đổi nhiệm vụ ban đầu của trình soạn thảo.
  • Cập nhật điện thoại (OS Updates): Khi hệ điều hành mới được xây dựng cho những thiết bị mới nhất, các thiết bị đã dùng vài năm sẽ chậm đi rõ rệt dù vẫn thực hiện cùng những công việc ấy.

Cách xây dựng phần mềm gọn nhẹ

Trên chiếc bàn trắng gọn gàng, đôi tay của một nhà phát triển đang cẩn thận rút vài khối gỗ nhỏ khỏi một tòa tháp được xếp ngay ngắn bằng các khối gỗ; bên cạnh là một chiếc máy tính xách tay mỏng đã tắt màn hình cùng bộ tua vít chính xác.

Wirth không dừng ở việc phê phán mà còn tự mình tạo ra một hình mẫu. Từ năm 1986 đến năm 1989, ông cùng đồng nghiệp Jürg Gutknecht xây dựng hệ điều hành Oberon chỉ bằng sức của hai người, đồng thời thiết kế cả ngôn ngữ lập trình cùng tên. Phần cốt lõi của Oberon, bao gồm trình soạn thảo và trình biên dịch, còn chưa đến 200 kilobyte.

(1) Tập trung vào điều cốt yếu
Trước hết, xác định những chức năng thực sự cần thiết, rồi tách riêng phần còn lại để chỉ những ai cần mới bổ sung và sử dụng.

(2) Đo hiệu năng thường xuyên
Mỗi khi thêm tính năng mới, hãy đo tốc độ thực thi và mức sử dụng bộ nhớ để sớm nhận ra xu hướng phần mềm nặng dần lên.

(3) Can đảm lược bỏ
Wirth nói rằng sự thỏa mãn lớn nhất trong lập trình đến khi ta thành công trong việc loại bỏ một thứ gì đó. Xóa mã không được sử dụng cũng quan trọng như thêm tính năng.


Định luật Wirth nhắc chúng ta về những chi phí dễ bị bỏ qua khi sự tiến bộ của phần cứng còn che lấp phần dư thừa của phần mềm. Để người dùng có trải nghiệm nhanh hơn tương xứng với mức tăng tốc của chip, người phát triển cần lấy hiệu quả và sự đơn giản làm tiêu chí ngay từ đầu. Điều này cũng gắn liền với việc giảm điện năng tiêu thụ và chi phí thay thiết bị.

Cân nhắc lược bỏ trước khi thêm vào chính là bước đầu tiên để phát triển phần mềm chạy nhanh và bền lâu.