5 पॉइंट द्वारा GN⁺ 2025-12-29 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • MacThrottle एक SwiftUI-आधारित ऐप है जो Mac के ओवरहीटिंग के कारण performance limit होने पर इसे menu bar में विज़ुअली दिखाता है - ओपन सोर्स
  • macOS के ProcessInfo.thermalState API और 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
  • root permission की ज़रूरत वाली powermetrics -s thermal कमांड भी यही जानकारी देती है, लेकिन
    दोनों तरीकों की state classification units अलग हैं
    • उदाहरण: fair, powermetrics के moderate और heavy दोनों states को शामिल करता है
  • वास्तविक throttling का समय powermetrics में heavy के रूप में दिखता है, लेकिन ProcessInfo में उसे अलग से पहचानना संभव नहीं

thermald और Darwin notification system का उपयोग

  • powermetrics का डेटा thermald daemon से आता है, और
    thermald मौजूदा thermal pressure state को notifyd system events के रूप में publish करता है
  • notifyutil -g com.apple.system.thermalpressurelevel कमांड से state जाँची जा सकती है
  • OSThermalNotification.h header में 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 का उपयोग

  • सीधे notifyd events 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 आदि) इस्तेमाल करनी पड़ती हैं
  • 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 भेजी जा सकती है
  • SMAppService API से login पर auto-start setting support की गई
    • register() / unregister() / status methods से control

distribution और उपयोग

  • Apple Developer account न होने से official notarization संभव नहीं था
    • GitHub release से install करने पर Privacy and Security में manual approval देना पड़ता है
    • कुछ Mac पर Xcode से सीधे build करना पड़ सकता है
  • 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 टिप्पणियां

 
