<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vinod Gorla</title>
    <description>The latest articles on DEV Community by Vinod Gorla (@vinodgorla).</description>
    <link>https://dev.to/vinodgorla</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4072200%2F2aacb709-f4f0-4166-80ae-1abbbfb21caf.png</url>
      <title>DEV Community: Vinod Gorla</title>
      <link>https://dev.to/vinodgorla</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vinodgorla"/>
    <language>en</language>
    <item>
      <title>My workstation was faking sleep: how a $15 meter caught 163 watts of waste</title>
      <dc:creator>Vinod Gorla</dc:creator>
      <pubDate>Fri, 14 Aug 2026 04:54:11 +0000</pubDate>
      <link>https://dev.to/vinodgorla/my-workstation-was-faking-sleep-how-a-15-meter-caught-163-watts-of-waste-4edh</link>
      <guid>https://dev.to/vinodgorla/my-workstation-was-faking-sleep-how-a-15-meter-caught-163-watts-of-waste-4edh</guid>
      <description>&lt;p&gt;I have a Threadripper workstation with two RTX A6000s in my home lab — a machine I'm proud of and slightly afraid of, wattage-wise. A few weeks ago I noticed warm air coming from it while it was supposedly doing nothing, and went down a rabbit hole that ended with a number I didn't believe: my "suspended" machine was drawing &lt;strong&gt;179.8 watts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sleeping. One hundred and eighty watts.&lt;/p&gt;

&lt;p&gt;Here's the whole story, with every command — because the odds are decent your Linux machine is doing the same thing, and checking takes sixty seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup: doing everything right (I thought)
&lt;/h2&gt;

&lt;p&gt;I did the responsible things first, and they were all real improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;idle watchdog&lt;/strong&gt; — a 40-line bash script on a systemd timer that suspends the machine after 30 minutes with no SSH sessions, no GPU work, and no load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wake-on-LAN&lt;/strong&gt;, so a magic packet from my Mac wakes it in ~10 seconds. A sleeping server you can't wake remotely is a server you'll leave running forever.&lt;/li&gt;
&lt;li&gt;GPU runtime power management, CPU energy-preference tuning, the works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The machine dutifully suspended itself every night. The logs said &lt;code&gt;suspend entry&lt;/code&gt;. The fans quieted. I told people my lab slept at near-zero watts. I had verified everything — except the one thing that mattered.&lt;/p&gt;

&lt;h2&gt;
  
  
  The instrument arrives
&lt;/h2&gt;

&lt;p&gt;I bought a ~$15 energy-monitoring smart plug to get the real number. First reading,&lt;br&gt;
machine suspended: &lt;strong&gt;179.8 W&lt;/strong&gt;. My machine &lt;em&gt;idles awake&lt;/em&gt; at a measured ~123 W.&lt;br&gt;
Suspended, it drew &lt;em&gt;more&lt;/em&gt; than sitting at an idle desktop.&lt;/p&gt;

&lt;p&gt;The explanation lives in one file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/mem_sleep
&lt;span class="o"&gt;[&lt;/span&gt;s2idle] deep
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Linux has more than one kind of "suspend." &lt;strong&gt;s2idle&lt;/strong&gt; is a software-only doze: the&lt;br&gt;
kernel parks itself but the platform — fans, VRMs, devices — stays powered. &lt;strong&gt;deep&lt;/strong&gt;&lt;br&gt;
is classic S3: RAM in self-refresh, nearly everything else off. The brackets show&lt;br&gt;
which one &lt;code&gt;systemctl suspend&lt;/code&gt; actually uses. Mine said &lt;code&gt;[s2idle]&lt;/code&gt; — and on my&lt;br&gt;
platform, s2idle quiesces almost nothing. Worse than nothing, in my case: with the OS&lt;br&gt;
parked, the power-management daemons that normally keep idle draw low stop running, while the hardware keeps burning.&lt;/p&gt;

&lt;p&gt;If your machine only shows &lt;code&gt;[s2idle]&lt;/code&gt; with no &lt;code&gt;deep&lt;/code&gt; option at all, keep reading —&lt;br&gt;
that was me too.&lt;/p&gt;
&lt;h2&gt;
  
  
  The fix was one BIOS bit
&lt;/h2&gt;

