
Linus Torvalds đã dùng Claude Code để xử lý một nút thắt hiệu năng trong bộ đệm trang Linux. Loạt bản vá giúp thông lượng trong một phép thử tổng hợp trên Ryzen Threadripper tăng khoảng 23 lần, nhưng quá trình duyệt mã sau đó phát hiện một lỗi tranh chấp có thể làm lộ dữ liệu chưa được ghi. Kết quả cho thấy mã do tác tử trí tuệ nhân tạo tạo ra vẫn cần được đo hiệu năng, duyệt thiết kế và kiểm tra lỗi như mọi thay đổi khác trong nhân Linux.
Theo bài viết gốc của The New Stack, Torvalds giao cho Claude Code xử lý vấn đề đã khiến các nhà phát triển loay hoay hơn hai năm. Ông cho biết chính mình từng chạy một phiên bản có lỗi trong giải pháp suốt 18 tháng, còn những nhà phát triển khác từng làm việc với nút thắt này cũng gặp vấn đề.
Loạt bản vá loại bỏ thao tác đếm tham chiếu folio khỏi một đường đọc có bộ đệm thường dùng. Torvalds tự thực hiện các phép đo và cảnh báo rằng mức cải thiện trong tác vụ thực tế sẽ thấp hơn đáng kể so với kết quả của phép thử tổng hợp.
Nút thắt nằm ở bộ đếm tham chiếu folio
Nút thắt xuất hiện khi nhiều lõi xử lý cùng cập nhật bộ đếm tham chiếu của một folio. Hoạt động này tạo ra lưu lượng đồng bộ lớn giữa các lõi, dù từng thao tác đọc riêng lẻ không phức tạp.
Trên máy tính xách tay Core i7-8565U của Torvalds, tranh chấp bộ đếm tham chiếu folio chiếm 99,92% số lần nạp dữ liệu giữa các lõi phải lấy từ bộ nhớ đệm đã bị lõi khác sửa đổi trong phép thử tám luồng. Hardware Busters là nguồn công bố con số này.
Matthew Wilcox, kỹ sư Oracle và nhà phát triển lâu năm trong mảng quản lý bộ nhớ của nhân Linux, đã chỉ ra nút thắt vào năm 2024 sau khi nó xuất hiện trong một tác vụ của khách hàng.
Công việc này cho thấy một tác tử lập trình bằng trí tuệ nhân tạo có thể hỗ trợ kỹ sư triển khai và kiểm thử mã. Tuy nhiên, mã do tác tử tạo ra vẫn phải trải qua quy trình duyệt và thử nghiệm áp dụng cho các thay đổi khác trong nhân Linux.
Nội dung Claude Code triển khai và kiểm thử

Claude Code viết phần triển khai, bài kiểm thử và tài liệu ban đầu, đồng thời duyệt mã dưới sự chỉ đạo của Torvalds. Torvalds tự chạy các phép đo hiệu năng thay vì giao toàn bộ quá trình cho công cụ.
Vào Chủ nhật, Michael Larabel của Phoronix phát hiện nhánh thử nghiệm noref-filemap-read-with-llm trong cây mã của Torvalds. Cây mã này hiếm khi chứa nội dung nằm ngoài nhánh phát triển chính.
Loạt tám bản vá đầu tiên dựa trên Linux 7.3-rc6. Torvalds nói rõ vai trò của Claude Code trong phần triển khai, kiểm thử và tài liệu. Theo The New Stack, trước đó ông từng chỉ trích việc nhà phát triển tuyên bố trí tuệ nhân tạo viết 99% mã của họ.
Các phương án trước đây sao chép dữ liệu mà không giữ tham chiếu folio, sau đó mới kiểm tra folio còn hợp lệ hay không. Cách làm này để lại lỗi tranh chấp liên quan đến thu hồi và thay thế bộ nhớ.
Loạt 10 bản vá tiếp theo mang tên rcu-free-v3 dùng cờ mới PG_rcu_free cùng cơ chế thu hồi trì hoãn bằng RCU. Thiết kế này bảo vệ folio trong lúc sao chép dữ liệu sang không gian người dùng, với điều kiện thao tác sao chép không phát sinh lỗi trang.
Thông lượng tăng mạnh trong phép thử Threadripper
Các bản vá tạo ra mức tăng lớn nhất khi nhiều luồng cùng gây tranh chấp bộ đếm tham chiếu. Trên hệ thống Threadripper 64 luồng, thông lượng tăng từ 13,3 triệu lên 304 triệu lượt đọc mỗi giây trong phép thử tổng hợp, tương đương khoảng 23 lần.
| Hệ thống thử nghiệm | Trước bản vá | Sau bản vá | Chu kỳ mỗi lượt đọc |
|---|---|---|---|
| Máy tính xách tay, tám luồng | 10 triệu lượt đọc/giây | Tối đa 33 triệu lượt đọc/giây | Khoảng 2.950 xuống 725 |
| Threadripper, 64 luồng | 13,3 triệu lượt đọc/giây | 304 triệu lượt đọc/giây | Gần 20.000 xuống 735 |
Theo số liệu Torvalds công bố và The New Stack thuật lại, nhánh tám bản vá ban đầu gần như tăng gấp ba thông lượng trên máy tính xách tay của ông. Hiệu năng tám luồng tăng từ 10 triệu lên tối đa 33 triệu lượt đọc mỗi giây, trong khi số chu kỳ nhân cho mỗi lượt đọc giảm từ khoảng 2.950 xuống 725.
Trên hệ thống Threadripper 64 luồng, loạt bản vá sửa đổi tạo ra chênh lệch lớn hơn khi mức tranh chấp cao. Theo cùng nguồn, số chu kỳ cho mỗi lượt đọc giảm từ gần 20.000 xuống 735.
Chi phí của cơ chế thu hồi trì hoãn

