- MacThrottle एक SwiftUI-आधारित ऐप है जो Mac के ओवरहीटिंग के कारण performance limit होने पर इसे menu bar में विज़ुअली दिखाता है - ओपन सोर्स
- macOS के
ProcessInfo.thermalStateAPI औरpowermetricsकमांड की तुलना करते हुए, सिस्टम की वास्तविक thermal state को सटीक रूप से detect करने के तरीकों की खोज की गई - अंत में
thermaldद्वारा Darwin केnotifydसिस्टम में प्रकाशित notifications का उपयोग करके root permission के बिना thermal state पढ़ने का तरीका लागू किया गया - ऐप में temperature·fan speed graphs, state-wise color icons, macOS notification feature शामिल हैं, और login पर auto-start भी support करता है
- Apple Silicon Mac की thermal management state को real time में समझने के लिए यह एक उपयोगी टूल है, जो developers और power users को diagnostic साधन देता है
Mac में thermal throttling समस्या को पहचानना
- M2 MacBook Air पर external 4K 120Hz display इस्तेमाल करते समय performance drop और response lag देखा गया
- इसमें fan नहीं है, इसलिए noise से पता नहीं चलता, लेकिन CPU usage 100% होने पर भी power usage कम हो रहा था
- iStat Menus और MX Power Gadget के जरिए CPU frequency और power drop की पुष्टि करते हुए thermal throttling diagnose किया गया
- M4 Max MacBook Pro में भी यही समस्या दिखी, और इसे 14-inch model की thermal design limit से जुड़ी बात बताया गया
- Apple Silicon की power efficiency अब भी बहुत अच्छी है, लेकिन thermal state को सीधे detect करने का तरीका ढूँढना उद्देश्य था
macOS में thermal state को programmatically जाँचना
- macOS thermal state को कई तरीकों से expose करता है, लेकिन consistency की कमी है
- Apple द्वारा recommended तरीका
FoundationकेProcessInfo.thermalStateका उपयोग है- output उदाहरण:
nominal,fair,serious,critical
- output उदाहरण:
- root permission की ज़रूरत वाली
powermetrics -s thermalकमांड भी यही जानकारी देती है, लेकिन
दोनों तरीकों की state classification units अलग हैं- उदाहरण:
fair,powermetricsकेmoderateऔरheavyदोनों states को शामिल करता है
- उदाहरण:
- वास्तविक throttling का समय
powermetricsमेंheavyके रूप में दिखता है, लेकिनProcessInfoमें उसे अलग से पहचानना संभव नहीं
thermald और Darwin notification system का उपयोग
powermetricsका डेटाthermalddaemon से आता है, और
thermaldमौजूदा thermal pressure state कोnotifydsystem events के रूप में publish करता हैnotifyutil -g com.apple.system.thermalpressurelevelकमांड से state जाँची जा सकती हैOSThermalNotification.hheader में defined thermal pressure levels:nominal,moderate,heavy,trapping,sleeping
- Swift code में
notify_register_checkऔरnotify_get_stateको call करके
root permission के बिना real-time thermal state पढ़ने की सुविधा लागू की गई
MacThrottle ऐप डेवलपमेंट
- SwiftUI और MenuBarExtra का उपयोग करके menu bar-only ऐप बनाया गया
- thermometer icon के रंग से state दिखती है (हरा→लाल)
Info.plistमेंLSUIElementकोtrueसेट करके Dock icon disable किया गया
शुरुआती तरीका: powermetrics root helper
- शुरुआत में root permission की ज़रूरत वाले
powermetricsका उपयोग करने के लिए
LaunchDaemon और bash script से helper process तैयार किया गया/usr/local/bin/mac-throttle-thermal-monitorहर 10 सेकंड में state को/tmpफ़ाइल में लिखता था- ऐप उस फ़ाइल को समय-समय पर पढ़कर display करता था
सुधार: thermald IPC notifications का उपयोग
- सीधे
notifydevents subscribe करने वाले तरीके पर स्विच किया गया- root permission की ज़रूरत नहीं, code भी सरल हो गया
temperature और fan speed display
- CPU/GPU temperature और fan speed को graph में दिखाया गया
- शुरुआत में IOKit private API उपयोग करने पर temperature वास्तविक से कम दिख रहा था (~80°C)
- ओपन सोर्स Stats प्रोजेक्ट को देखकर SMC interface पर स्विच किया गया
- SoC generation के अनुसार अलग keys (
Tp0D,Tf0Eआदि) इस्तेमाल करनी पड़ती हैं
- SoC generation के अनुसार अलग keys (
- SMC काम न करे तो IOKit पर fallback किया जाता है
menu bar graph implementation
- graph एक साथ 3 तरह की जानकारी दिखाता है
- background color: thermal state (हरा~लाल)
- solid line: CPU temperature
- dotted line: fan speed ratio
- हर 2 सेकंड में data collect होता है, और 10 मिनट की history रखी जाती है
onContinuousHoverसे tooltip दिया गया,
.drawingGroupजोड़कर GPU rendering के जरिए 120Hz display पर भी smooth display सुनिश्चित किया गया
macOS notifications और auto-start
- thermal state बदलने पर notification भेजने की सुविधा जोड़ी गई
- किसी specific state transition या recovery पर notification भेजी जा सकती है
SMAppServiceAPI से login पर auto-start setting support की गईregister()/unregister()/statusmethods से control
distribution और उपयोग
- Apple Developer account न होने से official notarization संभव नहीं था
- GitHub release से install करने पर
Privacy and Securityमें manual approval देना पड़ता है - कुछ Mac पर Xcode से सीधे build करना पड़ सकता है
- GitHub release से install करने पर
- install और build के तरीके GitHub README में दिए गए हैं
निष्कर्ष
- MacThrottle Apple Silicon Mac के thermal throttling state को real time में monitor करने वाला lightweight टूल है
- यह root permission के बिना काम करता है, और visual feedback, notifications, और graph features के जरिए
developers और high-performance work users को system thermal state की स्पष्ट जानकारी देता है
1 टिप्पणियां
Hacker News की राय
मैंने 2019 MacBook Pro i9 इस्तेमाल किया था, और लगता है thermal throttling detection function इतना सरल हो सकता है
मज़ाक है, लेकिन महंगा i9 CPU खरीदा और उसका i7 से भी खराब perform करना काफ़ी निराशाजनक था
वजह नहीं पता, लेकिन ऐसा करने पर throttling गायब हो गई
फिर भी मैं macOS और Logic आधारित workflow का आदी हूँ, इसलिए इसे इस्तेमाल करता रहा
Linux पर जा सकता था, लेकिन अभी भी यह काफ़ी काम की मशीन है
दो external monitor और Adobe Creative Suite चलाते समय हर बार throttling बहुत ज़्यादा होती थी, लेकिन इस pad ने समस्या हल कर दी
नुकसान बस इतना है कि नीचे का हिस्सा इतना गरम हो जाता है कि इसे गोद में रखना मुश्किल होता है, लेकिन मुझे ज़रा भी पछतावा नहीं है
अब मैंने M3 MacBook Air(24GB RAM) ले लिया है और उससे बहुत संतुष्ट हूँ
जो लोग अभी भी 2019 मॉडल इस्तेमाल कर रहे हैं, उन्हें VRM thermal pad mod ज़रूर consider करना चाहिए
Dell में भी i9 को i7 से बदलते ही चीज़ें काफ़ी बेहतर हो गईं
यानी “बड़ा नंबर = बेहतर CPU” वाली marketing के झाँसे में आ गए थे
बाद में M1 Max पर गया तो मानो पूरी दुनिया बदल गई
अब M3 Max पर upgrade कर लिया है, और Apple Silicon लंबे समय तक टिकेगा ऐसा लगता है
boot होते ही fan चलने लगते थे, और Thunderbolt device जोड़ने पर kernel panic भी अक्सर होता था
अभी जो M1 Max MBP इस्तेमाल कर रहा हूँ, वह पूरी तरह stable है
project काफ़ी अच्छा लग रहा है
लेकिन macOS पर development लगातार मुश्किल होता जा रहा है, और throttling detect कर लेने के बाद वास्तव में क्या किया जा सकता है, यह सवाल बना रहता है
fan speed control भी नहीं कर सकते, और undervolting भी संभव नहीं है, है ना?
default curve इतनी धीमी थी कि throttling पहले शुरू हो जाती थी
Apple Silicon पर High Power Mode इस्तेमाल करें तो fan तेज़ घूमते हैं
अब मैं custom curve इस्तेमाल नहीं करता, लेकिन 14" M4 Max काफ़ी noisy है
MacBook Air में fan ही नहीं है, तो बस इसे ठंडा होने देना पड़ता है
default setting में तापमान 90 डिग्री से ऊपर चला जाता था, इसलिए मैंने इसे ज़्यादा conservative रखा
GitHub लिंक
कभी-कभी कोई process runaway हो जाता है और throttling शुरू हो जाती है, लेकिन तब तक आधी battery खत्म हो चुकी होती है
जब background में बहुत सारे app चल रहे हों, तब यह समस्या अक्सर होती है
अगर इसे Homebrew में डालें तो मुफ़्त code signing और notarization मिल सकता है
उस तरह distribute किया जाए तो बहुत अच्छा होगा
मेरा अनुमान है कि समस्या CPU नहीं बल्कि USB controller के thermal saturation की है
CPU/GPU नहीं, बल्कि chassis ज़्यादा गरम हो जाती है, heat dissipation रुक जाती है और अंत में throttling होती है
अलग adapter या monitor के साथ experiment करना चाहिए
लगता है तुम सही कह रहे हो
4K 144Hz monitor से जोड़कर Zoom या कई video stream चलाऊँ तो बहुत heat होती है
USB controller से ज़्यादा यह simple load issue लगता है
लगता है site traffic surge से down हो गई
repository है angristan/MacThrottle
अगर iStat Menus में CPU 100% दिखे लेकिन power usage कम हो, तो इसे throttling समझा जा सकता है,
लेकिन low-power USB-C charger से connected होने पर भी यही behavior दिख सकता है
charger power detect करने वाला feature जोड़ना अच्छा होगा
charging के दौरान ज़्यादा गरमी से throttling बढ़ जाती थी, लेकिन session से पहले charge कर लेने पर समस्या हल हो गई
बाद की generation में बड़े power adapter क्यों आए, यह तब समझ में आया
क्या तापमान ही सीधा control variable नहीं है?
अगर CPU usage और system power को menu bar में दिखाते रहें, तो abnormal sign तुरंत पकड़ में आ सकता है
exelban/stats
CPU usage ऊँचा था, लेकिन power draw घट रहा था, वहीं से अंदाज़ा हुआ
उम्मीद है अगले MacBook Air M5 में Vapor Chamber cooling आएगी
अभी लगता है Apple heat dissipation से ज़्यादा noise minimization को प्राथमिकता देता है
इसलिए मैंने minimum fan speed को ज़बरदस्ती ऊँचा कर रखा है
जब body environment के साथ thermal equilibrium पर पहुँच जाती है, तब dissipation की सीमा आ जाती है
अगर fan हो, तो copper plate और airflow से यह काफ़ी हद तक हल हो सकता है
आखिरकार यह energy conservation का मामला है
लगता है thermal pressure notification bug है
जानना चाहता हूँ कि क्या app में भी ऐसी समस्या देखी गई है
संबंधित issue
ProcessInfo.processInfo.thermalStateइस्तेमाल करते समय state update न होने की समस्या देखी हैलेकिन अभी जो thermald notification method इस्तेमाल कर रहा हूँ, उसमें ऐसी दिक्कत नहीं है
जानना चाहता हूँ कि
@_silgen_nameसे Darwin API को सीधे declare क्यों किया गयाक्या
import Darwinसे access नहीं मिलता?import Darwinसे वह API expose नहीं होती लगती