&lt;p&gt;My board (an ASUS WRX90 workstation board) shipped with &lt;strong&gt;S3 sleep disabled&lt;/strong&gt; in&lt;br&gt;
firmware: &lt;code&gt;Advanced → APM Configuration → S3 mode: [Disabled]&lt;/code&gt;. The kernel can't offer what the firmware hides. I enabled it, rebooted, and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/mem_sleep
s2idle &lt;span class="o"&gt;[&lt;/span&gt;deep]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The kernel now defaulted to real S3 on its own. Next suspend, the meter read:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;17 watts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Same machine, same suspend command, same logs saying "suspended." 179.8 W → 17 W, from one firmware toggle. Wake-on-LAN still works (it's the NIC's oldest trick — S3 predates it by nothing). Resume takes a few seconds longer than s2idle. The GPUs came back clean.&lt;/p&gt;

&lt;p&gt;The remaining 17 W is mostly my board's BMC — a small always-on management computer that gives me remote console and power control. That's a tax I pay willingly; a consumer board would sleep closer to 5 W.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your machine in 60 seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Which sleep does your machine actually use?&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; /sys/power/mem_sleep
&lt;span class="c"&gt;# [s2idle] alone = you may have the same problem. [deep] = you're likely fine.&lt;/span&gt;

&lt;span class="c"&gt;# 2. If deep is listed but not default, try it:&lt;/span&gt;
&lt;span class="nb"&gt;echo &lt;/span&gt;deep | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /sys/power/mem_sleep
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;suspend&lt;/span&gt;
&lt;span class="c"&gt;# (make it permanent with mem_sleep_default=deep on the kernel command line)&lt;/span&gt;

&lt;span class="c"&gt;# 3. If deep isn't offered at all: check your BIOS for an S3 / ACPI sleep setting.&lt;/span&gt;
&lt;span class="c"&gt;#    Mine was under Advanced -&amp;gt; APM. Many boards ship with it disabled.&lt;/span&gt;

&lt;span class="c"&gt;# 4. Trust no log — measure at the wall. Any energy-monitoring smart plug works.&lt;/span&gt;
&lt;span class="c"&gt;#    "Suspended" should read single-digits to ~20 W. If it reads like an idle&lt;/span&gt;
&lt;span class="c"&gt;#    desktop, your sleep is fake.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caveats, honestly: S3 support on modern platforms is uneven — some laptops and boards dropped it entirely (that's a Microsoft/vendor "Modern Standby" story for another day), and resume bugs with GPUs do exist. Test a full suspend/wake cycle before trusting it unattended. My rollback plan was a smart plug that can hard-cycle the machine and a BIOS set to boot on AC restore — belt and suspenders, both $15-class fixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it adds up to
&lt;/h2&gt;

&lt;p&gt;My machine sleeps ~20 hours a day. The difference between fake and real sleep is&lt;br&gt;
~163 W × 20 h ≈ &lt;strong&gt;3.3 kWh every day&lt;/strong&gt; — roughly 1,200 kWh a year, the annual output&lt;br&gt;
of a solar panel or two, or about $150–180 at US rates, for one machine. Multiply by&lt;br&gt;
every homelab, workstation, and "suspended" desktop out there and the number stops being cute.&lt;/p&gt;

&lt;p&gt;The meter gets the last word. Yesterday — a full day of this machine existing, waking&lt;br&gt;
when I needed it, sleeping when I didn't — its total consumption was &lt;strong&gt;0.38 kWh&lt;/strong&gt;:&lt;br&gt;
an average of 17 W across nearly 23 hours, for a dual-GPU Threadripper workstation.&lt;br&gt;
Under the old fake sleep, the same day would have cost over 4 kWh. That's the whole argument, in one line of a smart-plug app.&lt;/p&gt;

&lt;p&gt;Three lessons I'm keeping:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Logs describe intent; meters describe reality.&lt;/strong&gt; Every log on my system said
"suspended." Only the wall socket told the truth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify the claim, not the ceremony.&lt;/strong&gt; I had tested that suspend &lt;em&gt;happened&lt;/em&gt; —
never what it &lt;em&gt;achieved&lt;/em&gt;. Those are different tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The fix is often absurdly small once you can see the problem.&lt;/strong&gt; Weeks of
automation work saved less than one BIOS bit. The automation still matters — it's
what makes the 17 W state the &lt;em&gt;default&lt;/em&gt; instead of a good intention — but the
measurement is what made it real.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;I run a small AI infrastructure lab and consultancy (Syntillation) focused on private, local-first AI systems, built on a principle this project made concrete: whatever I build — AI or not — should run with the smallest eco footprint that does the job, and that footprint should be measured, not assumed. A dual-GPU AI workstation that costs&lt;br&gt;
0.38 kWh a day is proof the two goals aren't in tension. If you're doing the "how much does my hardware actually cost to run" audit on your own fleet, the answer starts with a $15 plug.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>sustainability</category>
      <category>greentech</category>
      <category>linux</category>
      <category>homelab</category>
    </item>
  </channel>
</rss>
