Skip to content

GNS3 Dynamips at 100% CPU: how to set Idle-PC

Each Dynamips router pins a CPU core until it has a working Idle-PC value. Compute one with Idle-PC or Auto Idle-PC and check the CPU drops.

Published on 5 min read

You start a few Dynamips routers (c3725, c7200 and friends) in GNS3 and each one pushes a CPU core to 100%: the dynamips process tops Task Manager or top, and the fans spin up. The router has no working Idle-PC value, so Dynamips runs IOS at full speed even when it does nothing.

Why it happens

Dynamips emulates the router's MIPS CPU one instruction at a time. When IOS has nothing to do, it doesn't stop the CPU; it spins in an idle loop. Dynamips can't tell that loop from real work, so it emulates it as fast as it can. The GNS3 documentation puts it this way: "a single instance can consume 100% of the processing time for a CPU core or thread." GNS3 runs one Dynamips process per router, so five routers can take five cores.

The Idle-PC value is the address of that idle loop in the IOS code. With it, Dynamips sees when IOS reaches the loop and sleeps for a moment instead. The Dynamips manual is clear that the value is specific to one IOS image, so a different image needs a new value.

GNS3 ships Idle-PC values for some well-known images. The new IOS router wizard fills one in when it recognises your file by its checksum. For any other image the field stays empty, and you get 100% CPU.

Fix it

1. Check whether the template has a value

Open Edit > Preferences > Dynamips > IOS routers and select your router template. The panel on the right shows an Idle-PC: line. If it is empty, the image has no value yet. You can also see it in the template's settings (Edit, then the Advanced tab).

2. Boot one router to an idle prompt

The value you get depends on what IOS is doing while GNS3 measures. So:

  1. Start one router only, and stop the others.
  2. Open its console and wait for the boot to finish.
  3. Wait until Press RETURN to get started appears and the messages stop, then press Enter.
  4. If IOS asks Would you like to enter the initial configuration dialog? [yes/no]:, answer no first. The Dynamips manual warns against measuring at that prompt.

GNS3's own hint text gives the same advice: the best values come when IOS is idle and you have pressed Return.

3. Compute the value with Idle-PC

  1. Right-click the router and choose Idle-PC.
  2. GNS3 shows Computing Idle-PC values, please wait... for a few seconds.
  3. A list opens. Potentially better Idle-PC values are marked with '*'.
  4. Select a value with a *, click Apply, and watch the router's CPU for a few seconds.
  5. Try the next value if the CPU stays high. Keep the one that brings it down the most.
  6. Click OK. GNS3 applies the value to every router in the project that uses the same image, and saves it in the templates that use that image.

4. Or let GNS3 pick with Auto Idle-PC

Right-click the router and choose Auto Idle-PC. You can see what it does in the gns3-server code:

  • If the router is stopped, GNS3 starts it and waits 20 seconds for it to boot.
  • It asks Dynamips for proposals, then tries each one for 3 seconds.
  • It keeps the first value that brings the router under 70% CPU.

On success you see a message like Idle-PC value 0x... has been applied on R1 and all templates with IOS image .... If nothing works, you get Sorry, no idle-pc value was suitable. Then go back to step 2 and use the manual Idle-PC list. The Idle-PC finder button in the new IOS router wizard runs the same automatic search.

5. Or type a known value

If you already have a good value for the exact same image file, paste it in the template's Advanced tab, in the Idle-PC field. The format is 0x followed by 8 hex digits; the field turns green when it is valid. Leave Idlemax and Idlesleep at their defaults (500 and 30).

How to check it worked

With the router idle at its prompt, look at the CPU:

  • Windows: Task Manager, Details tab, dynamips.exe.
  • macOS: Activity Monitor, dynamips.
  • Linux: run this in a terminal.
top -p "$(pgrep -d, dynamips)"

If your routers run in the GNS3 VM, open View > Docks > Servers Summary. It shows the CPU and RAM use of each server. An idle router should now use a small fraction of a core instead of all of it. CPU still rises when the router does real work, such as converging OSPF or running debug.

If it still fails

  • The value came from a busy router. Compute it again with the router idle, after pressing Enter, with no debug running.
  • You changed the image. A new image, or the same IOS version with another feature set, needs a new value.
  • The image isn't a good fit. The GNS3 docs recommend c3640, c3660, c3725, c3745 and c7200 images, with the right amount of RAM. Other platforms are less stable in Dynamips.
  • Too many routers for your cores. Even with Idle-PC, every router costs some CPU. Start the ones you need for the exercise.

For other GNS3 problems, see the GNS3 troubleshooting guide. If links between your routers won't come up, read Unable to create UDP NIO.

A lighter way to build the lab

If you need routing protocols more than a specific IOS image, a router that runs as a normal Linux process has no emulated CPU to tame. Isothrum's editor is free, runs in your browser with no account, and lets you draw a network lab with an automatic router or your own: FRR, or Cisco IOL, IOSv, CSR 1000v, Catalyst 8000v or Dynamips from your own images, built with vrnetlab. It exports the lab as Docker Compose or Vagrant files. For a Dynamips router, the Idle-PC advice above still applies.

Related articles

Dynamips couldn't open the UDP port for a link. Find what holds the port, move GNS3's UDP tunneling port range, and start the project again.
GNS3 alternatives compared as of October 2026: EVE-NG, Containerlab, Cisco CML, Kathará, netlab and Isothrum. Licensing, what they run, and who each fits.
The GNS3 app runs on M-series Macs, but the x86 GNS3 VM doesn't. What the ARM64 VM can run, its limits, and when to use a remote server.