GN⁺ 2025-12-29
Hacker News की राय
  • मैंने 2019 MacBook Pro i9 इस्तेमाल किया था, और लगता है thermal throttling detection function इतना सरल हो सकता है

    function isThermalThrottling() {
      return true;
    }
    

    मज़ाक है, लेकिन महंगा i9 CPU खरीदा और उसका i7 से भी खराब perform करना काफ़ी निराशाजनक था

    • मैं भी वही मॉडल इस्तेमाल करता हूँ, और मेरे लिए समस्या सिर्फ़ दाएँ पोर्ट से चार्ज करने पर हल हुई
      वजह नहीं पता, लेकिन ऐसा करने पर throttling गायब हो गई
      फिर भी मैं macOS और Logic आधारित workflow का आदी हूँ, इसलिए इसे इस्तेमाल करता रहा
      Linux पर जा सकता था, लेकिन अभी भी यह काफ़ी काम की मशीन है
    • मैंने भी 2019 i9 मॉडल इस्तेमाल किया था, और VRM module पर thermal pad लगाने से यह बिल्कुल नए कंप्यूटर जैसा हो गया
      दो external monitor और Adobe Creative Suite चलाते समय हर बार throttling बहुत ज़्यादा होती थी, लेकिन इस pad ने समस्या हल कर दी
      नुकसान बस इतना है कि नीचे का हिस्सा इतना गरम हो जाता है कि इसे गोद में रखना मुश्किल होता है, लेकिन मुझे ज़रा भी पछतावा नहीं है
      अब मैंने M3 MacBook Air(24GB RAM) ले लिया है और उससे बहुत संतुष्ट हूँ
      जो लोग अभी भी 2019 मॉडल इस्तेमाल कर रहे हैं, उन्हें VRM thermal pad mod ज़रूर consider करना चाहिए
    • सच कहूँ तो i9 खुद ही laptop के लिए अनुपयुक्त CPU था
      Dell में भी i9 को i7 से बदलते ही चीज़ें काफ़ी बेहतर हो गईं
      यानी “बड़ा नंबर = बेहतर CPU” वाली marketing के झाँसे में आ गए थे
    • मैंने भी यही समस्या झेली, खासकर जब दो external monitor जुड़े होते थे
      बाद में M1 Max पर गया तो मानो पूरी दुनिया बदल गई
      अब M3 Max पर upgrade कर लिया है, और Apple Silicon लंबे समय तक टिकेगा ऐसा लगता है
    • वह laptop मेरे इस्तेमाल का सबसे खराब कंप्यूटर था
      boot होते ही fan चलने लगते थे, और Thunderbolt device जोड़ने पर kernel panic भी अक्सर होता था
      अभी जो M1 Max MBP इस्तेमाल कर रहा हूँ, वह पूरी तरह stable है
  • project काफ़ी अच्छा लग रहा है
    लेकिन macOS पर development लगातार मुश्किल होता जा रहा है, और throttling detect कर लेने के बाद वास्तव में क्या किया जा सकता है, यह सवाल बना रहता है
    fan speed control भी नहीं कर सकते, और undervolting भी संभव नहीं है, है ना?

    • मेरे मामले में मैंने iStat Menus से fan curve manually adjust की थी
      default curve इतनी धीमी थी कि throttling पहले शुरू हो जाती थी
      Apple Silicon पर High Power Mode इस्तेमाल करें तो fan तेज़ घूमते हैं
      अब मैं custom curve इस्तेमाल नहीं करता, लेकिन 14" M4 Max काफ़ी noisy है
      MacBook Air में fan ही नहीं है, तो बस इसे ठंडा होने देना पड़ता है
    • मैं Macs Fan Control इस्तेमाल करता हूँ ताकि CPU temperature के हिसाब से fan RPM adjust कर सकूँ
      default setting में तापमान 90 डिग्री से ऊपर चला जाता था, इसलिए मैंने इसे ज़्यादा conservative रखा
      GitHub लिंक
    • मुझे ऐसे app की सच में ज़रूरत थी, और अब यह आ गया
      कभी-कभी कोई process runaway हो जाता है और throttling शुरू हो जाती है, लेकिन तब तक आधी battery खत्म हो चुकी होती है
    • आख़िर में आप कर भी यही सकते हैं कि app बंद करें या थोड़ी देर रुक जाएँ
      जब background में बहुत सारे app चल रहे हों, तब यह समस्या अक्सर होती है
  • अगर इसे Homebrew में डालें तो मुफ़्त code signing और notarization मिल सकता है
    उस तरह distribute किया जाए तो बहुत अच्छा होगा

    • बढ़िया जानकारी है। सोच रहा हूँ कि क्या Windows के लिए मुफ़्त signing का तरीका भी है?
    • ओह, मुझे यह पता नहीं था। लगा था यह developer setting पर निर्भर करता होगा, अब देखना पड़ेगा
  • मेरा अनुमान है कि समस्या CPU नहीं बल्कि USB controller के thermal saturation की है
    CPU/GPU नहीं, बल्कि chassis ज़्यादा गरम हो जाती है, heat dissipation रुक जाती है और अंत में throttling होती है
    अलग adapter या monitor के साथ experiment करना चाहिए

    • मैं भी 2019 i9 इस्तेमाल करता हूँ, और charging port बदलते ही throttling गायब हो गई
      लगता है तुम सही कह रहे हो
    • मैं इसे पूरी तरह समझ नहीं पाया, लेकिन मेरे M2 Air में भी कुछ ऐसा ही होता है
      4K 144Hz monitor से जोड़कर Zoom या कई video stream चलाऊँ तो बहुत heat होती है
      USB controller से ज़्यादा यह simple load issue लगता है
    • इस phenomenon को thermal soaking कहते हैं
  • लगता है site traffic surge से down हो गई
    repository है angristan/MacThrottle

    • fix कर दिया गया। Cloudflare Workers fail closed mode पर set था, इसलिए वह traffic block कर रहा था
  • अगर iStat Menus में CPU 100% दिखे लेकिन power usage कम हो, तो इसे throttling समझा जा सकता है,
    लेकिन low-power USB-C charger से connected होने पर भी यही behavior दिख सकता है
    charger power detect करने वाला feature जोड़ना अच्छा होगा

    • मैंने भी M1 MacBook Air पर D&D session के दौरान यही समस्या देखी
      charging के दौरान ज़्यादा गरमी से throttling बढ़ जाती थी, लेकिन session से पहले charge कर लेने पर समस्या हल हो गई
    • पहले कभी power adapter output कम होने की वजह से game खेलते-खेलते battery खत्म होकर system बंद हो गया था
      बाद की generation में बड़े power adapter क्यों आए, यह तब समझ में आया
    • फिर यह सवाल है कि सिर्फ core temperature से throttling का पता क्यों नहीं चल सकता
      क्या तापमान ही सीधा control variable नहीं है?
    • iStat Menus charger power दिखाता तो है, लेकिन यह behavior क्यों होता है, यह अब भी समझ से बाहर है
  • अगर CPU usage और system power को menu bar में दिखाते रहें, तो abnormal sign तुरंत पकड़ में आ सकता है
    exelban/stats

    • मैंने भी इसी तरह पहली बार throttling पर शक किया था
      CPU usage ऊँचा था, लेकिन power draw घट रहा था, वहीं से अंदाज़ा हुआ
  • उम्मीद है अगले MacBook Air M5 में Vapor Chamber cooling आएगी
    अभी लगता है Apple heat dissipation से ज़्यादा noise minimization को प्राथमिकता देता है
    इसलिए मैंने minimum fan speed को ज़बरदस्ती ऊँचा कर रखा है

    • Vapor Chamber तुरंत heat spread करने में अच्छी है, लेकिन आख़िरकार heat aluminum body तक ही जाती है
      जब 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 नहीं होती लगती