Đọc nhiệt độ CPU thật trên Mac Intel và Apple Silicon
Trả lời ngắn gọn: macOS không có cách nào hiển thị nhiệt độ CPU sẵn có — không có trong Activity Monitor, cũng chẳng có ở đâu trong System Settings. Vì vậy muốn đọc nhiệt độ CPU trên Mac, bạn luôn phải đi vòng qua khoảng trống đó theo đúng cách mà mọi công cụ khác đang làm: nói chuyện trực tiếp với SMC (System Management Controller) — bộ điều khiển nhỏ nằm giữa hệ điều hành và các cảm biến thật. Đọc dữ liệu từ đây nghĩa là gửi yêu cầu một sensor key bốn ký tự cụ thể, rồi giải mã theo đúng định dạng số mà con chip đó dùng — sp78 dạng fixed-point trên Intel, IEEE flt dạng floating point trên Apple Silicon. Đây cũng là lý do vì sao hai công cụ trên cùng một máy — kể cả lệnh pmset -g therm có sẵn trong Terminal — có thể cho ra hai con số khác nhau cho cùng một thứ.
Không có API nào của Apple đưa thẳng cho bạn một con số
Mở Activity Monitor lên tìm cột CPU Temperature — không có đâu. Apple chưa bao giờ đưa tính năng hiển thị nhiệt độ vào bất kỳ đâu trong macOS: không có trong Activity Monitor, không có trong System Settings, cũng không có API nhiệt độ công khai nào. Đây không phải là thiếu sót; Apple coi dữ liệu cảm biến là chi tiết nội bộ phục vụ hệ thống quản lý nhiệt của riêng họ, chứ không phải thứ ứng dụng bên ngoài được phép đọc trực tiếp.
Bất kỳ công cụ nào hiển thị được một con số nhiệt độ, dù miễn phí hay trả phí, đều đang đi vòng qua khoảng trống đó theo cùng một cách: nói chuyện với SMC, bộ điều khiển nhỏ luôn hoạt động nằm giữa macOS và các cảm biến nhiệt, quạt thật sự. Không hề có system call "đọc nhiệt độ CPU" nào cả — bạn phải hỏi SMC một sensor key bốn ký tự cụ thể (như TC0D hay Tp01), và nó trả về vài byte thô chẳng có ý nghĩa gì nếu bạn không biết cách giải mã.
Đó mới là câu trả lời thật cho câu hỏi "làm sao đọc được nhiệt độ CPU trên Mac của mình": chọn đúng key cho đúng chiếc Mac này, rồi giải mã byte trả về theo đúng định dạng của đúng con chip này. Sai một trong hai bước là ra số sai, hoặc không ra số nào cả — đây chính là lý do hai công cụ đo nhiệt độ trên cùng một Mac có thể cho kết quả khác nhau, và vì sao có công cụ chẳng hiện gì trên một con chip vừa ra mắt.
Hai kiểu giải mã: sp78 trên Intel, IEEE flt trên Apple Silicon
SMC không trả về một kiểu số liệu chung cho tất cả — mỗi key mang kiểu dữ liệu riêng, và bộ giải mã phải khớp đúng kiểu đó, nếu không kết quả sẽ vô nghĩa. Các key nhiệt độ dùng hai định dạng khác nhau tùy theo kiến trúc của Mac.