Mức tăng hiệu năng đi kèm chi phí trong một số trường hợp. Hardware Busters cho biết ở phần triển khai đầu tiên, cơ chế thu hồi trì hoãn buộc hệ thống kích hoạt một expedited grace period của RCU, tức giai đoạn ân hạn tăng tốc, mỗi khi một bộ xử lý xếp hàng hơn 1.024 trang. Khi đọc vào các trang người dùng chưa được ánh xạ, hệ thống còn phát sinh thêm một lỗi trang trước khi quay về đường xử lý cũ.
Trong phép đọc 16 byte bằng một luồng, Hardware Busters ghi nhận chi phí tăng từ khoảng 4.150 lên 6.550 chu kỳ. Tài liệu hiện có chưa xác định hiện tượng giảm hiệu năng này còn tồn tại trong rcu-free-v3 hay không.
Người duyệt mã chất vấn cách thu hồi bộ nhớ
Quá trình duyệt mã tập trung vào cờ PG_rcu_free và thời điểm thu hồi folio. Các nhà phát triển chưa đạt đồng thuận về cách bảo vệ folio mà vẫn xử lý đúng những trường hợp như cắt ngắn tệp hoặc tạo khoảng trống trong tệp.
Matthew Wilcox đặt câu hỏi về cờ PG_rcu_free mới. Ông đề xuất dùng một loại trang thay thế và chỉ thu hồi các folio trong danh sách không hoạt động sau khi thời gian chờ RCU kết thúc.
Torvalds không đồng ý với hai đề xuất này. Theo lập luận của ông được The New Stack ghi lại, cờ phải được đặt trong lúc folio vẫn có thể được ánh xạ vào không gian người dùng. Việc chỉ xử lý danh sách không hoạt động cũng không bao phủ thao tác cắt ngắn tệp và tạo khoảng trống trong tệp.
Kiryl Shutsemau sau đó đề xuất giới hạn cờ mới cho hệ thống 64 bit. David Hildenbrand, kỹ sư Arm và người bảo trì phần quản lý bộ nhớ Linux, ủng hộ hướng xử lý này.
Lỗi tranh chấp có thể làm lộ dữ liệu chưa được ghi
Kiryl Shutsemau phát hiện một lỗi tranh chấp trong filemap_read_rcu_batch(). Theo The New Stack, nếu một folio bị thay thế rồi giá trị i_size được mở rộng, đường đọc có thể làm lộ dữ liệu chưa từng được ghi.
Torvalds đề nghị đọc kích thước tệp sớm hơn và hợp nhất các bước kiểm tra folio. Shutsemau đưa thay đổi này vào bản vá sửa đổi. Torvalds cũng chuyển phần phát triển tiếp theo cho Shutsemau, người từng làm việc với chính nút thắt đếm tham chiếu này.
Lỗi được phát hiện trong quá trình duyệt mã cho thấy tốc độ tạo mã không thay thế được việc rà soát tương tranh, quản lý vòng đời bộ nhớ và kiểm tra các trường hợp hiếm. Tranh luận về việc trí tuệ nhân tạo làm thay đổi hoạt động rà soát mã vì thế liên quan cả năng suất lẫn khả năng phát hiện lỗi trước khi thay đổi đi vào nhánh chính.
Kết quả vẫn là một thử nghiệm, chưa phải kết luận
Kết quả hiện tại chứng minh các bản vá có thể giảm mạnh tranh chấp trong phép thử tổng hợp, nhưng chưa chứng minh mức tăng tương tự trong tác vụ thực tế. Loạt bản vá vẫn đang được sửa sau phản hồi của người bảo trì và thiết kế thu hồi bộ nhớ chưa đạt đồng thuận.
Các con số hiệu năng đến từ phép thử tổng hợp do Torvalds tự chạy. Chính ông cảnh báo mức tăng trong tác vụ thực tế sẽ nhỏ hơn đáng kể.
Claude Code không tự hoàn tất việc sửa bộ đệm trang Linux. Công cụ tạo phần triển khai, kiểm thử và tài liệu dưới sự chỉ đạo của Torvalds. Sau đó, các nhà phát triển đo hiệu năng, phản biện thiết kế, phát hiện lỗi tranh chấp và sửa lại mã.
Hãy tiếp tục theo dõi Sine để cập nhật cách các công cụ trí tuệ nhân tạo đang được kiểm chứng trong những dự án phần mềm quan trọng.
