- Mức tiêu thụ điện của các trung tâm dữ liệu tại Mỹ chiếm khoảng 4% tổng điện năng quốc gia vào năm 2023, và được dự báo tăng lên 12% vào năm 2028
- Nhóm nghiên cứu tại Đại học Waterloo đã phát triển một cách để giảm tới 30% điện năng tiêu thụ của trung tâm dữ liệu bằng cách cải thiện cách nhân Linux xử lý mạng
- Trọng tâm là điều khiển động cơ chế busy polling, tự động chuyển đổi giữa ngắt và polling theo tình trạng lưu lượng
- Thay đổi này được triển khai chỉ với khoảng 30 dòng mã được chỉnh sửa, và đã được tích hợp chính thức vào nhân Linux 6.13
- Có khả năng áp dụng rộng rãi cho các trung tâm dữ liệu và máy chủ web dùng Linux, đồng thời nhấn mạnh việc khôi phục triết lý phát triển phần mềm lấy hiệu suất sử dụng tài nguyên làm trung tâm
Có thể giảm tới 30% điện năng tiêu thụ của trung tâm dữ liệu chỉ với 30 dòng mã trong nhân Linux
Lo ngại về mức tiêu thụ điện ngày càng tăng
- Phần lớn lưu lượng web toàn cầu đi qua các trung tâm dữ liệu, đây cũng là nền tảng của các ứng dụng tiêu thụ điện năng cao như dịch vụ AI
- Tại Mỹ, các trung tâm dữ liệu đã sử dụng khoảng 4% điện năng trong năm 2023, và dự kiến tăng lên tới 12% vào năm 2028
Cốt lõi của vấn đề: cách nhân Linux xử lý mạng
- Nhân Linux khi xử lý gói mạng sử dụng song song cơ chế ngắt và polling
- Ngắt: khi có gói mới đến, CPU sẽ tạm dừng công việc hiện tại để xử lý
- busy polling: để giảm độ trễ, hệ thống kiểm tra định kỳ bất kể có gói hay không → kém hiệu quả
Giải pháp: chuyển đổi busy polling một cách động
- Nhóm của Giáo sư Martin Karsten tại Đại học Waterloo, tùy theo lưu lượng mạng, sẽ
- Khi lưu lượng cao: dùng busy polling
- Khi lưu lượng thấp: chuyển sang cơ chế ngắt
- Nhờ đó giảm tiêu thụ điện không cần thiết và tăng tính linh hoạt
Tình hình sửa mã và triển khai
- Được triển khai bằng cách sắp xếp lại mã nhân hiện có với sự hợp tác của kỹ sư Fastly Joe Damato
- Không viết mã mới mà thay đổi cấu trúc hiện có, chỉ sửa khoảng 30 dòng mã
- Đã được đưa chính thức vào nhân Linux 6.13 (phát hành tháng 1 năm 2025)
→ kernel commit
Hiệu quả tiết kiệm năng lượng
- Với các ứng dụng lấy mạng làm trung tâm, có thể tiết kiệm tới 30% điện năng
- Với ứng dụng thông thường, tỷ lệ tiết kiệm có thể thấp hơn
- Do tự động thích ứng với biến động lưu lượng, cách này phù hợp để tối ưu cho trung tâm dữ liệu
- Cũng có thể mở rộng sang các máy chủ web chạy trên Linux như nginx, Apache
Lan tỏa trong cộng đồng và tác động tới mã nguồn mở
- Damato có kế hoạch áp dụng công nghệ liên quan vào máy chủ H2O của Fastly
- Vì đây là mã nhân nguồn mở, các nhà phát triển máy chủ web khác cũng có thể tham khảo
- Được kỳ vọng sẽ trở thành chất xúc tác để khôi phục văn hóa phát triển lấy hiệu quả năng lượng làm trọng tâm
Ý nghĩa mang tính triết lý của nghiên cứu
- “Trong thập niên 90, tối ưu tài nguyên là điều cơ bản của khoa học máy tính”, nhưng trong 20 năm gần đây, sự tập trung vào hiệu năng đã khiến hiệu quả bị xem nhẹ
- Nghiên cứu này cho thấy “một cải tiến mã nhỏ cũng có thể dẫn tới mức tiết kiệm năng lượng khổng lồ”, đồng thời gợi mở định hướng cho phát triển phần mềm bền vững
2 bình luận
Ý kiến trên Hacker News
Linux đã bổ sung tính năng busy polling cho mạng hiệu năng cao. Phần lớn phần mềm Linux không dùng đến nó, nhưng phần mềm dùng trong trung tâm dữ liệu lại kém hiệu quả về năng lượng khi hệ thống không bận. Bản vá này cho phép tắt nó khi hệ thống không bận và khôi phục hiệu quả năng lượng.
Phần lớn các tác vụ trung tâm dữ liệu hiệu năng cao thực ra không đi qua network stack của kernel Linux.
Có thể xem thêm chi tiết về thay đổi này tại https://lwn.net/Articles/1008399/.
Đây là một thay đổi thực sự tuyệt vời. Với tư cách là một người làm về điện toán hiệu năng cao, tôi thường tự hỏi có bao nhiêu năng lượng bị lãng phí vì mã kém hiệu quả, và điều đó trở thành vấn đề lớn đến mức nào khi điện toán trên toàn hành tinh tiếp tục mở rộng.
Ở chiều ngược lại, Meta có một mẹo để giữ GPU luôn bận nhằm làm cho mức tiêu thụ điện trong quá trình huấn luyện LLM ổn định hơn. Ví dụ, họ không muốn mức điện năng giảm mạnh khi đồng bộ batch.
Điều này có nghĩa là "adaptive interrupt moderation" trong kernel không còn được dùng nữa sao? Tôi đã không làm việc liên quan đến lĩnh vực này hơn khoảng 15 năm, nhưng trước đây kernel từng thích ứng theo kiểu dùng interrupt khi tốc độ mạng thấp, rồi khi vượt qua một ngưỡng nhất định thì tắt interrupt và chuyển sang polling.
Khi trong câu có chữ "Up To", thì theo nghĩa đen là mọi khả năng đều có thể xảy ra.
Hơi lạc đề, nhưng thật vui khi lại được đọc bài về Joe Damato. Nó gợi lại nhiều ký ức. Sau khi lần đầu đọc bài của James Gollick về tcmalloc và biết đến packagecloud.io, tôi đã đọc được những bài viết tuyệt vời của Joe.
Đoạn cốt lõi:
Bài này làm tôi nhớ lại kỷ niệm xưa: https://didgets.substack.com/p/finding-and-fixing-a-billion-bug
Ồ~ thú vị thật đấy.
Cũng khiến mình nghĩ rằng vẫn chưa có phần mềm nào là hoàn hảo cả.