Trên Mac Intel, nhiệt độ trả về ở dạng sp78: một số fixed-point 8.8 có dấu, một byte cho phần nguyên độ, một byte cho phần thập phân. Giải mã chỉ là phép tính đơn giản — byte đầu đọc như số nguyên có dấu, cộng byte thứ hai chia cho 256. Ví dụ, hai byte 0x31 0x80 giải mã ra 49 + 128/256 = 49.5°C.
Trên Apple Silicon, cùng một nhóm cảm biến đó lại báo về dưới dạng flt: một số floating point IEEE-754 chuẩn 4 byte, chỉ khác là lưu theo little-endian thay vì thứ tự byte bạn thường mong đợi. Đó chính là định dạng float 32-bit y hệt được dùng ở khắp nơi khác trong phần mềm — Apple chỉ sắp byte theo chiều ngược lại.
Tốc độ quạt (RPM) cũng có kiểu mã hóa riêng biệt tương tự — fpe2 fixed-point trên phần cứng Intel đời cũ, flt trên Intel đời mới và mọi Mac Apple Silicon — nên một công cụ chỉ được xây cho định dạng số của một thế hệ chip sẽ đọc sai, hoặc đọc thất bại hoàn toàn, trên phần cứng ở phía bên kia của cuộc chuyển đổi. LidRun kiểm tra kiểu dữ liệu thực tế mà mỗi key báo về trước khi giải mã, thay vì mặc định một định dạng cho toàn bộ Mac.
Hướng dẫn liên quanKiểm soát quạt Mac cho developerKhông có một key 'nhiệt độ CPU' duy nhất — và nó thay đổi theo từng thế hệ chip
Kể cả khi đã biết giải mã một key, bạn vẫn phải biết nên hỏi key nào — và điều đó thay đổi theo từng model Mac, và trên Apple Silicon còn thay đổi theo từng thế hệ chip.


Mac Intel thì tương đối đơn giản: các cảm biến CPU nằm trong nhóm TC0x — TC0D (die), TC0P (proximity), TC0E và TC0F (số liệu đã lọc/ảo), TCAD (package) — và hầu hết công cụ đọc trên Intel chỉ cần dò qua danh sách ngắn này.
Apple Silicon bị phân mảnh có chủ đích, vì con chip này có nhiều vùng nhiệt riêng biệt hơn hẳn một "die" đơn lẻ. M1 lộ ra các key nhân hiệu năng (performance-core) như Tp01, Tp05, và Tp0D, một cụm CPU phụ dưới Tc0a/Tc0b, và các key GPU dưới Tg05/Tg0D. M2 bổ sung thêm key riêng cho nhân tiết kiệm điện (efficiency-core) là Tp1h, Tp1t, bên cạnh các nhân hiệu năng. Rồi M3 đổi hẳn quy ước đặt tên: key nhân hiệu năng và GPU chuyển sang tiền tố Tf mới (Tf04, Tf09…), còn nhân tiết kiệm điện có tiền tố Te riêng — đây là thế hệ bỏ hẳn Tp cho các nhân CPU. M4 lại đưa Tp trở lại cho nhân hiệu năng trong khi vẫn giữ Te cho nhân tiết kiệm điện. M5 bổ sung thêm một tầng "super core" với hậu tố Tp riêng của nó.
Đó là lý do thật sự khiến một công cụ đo nhiệt độ đang chạy tốt bỗng chẳng hiện gì trên chiếc Mac tiếp theo bạn mua: một công cụ hardcode sẵn danh sách key của M1/M2 sẽ không đọc được gì trên M3, vì những key nó đang tìm không còn tồn tại ở đó nữa — chúng đã đổi sang một chữ cái khác. Đây không phải lỗi ở chiếc Mac của bạn; đó là một danh sách key chưa được cập nhật cho con chip mới.
LidRun xử lý việc này theo hai bước: trước tiên thử một danh sách key đã biết sẵn (nhanh, không cần dò trên những Mac đã quen thuộc), và nếu không key nào cho ra kết quả, LidRun sẽ liệt kê toàn bộ bảng key của SMC một lần — dao động từ vài trăm đến khoảng một nghìn key tùy Mac — rồi giữ lại bất kỳ giá trị nào giải mã ra một mức nhiệt độ hợp lý dưới các tiền tố cảm biến die (Tp, Te, Tf, Tg, Tc), loại bỏ các cảm biến bề mặt, môi trường xung quanh, và pin vốn sẽ cho ra con số thấp hơn nhiệt độ thật của chip. Kết quả này được cache lại, nên các lần đọc sau gần như không tốn chi phí gì.
Những cách miễn phí, có sẵn để tự kiểm tra
Bạn không cần LidRun, hay bất kỳ ứng dụng trả phí nào, để thấy được một con số thật. Có vài lựa chọn miễn phí, mỗi cái đều có một giới hạn thật sự đáng biết trước khi bạn tin tưởng nó.


