[Ubuntu] Nguyên nhân máy nóng và hao pin khi cài Ubuntu, hay các hệ điều hành Linux khác.

Bài viết sau mình tình cờ đọc được thông qua người bạn từ trang picocafe.wordpress.com. Thấy rất hay và bổ ích nên mạn phép tác giả copy về đây để dễ tra cứu. Cảm ơn tác giả vì bài viết.

Xin chào,
Chắc có rất nhiều người khi sử dụng Ubuntu thấy rằng laptop của mình khi chạy nóng hơn và hao pin nhanh hơn Windows, mặc dù đã tắt hết hiệu ứng và chẳng chạy gì. Trong khi hiện tượng quá nhiệt hiếm khi xảy ra trên desktop. Nhiều người chỉ đưa ra những phỏng đoán như là tại driver, tại chip, tại VGA… hay tại Ubuntu mà không biết được nguyên nhân thực sự của vấn đề. Từ đó đưa ra phát biểu rằng Ubuntu lúc nào cũng nóng và hao pin hơn Windows khi chạy trên laptop.
Phát biểu này có thể đúng với những notebook/netbook được cài đặt sẵn Windows lúc xuất xưởng.
Phát biểu này sai khi notebook/netbook lúc xuất xưởng có Linux hoặc không có Windows được cài đặt sẵn.
Do hầu hết các laptop trên thị trường (đặc biệt là dòng high-end đắt tiền) bị M$ đánh thuế nên hiện tượng này xảy ra.
Vì sao lại thế?
Hệ điều hành điều khiển các hoạt động tiêu thụ điện của thiết bị thông qua một giao diện gọi là ACPI (Advanced Configuration and Power Interface). ACPI được cài đặt trong BIOS của máy tính, nó kiểm soát các chức năng như điều tiết điện áp và tần số CPU, tốc độ quạt, nhiệt độ ổ cứng, trạng thái tiêu thụ điện của các thiết bị ngoại vi như màn hình, Ethernet, Wifi, Bluetooth… ACPI cũng định nghĩa các bảng mô tả giao diện giữa hệ điều hành và firmware của phần cứng. BIOS có khả năng phát hiện kiểu hệ điều hành đang chạy, từ đó cung cấp các bảng mô tả phù hợp.
Các laptop bị M$ đánh thuế thường không hỗ trợ chính thức bất kỳ hệ điều hành nào khác ngoài Windows. BIOS chỉ cung cấp các bảng mô tả ACPI đầy đủ và đúng đắn khi hệ điều hành trên máy là Windows. Nếu Linux được cài đặt, BIOS sẽ không cung cấp các bảng mô tả ACPI đầy đủ, thậm chí còn cố tình làm sai lệch (âm mưu một thời của M$ – Bill Gates on Making ACPI Not Work with Linux). Điều đó dẫn đến Linux không điều khiển được trạng thái tiêu thụ điện của các thiết bị một cách đúng đắn, gây nên các vấn đề quá nhiệt, hao pin, không bật được card mạng, không ngưng hay không tắt được máy…
Các laptop có Linux được cài đặt sẵn khi xuất xưởng sẽ có ACPI hỗ trợ Linux đầy đủ nên không nóng quá mức hay hao pin nhanh.
Làm thế nào để biết BIOS có hỗ trợ ACPI cho Linux hay không hoặc giải quyết các vấn đề nóng máy, hao pin như thế nào?
Chạy lệnh:

sudo acpidump -t -d -o foo.dsdt > foo.asl

Lệnh này sẽ đọc bảng mô tả DSDT đang có trong bộ nhớ và lưu vào foo.dsdt đồng thời dịch ngược DSDT ra ngôn ngữ nguồn ACPI (ASL).
Mở foo.asl ra, tìm kiếm chuỗi “Windows”, nếu bạn thấy có từ “Windows” mà không có từ “Linux” thì BIOS của bạn không hỗ trợ ACPI cho Linux.
Kể cả nếu có từ “Linux” trong foo.asl nhưng khi chạy Ubuntu vẫn nóng máy, hao pin thì nhiều khả năng dòng laptop của bạn đã bị M$ ép buộc để loại trừ Linux. Trong trường hợp đó, bạn có thể patch lại DSDT để cho Linux bảng mô tả ACPI đầy đủ. Có nguyên một bài viết rất dài ở đây.

Những ai “cảm thấy” máy tính của mình nóng hơn khi chạy Ubuntu, trước hết nên kiểm tra lại bằng các bước sau:
– Cài đặt Everest trên Windows và sensors-applet trên Ubuntu.
– Nếu đang sử dụng Ubuntu 11.04, chọn giao diện GNOME Classic (No Effects) trong màn hình đăng nhập, còn trước 11.04 thì tắt hiệu ứng trong Desktop Effects đi, sau đó ấn chuột phải lên thanh GNOME trên cùng và thêm vào 2 applet: một là applet sensors vừa cài đặt để kiểm tra nhiệt độ CPU, ổ cứng, hai là applet CPU frequency scaling để điều tiết CPU.
– Click vào applet CPU frequency scaling và chọn chế độ Powersave. Tần số CPU sẽ tụt xuống mức thấp nhất (40%).
– Tắt máy và để nguội (thốc quạt vào cho nó nguội nhanh)
– Bật máy và để rỗi trong khoảng 15 phút, ghi lại nhiệt độ CPU (2 lõi thì có 2 nhiệt độ, 4 lõi thì có 4) và nhiệt độ ổ cứng.
– Tắt máy và để nguội
– Bật Windows và để rỗi trong 15 phút, ghi lại nhiệt độ CPU và ổ cứng trong Everest
Nếu nhiệt độ của Ubuntu > Windows từ 5 độ C trở lên thì mới là vấn đề. Còn nếu không thì bạn không cần phải làm gì cả. Bạn chỉ cần tắt hiệu ứng và chọn chế độ Powersave là OK.

Tin buồn là Ubuntu kể từ 9.10 sẽ không hỗ trợ sử dụng các bản patch DSDT nữa.
BIOS _OSI(Linux) query ignored là bình thường. Chỉ đơn giản là BIOS muốn biết hệ điều hành đang chạy có phải là Linux không, và kernel trả lời là không. Theo các dev, nếu trả lời là có sẽ gây ra một số vấn đề (cái này mình không rõ lắm). Các bạn có thể đọc thêm ở đây.

Các bạn có thể thử 1 trong các cách sau, nếu thấy nóng máy sau khi đã kiểm tra bằng các bước nói trên:
– Ấn phím e để sửa các tùy chọn GRUB lúc khởi động. Thêm acpi_osi=Linux vào cuối. Tùy chọn này sẽ trả lời cho truy vấn của BIOS hệ điều hành đang chạy là Linux.
– Ấn phím e để sửa các tùy chọn GRUB lúc khởi động. Thêm acpi_osi=”Windows 2006″ vào cuối. Tương đương với việc sử dụng ACPI cho Windows Vista. [Có thể gây kernel panic]
– Ấn phím e để sửa các tùy chọn GRUB lúc khởi động. Thêm acpi_osi=”Windows 2001 SP2″ vào cuối. Tương đương với việc sử dụng ACPI cho Windows XP SP2. [Có thể gây kernel panic]
Mỗi lần thử, các bạn nên khởi động máy từ chế độ nguội và so sánh nhiệt độ. Nếu vẫn không có gì cải thiện thì chỉ còn cách giải quyết là đầu tư mua đế tản nhiệt.

Bài viết gốc