Kỹ sư NVIDIA sửa lỗi Linux, vô tình "bóp" hiệu năng GPU AMD
Một sự việc bất ngờ vừa xảy ra, một kỹ sư của NVIDIA đã tung ra bản vá cho kernel Linux, giải quyết vấn đề hiệu năng giảm sút trên các GPU tích hợp và rời của AMD. Hóa ra, chính kỹ sư này đã vô tình gây ra sự cố trên, khi cố gắng tăng không gian PCI BAR lên hơn 10TB. Điều này khiến GPU bị nhận diện sai là "giới hạn", dẫn đến giảm hiệu năng. May mắn thay, lỗi này đã nhanh chóng được phát hiện và sửa chữa.
Trong thế giới mã nguồn mở, việc sửa lỗi do mình gây ra là một nguyên tắc bất thành văn. Kernel Linux là mã nguồn mở và chấp nhận đóng góp từ mọi người, sau đó được kiểm duyệt. Người đóng góp có trách nhiệm cần phải giúp khắc phục các vấn đề phát sinh từ những thay đổi của họ. Vì vậy, bất chấp sự cạnh tranh trên thị trường GPU, mã nguồn mở vẫn là cầu nối giữa AMD và NVIDIA.
Lỗi này xảy ra do một commit (thay đổi) nhằm tăng không gian PCI BAR lên hơn 10TB, có thể dành cho các hệ thống có bộ nhớ lớn. Điều này gián tiếp làm giảm yếu tố "entropy KASLR" trên các thiết bị x86 thông thường. Entropy KASLR quyết định tính ngẫu nhiên của vị trí dữ liệu kernel được tải vào bộ nhớ mỗi khi khởi động, nhằm mục đích bảo mật. Đồng thời, nó cũng làm tăng phạm vi bộ nhớ khả dụng của kernel (direct_map_physmem_end) lên đến 64TB.
Trong Linux, bộ nhớ được chia thành các vùng khác nhau, một trong số đó là "zone device", có thể được liên kết với GPU. Vấn đề ở đây là khi kernel khởi tạo bộ nhớ "zone device" cho GPU Radeon, một biến liên quan (max_pfn) đại diện cho tổng RAM có thể định địa chỉ bởi kernel, sẽ tăng lên 64TB một cách không chính xác.
Vì GPU có thể không truy cập được toàn bộ phạm vi 64TB, nó sẽ đánh dấu dma_addressing_limited() là "true". Biến này về cơ bản giới hạn GPU chỉ sử dụng "zone DMA32", chỉ cung cấp 4GB bộ nhớ, và đó là lý do giải thích cho sự sụt giảm hiệu năng.
Tin tốt là bản vá này sẽ được triển khai ngay khi pull request được chấp nhận, trước khi giai đoạn hợp nhất Linux 6.15-rc1 kết thúc. Với chu kỳ phát hành kernel Linux mới từ sáu đến tám tuần, chúng ta có thể mong đợi phiên bản 6.15 ổn định sẽ có mặt vào cuối tháng Năm hoặc đầu tháng Sáu.