Lệnh pmset -g therm có sẵn trong Terminal là thứ gần nhất mà macOS cung cấp giống một lệnh đo nhiệt độ — nhưng đọc kỹ output: dòng CPU_Speed_Limit nó in ra không phải nhiệt độ, mà là phần trăm throttle (giới hạn tốc độ). 100 nghĩa là chip không bị giới hạn gì cả; số càng thấp nghĩa là macOS đang chủ động ép tốc độ CPU xuống để xử lý nhiệt. Đây là tín hiệu thực sự hữu ích cho câu hỏi "Mac của mình có đang gồng không", miễn phí và có sẵn, nhưng nó sẽ không bao giờ cho bạn thấy con số độ C.
Muốn có con số thật, đã có sẵn các công cụ đọc SMC miễn phí, mã nguồn mở, làm đúng việc tìm key và giải mã như mô tả ở trên. Stats (exelban/stats) là một ứng dụng menu-bar miễn phí, mã nguồn mở, luôn cập nhật theo những lần đổi tên key của Apple Silicon qua từng bản phát hành. Các công cụ dòng lệnh như smctemp và osx-cpu-temp cũng làm đúng việc giải mã đó ngay trong Terminal, không cần giao diện đồ họa (osx-cpu-temp ra đời trước Apple Silicon nên chỉ hỗ trợ Intel).
Các công cụ trả phí hoặc freemium — iStat Menus, TG Pro, Macs Fan Control — đọc cùng những SMC key đó và thêm phần trau chuốt: biểu đồ lịch sử, cảnh báo, và với TG Pro hay Macs Fan Control là thêm cả tính năng điều khiển quạt trên nền số liệu đọc được. Không có công cụ nào trong số này có quyền truy cập một con số mà Apple giấu kín với những công cụ khác; tất cả đều thực hiện đúng cùng một cuộc "bắt tay" với SMC, chỉ khác là có đầu tư bảo trì danh sách key kỹ hơn và khoác thêm giao diện đẹp hơn.
Vì sao hai ứng dụng cho ra hai con số khác nhau
Nếu một công cụ báo 68°C còn công cụ khác báo 74°C trên cùng một chiếc Mac, cùng một thời điểm, thì không nhất thiết cái nào sai cả. Gần như chắc chắn chúng đang đọc hai cảm biến khác nhau, hoặc gộp nhiều cảm biến thành một con số theo cách khác nhau.


