12 điểm bởi GN⁺ 2025-04-22 | 2 bình luận | Chia sẻ qua WhatsApp
  • 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
  • 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

 
GN⁺ 2025-04-22
Ý 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.

    • Tiêu đề bài viết hơi dễ gây hiểu lầm. Nghe như thể nó cũng áp dụng cho tác vụ desktop, nhưng thực tế là dành cho trung tâm dữ liệu. Nếu thêm cụm "in datacenters" vào tiêu đề thì đã tránh được sự nhầm lẫn.
  • 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.

    • Thay vào đó, chúng dùng DPDK, XDP hoặc các stack không gian người dùng như Onload hay VMA. Nhiều khi SmartNICs đảm nhiệm hardware offload. Trong các trường hợp đó, bản vá này không áp dụng.
    • Tuy vậy, bản vá này rõ ràng sẽ hữu ích trong các cấu hình mà kernel nằm trên data path, chẳng hạn CDNs, các nút ingress, VM và hệ thống Linux nhúng. Nó sẽ không tác động nhiều đến những workload đã bỏ qua kernel vì lý do hiệu năng hoặc độ trễ. Dòng tít tiết kiệm 30% điện năng sẽ phụ thuộc rất nhiều vào từng bối cảnh.
  • 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.

    • Cá nhân tôi cảm thấy có một nghĩa vụ đạo đức rằng mã nên hiệu quả nhất có thể, đặc biệt khi công việc chạy trên hàng trăm CPU trong nhiều thá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.

    • Vấn đề cần giải quyết là những thay đổi lưu lượng đột ngột và dữ dội. Ví dụ, khi có một loop được đưa vào switching và gây ra packet storm tương ứng. Trong trường hợp đó, interrupt đến quá nhanh khiến hệ thống không có đủ thời gian ngoài interrupt để có thể vô hiệu hóa interrupt. Vì vậy, giải pháp là bảo đảm router Linux có nhiều core hơn giao diện mạng.
  • 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:

    • "Phần tiết kiệm năng lượng này có một số lưu ý. '30% là trường hợp tốt nhất áp dụng cho network stack hay phần giao tiếp,' Karsten giải thích. 'Nếu ứng dụng chủ yếu làm việc đó thì bạn có thể thấy mức cải thiện 30%. Nếu ứng dụng còn làm nhiều việc khác và chỉ thỉnh thoảng dùng mạng, thì 30% sẽ giảm xuống thành một con số nhỏ hơn nhiều.'"
  • 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

 
semanticist 27 ngày trước

Ồ~ 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ả.