Are you getting enough from your N100 SBC?

28 August 2024 By Justin

Did you buy yourself a cute little CWWK Crazy? Trying to use it as a server? Do you get the feeling that it’s not quite as powerful as you would expect from the benchmark figures? Well the N100 is an awesome CPU …. but there’s a good reason you’re not getting as much CPU power as benchmarks suggest you should!

Let me show you why… First install powercap-utils. That’ll help us understand and modify the CPU power settings under Linux:

apt install powercap-utils -y

Now let’s see what the default power limits are set to.

root@prox:~# powercap-info -p intel-rapl
enabled: 1
Zone 0
  name: package-0
  enabled: 1
  max_energy_range_uj: 262143328850
  energy_uj: 429781126
  Constraint 0
    name: long_term
    power_limit_uw: 6000000
    time_window_us: 27983872
    max_power_uw: 6000000
  ...

From the Zome 0 Constraint 0 you can see that the long term power limit is set to 6W.

Now let’s see what happens to the CPU under sustained load. On my Proxmox setup that’s already running some containers that are reasonably CPU heavy (so already up against the power limit) a 7z benchmark gives us this:

Intel(R) N100 (B06E0)
CPU Freq: - - - - - - - - -

RAM size:   31842 MB,  # CPU hardware threads:   4
RAM usage:    882 MB,  # Benchmark threads:      4

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       2945   177   1621   2866  |      33225   210   1349   2835
23:       2461   167   1498   2508  |      32143   206   1351   2781
24:       2593   184   1514   2788  |      29391   193   1336   2580

On the compression benchmark we’re getting about 2600 MIPS. Even with other stuff running that’s not a lot of spare CPU capacity. In another session, let’s check the CPU frequency:

root@prox:~# cat /proc/cpuinfo | grep Hz
cpu MHz         : 1200.011
cpu MHz         : 1200.013
cpu MHz         : 1199.967
cpu MHz         : 1200.036

You can see here the CPU is clocking right down 1.2 GHz to stay inside that 6W power limit. Let’s try doubling that limit:

powercap-set -p intel-rapl -z 0 -c 0 -l 12000000

Instantly we can see the base clock goes up to a respectable 2.9GHz

root@prox:~# cat /proc/cpuinfo | grep Hz
cpu MHz         : 2900.065
cpu MHz         : 2900.021
cpu MHz         : 2900.020
cpu MHz         : 2900.002

And we’re now getting 11000 MIPS! A huge improvement!

Intel(R) N100 (B06E0)
CPU Freq: - - - - - - - - -

RAM size:   31842 MB,  # CPU hardware threads:   4
RAM usage:    882 MB,  # Benchmark threads:      4

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:      11163   279   3894  10860  |     116822   314   3172   9967
23:      11398   299   3879  11613  |     111820   306   3160   9675
24:      10963   298   3954  11788  |     112025   312   3155   9834

So why is the default power limit so low? Well for a system like the CWWK Crazy that’s intended to be fanless the long term power limit is set pretty low to stop it getting too hot. It’s that simple. And in fact if you run it fanless with a high power limit you will find it gets uncomfortably hot after a while (and potentially will then thermally throttle anyway).

The addition of one single tiny 80mm fan on the front is all it takes to turn your fanless but very power-limited system into a still-near-silent but way more capable machine. In fact the CWWK Crazy comes with fan headers and cables, and screw mountings for two 80mm fans. I’ve installed a single fan on mine by squishing some small grommets into the cooler fins then screwing the fan into them. It runs pretty well silent and barely gets warm to the touch even under full load:

Hooking up the supplied cable to the fan header is a little bit fiddly though!

Last words … the command above is not persistent and your power limit will be reset after a reboot. To make it persistant, edit your crontab:

Then add this line at the bottom:

@reboot                      /usr/bin/powercap-set -p intel-rapl -z 0 -c 0 -l 12000000 > /dev/null

Reboot and test, you should be good to go.

Not got a CWWK Crazy yet? Grab one now!