Giả sử một chiếc Mac có tám cảm biến nhân đọc được từ 65°C đến 75°C ngay tại thời điểm đó. Một công cụ lấy trung bình các nhân (cách mà cả Stats lẫn smctemp dùng, để có một con số "nhiệt độ CPU hiện tại" dễ hiểu hơn) có thể hiện 70°C. Một công cụ báo riêng một cảm biến package cụ thể có thể hiện 72°C. Một công cụ báo cảm biến nóng nhất đang hoạt động mà nó tìm được — cách LidRun làm — sẽ hiện 75°C. Cả ba con số đều là số đọc thật, trung thực trên cùng một con chip; chúng chỉ đang trả lời những câu hỏi hơi khác nhau.
Lấy trung bình cho ra một con số mượt hơn, đại diện tốt hơn cho việc dùng hàng ngày. Báo giá trị cao nhất là lựa chọn thận trọng hơn cho bất cứ điều gì liên quan tới an toàn, vì throttling được kích hoạt khi một cảm biến die nóng nhất vượt ngưỡng của nó, chứ không phải khi mức trung bình vượt ngưỡng — nên một công cụ giám sát đang phải quyết định có nên giảm tải hay không, chứ không chỉ đơn thuần hiển thị một con số, có lý do chính đáng để ưu tiên đỉnh nhiệt hơn là mức trung bình.
Bài học thực tế: hãy coi bất kỳ con số nhiệt độ CPU đơn lẻ nào là kết quả đọc từ cảm biến và phương pháp mà một công cụ cụ thể chọn, không phải giá trị đúng duy nhất cho chiếc Mac của bạn. Điều thật sự quan trọng khi đánh giá có vấn đề gì không là xu hướng trong vài phút gần nhất và mức tăng nhanh tới đâu — chứ không phải việc con số của bạn có khớp từng độ với công cụ của bạn bè hay không.
Rủi ro khi chỉ tin vào một công cụ đọc duy nhất
Vấn đề chênh lệch thế hệ chip nói trên không phải chuyện giả định — nó đã từng gây ra những lỗi thật, có ghi nhận đầy đủ. btop, công cụ giám sát hệ thống mã nguồn mở phổ biến, từng phát hành một bộ đọc nhiệt độ chỉ cài đặt bộ giải mã sp78; vì chưa bao giờ xử lý flt, nó âm thầm không hiện nhiệt độ CPU trên mọi Mac Apple Silicon (lỗi được dự án ghi nhận là issue #1653) cho tới khi được sửa. Không có gì crash, không có thông báo lỗi nào — con số chỉ đơn giản là biến mất, trông giống như "Mac của mình không có cảm biến nhiệt" hơn là "bộ giải mã của công cụ này chưa đầy đủ".
Kiểu lỗi tương tự cũng xảy ra với danh sách key đã lỗi thời, không chỉ riêng bộ giải mã thiếu: một công cụ được xây trước khi M3 ra mắt và chưa bao giờ được cập nhật sẽ không đọc được gì trên M3, vì các key nhân hiệu năng nó đang dò (Tp01, Tp05…) không còn tồn tại ở đó nữa — chúng đã đổi thành Tf04, Tf09. Một danh sách key lỗi thời và một bộ giải mã thiếu sót cho ra triệu chứng giống hệt nhau: một kết quả trống hoặc bằng 0 trông như sự cố phần cứng, dù thực ra không phải vậy.
Có một rủi ro khác, nhỏ hơn, với những công cụ làm nhiều hơn việc chỉ đọc số liệu. Macs Fan Control, TG Pro, và smcFanControl đều cài một helper daemon có quyền hạn cao để có thể ghi vào SMC — đây là cơ chế hợp pháp mà việc điều khiển quạt thực sự cần, vì Apple bắt buộc phải có một helper ký Developer-ID chạy ở quyền root cho việc này, không có con đường nhẹ hơn. Nhưng điều đó cũng đồng nghĩa là giờ có thêm một tiến trình chạy nền có khả năng giữ quạt ở một mức thủ công cố định. Nếu bạn thoát ứng dụng mà không trả nó về chế độ tự động, daemon đó có thể vẫn tiếp tục chạy với thiết lập thủ công cuối cùng, thay vì trả quyền điều khiển lại cho đường cong firmware của chính macOS.
Tất cả điều này không có nghĩa những công cụ đó không đáng tin — Stats, TG Pro, và Macs Fan Control đều đang được bảo trì tích cực và luôn cố gắng đuổi theo các thế hệ Apple Silicon mới khi chúng ra mắt, dù đôi khi hỗ trợ đầy đủ có thể chậm hơn ngày ra mắt chip một hai phiên bản. Nó chỉ có nghĩa là một con số nhiệt độ chỉ mới bằng đúng danh sách key và bộ giải mã đứng sau nó, và danh sách đó đã thay đổi với những hệ quả thật sự mỗi năm Apple ra chip mới.
Thế nào mới thực sự là 'quá nóng'
Khi đã có một con số thật, câu hỏi khó hơn là nên làm gì với nó — và không có một ngưỡng an toàn duy nhất áp dụng được cho mọi chiếc Mac, vì Apple cố tình cho chip của mình chạy sát trần nhiệt dưới tải nặng kéo dài. Đó là vận hành bình thường, không phải dấu hiệu cảnh báo.
Chip M1 được thiết kế để chạy nóng tới khoảng 100°C dưới tải nặng kéo dài mà không suy giảm — đó là thiết kế SoC hoạt động đúng như dự tính, không phải lỗi. M2 chạy còn nóng hơn trong cùng điều kiện, thường vượt mốc 100°C. Mac Intel thường xuyên nằm trong khoảng 90–100°C dưới tải, đó đơn giản là cách kiến trúc đó vận hành. MacBook Air không quạt thì chẳng có quạt nào để dựa vào cả — nó quản lý nhiệt hoàn toàn bằng throttling, nên một mức 90–100°C kéo dài trên Air chính là phạm vi vận hành bình thường của nó, không phải bằng chứng có gì trục trặc.
Bản thân throttling — việc chip tự giới hạn tốc độ của mình để xử lý nhiệt — thường bắt đầu ở đâu đó quanh mức 95–100°C trên hầu hết Mac đời gần đây, đó là cơ chế bảo vệ của chính phần cứng đang làm đúng nhiệm vụ, không phải dấu hiệu workload của bạn làm hỏng gì cả.
Vì không có một con số độ "an toàn" nào áp dụng chung được cho mọi model, tín hiệu hữu ích hơn chính là tín hiệu định tính mà Apple thực sự xây dựng cho việc này: ProcessInfo.thermalState, một đánh giá bốn mức (nominal, fair, serious, critical) mô tả theo việc Mac của bạn cần làm gì, chứ không theo một con số độ. Đây là tín hiệu mà mọi ứng dụng viết đúng chuẩn cần phản hồi theo, và cũng là nền tảng cho cơ chế an toàn của chính LidRun, thay vì một ngưỡng độ cố định vốn dễ báo động giả trên một chiếc Mac khỏe mạnh, bình thường đang chạy tải thật.
Vai trò của LidRun ở đây
Đọc nhiệt độ không phải tính năng trả phí trong LidRun — mọi bản cài đặt đều có, trên cả Intel lẫn Apple Silicon, dùng đúng cách tìm key và giải mã đã mô tả ở trên: key hợp lệ nóng nhất trong danh sách đang hoạt động, khớp sp78 hay flt tùy theo đúng những gì SMC thực sự báo về cho key đó.
Lý do LidRun đọc nhiệt độ không phải để cho bạn một đồng hồ đo đẹp hơn các công cụ miễn phí sẵn có. Nó ở đó để cơ chế an toàn của chính LidRun có một tín hiệu thật trong lúc đang giữ Mac của bạn thức để chạy một agent. Cam kết cốt lõi của LidRun rất đơn giản: agent đang chạy → giữ máy thức; agent xong hoặc không an toàn → nhả ra, hoặc cho ngủ. Đây không phải một wake lock mù quáng giữ Mac mở bất chấp mọi thứ — phần "không an toàn" chủ yếu dựa vào thermalState, tín hiệu được Apple tài liệu hóa chính thức, có nhiệt độ số và phần trăm throttle CPU hỗ trợ như một lớp kiểm tra phụ. Khi nhiệt ở mức critical, LidRun luôn nhả ngay lập tức việc giữ máy thức, trên bất kỳ Mac nào, dù mở hay đóng nắp. Nếu Closed-Lid đang bật và nắp máy thực sự đang đóng — trường hợp nhiệt không có đường thoát — nhiệt critical kéo dài sẽ leo thang từ việc nhả sang cho máy ngủ thật sự, vì cơ chế chống ngủ của Closed-Lid nếu không thì vẫn sẽ giữ Mac thức bất kể việc nhả đó. Còn khi nắp máy đang mở, LidRun chỉ nhả ra chứ không bao giờ ép một chiếc Mac bạn đang thực sự dùng phải ngủ.
Điều khiển quạt là chỗ duy nhất LidRun cố tình giữ thái độ khiêm tốn về những gì mình hứa hẹn, đặc biệt trên Apple Silicon. Việc ghi RPM quạt ở đó bị firmware canh gác chặt — bộ điều khiển nhiệt của chính SoC chủ động quản lý đường cong quạt và có thể từ chối thẳng thừng một lệnh ghi đè thủ công, và trên vài chip Apple Silicon dòng Pro/Max, firmware đơn giản là sẽ không quay quạt dưới mức khoảng 70°C cao (high 70s) cho dù ứng dụng nào yêu cầu gì đi nữa. Đó là trần phần cứng thật sự, không phải lỗ hổng trong kỹ thuật của riêng công cụ nào. Vì vậy, hãy coi việc đọc nhiệt độ là lớp đáng tin cậy, luôn hoạt động, và giữ Mac thông thoáng trên một bề mặt cứng, để hở khi chạy tác vụ dài — điều đó vẫn giúp ích cho khoảng đệm nhiệt nhiều hơn bất kỳ đường cong quạt nào có thể tự hứa hẹn.
LidRun giữ công việc của bạn chạy tiếp khi đóng nắp, với cơ chế bảo vệ pin và nhiệt tích hợp sẵn.
Đã có LidRun? Đọc hướng dẫn thiết lập →
Mới biết đến LidRun? Xem bảng giá →
Câu hỏi thường gặp
Nó nói chuyện với SMC (System Management Controller) và hỏi những sensor key bốn ký tự cụ thể, rồi giải mã byte trả về theo đúng định dạng mà key đó thực sự báo — sp78 fixed-point trên Intel, IEEE flt floating point trên Apple Silicon. Không có API công khai nào của macOS chỉ đơn giản trả về "nhiệt độ CPU"; mọi công cụ đọc, miễn phí hay trả phí, đều thực hiện đúng cuộc "bắt tay" này với SMC.
Apple chưa bao giờ đưa tính năng hiển thị nhiệt độ vào Activity Monitor hay bất kỳ đâu khác trong macOS. Dữ liệu cảm biến nằm trong SMC, và Apple coi đó là chi tiết nội bộ phục vụ hệ thống quản lý nhiệt của riêng mình, chứ không phải thứ để phơi bày trên giao diện hệ thống — đó chính là lý do vì sao cả một thị trường ứng dụng menu-bar của bên thứ ba tồn tại để lấp khoảng trống đó.
Mỗi model Mac lộ ra những cảm biến khác nhau dưới những cái tên khác nhau. Intel dùng nhóm TC0x; Apple Silicon rải số liệu ra nhiều key theo từng cụm (Tp, Te, Tf, Tg tùy thế hệ chip) vì nó có nhiều vùng nhiệt riêng biệt hơn cần báo cáo. LidRun thử một danh sách key đã biết trước, và nếu không key nào khớp, sẽ liệt kê toàn bộ SMC một lần rồi giữ lại bất kỳ giá trị nào giải mã ra một số đọc cảm biến die hợp lệ.
Gần như chắc chắn là do danh sách key đã lỗi thời, không phải sự cố phần cứng. Key nhân hiệu năng và GPU của Apple Silicon đã chuyển từ tiền tố Tp sang tiền tố Tf mới đúng vào M3 — thế hệ bỏ hẳn Tp cho các nhân CPU — nên một công cụ được xây trước khi M3 ra mắt sẽ đang dò những key không tồn tại trên đó. Rủi ro tương tự cũng áp dụng cho bất kỳ thế hệ tương lai nào đổi tên cảm biến một lần nữa; một công cụ liệt kê SMC trực tiếp thay vì tin vào một danh sách key cố định, như cách LidRun làm, sẽ không gặp phải vấn đề này.
Chúng đang đọc những cảm biến khác nhau hoặc gộp chúng lại theo cách khác nhau — một công cụ có thể lấy trung bình vài cảm biến nhân để có con số dễ hiểu hơn, một công cụ khác có thể báo riêng một cảm biến package, công cụ thứ ba có thể báo cảm biến nóng nhất đang hoạt động mà nó tìm được. Cả ba đều có thể là số đọc trung thực trên cùng một phần cứng; hãy coi bất kỳ con số nào cũng chỉ là giá trị của một cảm biến được chọn, không phải nhiệt độ đúng duy nhất.
Không có một con số an toàn duy nhất áp dụng được cho mọi model, vì Apple cố tình cho chip của mình chạy sát trần thiết kế dưới tải — M1 được thiết kế để đạt tới gần 100°C, M2 chạy còn nóng hơn, và Mac Intel thường xuyên nằm trong khoảng 90–100°C khi làm việc nặng, tất cả đều không gây hư hại. Tín hiệu hữu ích hơn một con số độ cố định chính là ProcessInfo.thermalState của macOS (nominal/fair/serious/critical), đây mới là thứ thực sự quyết định một ứng dụng có nên giảm tải hay không.
Đọc nhiệt độ và RPM quạt hoạt động theo cùng một cách trên mọi Mac mà LidRun hỗ trợ. Việc ghi một mức quạt thủ công lại khó hơn và kém chắc chắn hơn trên riêng Apple Silicon — firmware chủ động tự quản lý đường cong quạt, và trên vài chip Pro/Max, sẽ không quay quạt dưới một mức nhiệt cố định cho dù được yêu cầu gì đi nữa. LidRun không hứa hẹn một đường cong quạt thủ công mà nó không thể đảm bảo chắc chắn trên phần cứng dòng M.