Moderate CPU load when idle caused by IPv6 DHCP script running too frequently

TLDR: If your router is idle and you see a load average > 0.00, check if odhcp6c is running dhcpv6.script every 3 seconds. If so, configure ra_holdoff to 30, the old pre-18.06 default. This will reduce the idle load average.

Details

If your router is idle and the uptime command shows a load average much bigger than 0.00, like, 0.10 or 0.20, especially on an older router, run ps | grep [o]dhcp6c every second in a shell. If you see TWO instances of odhcp6c every 3 seconds (one instance is normal, the other instance is about to run dhcpv6.script), it may mean that your ISP is sending an IPv6 DHCP RA Update message every 3 seconds, which odhcp6c deals with by running dhcpv6.script every 3 seconds, which consumes some CPU load. This is explained in this related issue on Gluon.

I think this started occuring after a change to odhcp6c to make it more standards compliant and to address this issue.

If you want to reduce your idle CPU load by processing IPv6 DHCP RA Updates less frequently and you don't mind being less standards compliant, you can configure the ra_holdoff option to 30, the old pre-18.06 value. According to this post, you can configure that by running:

uci set network.client.ra_holdoff=30
uci commit network
reboot

Or, edit /etc/config/network directly and run /etc/init.d/network restart.

Once I made this change, my idle load went back to 0.00 or very close to 0.00.

3 Likes