Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have an ARM Linux board that is a router to 16 other boards. When all these download their updates via the router, the network routing effort starves the user space so that a software watchdog (and later on the hardware watchdog) triggers at the router.

Is there a way to renice routing efforts without packet drops?

I am aware that I could run the application with 'above normal' priority but that would have other unwanted side effects. I also have tried traffic shaping with both ingress and token bucket filters but I don't succeed even if I throttle bandwidth usage to 1-2 mbps. If I reduce the node count to five, I can serve up to 15mbps on average, 20 peak. The hardware is too slow to reach more than 30mbps on a fast ethernet link.


  • eth0: common network at every board
  • eth1: toward FTP-gateway, only at router
  • no bridging, just IP-forwarding
share|improve this question
You may want to look into the realtime extensions. – Shawn J. Goff Mar 12 '13 at 19:02
Over the years, I've discovered a rough rule of thumb for bandwidth, which is that you need 1 MHz of clock for every 1 Mbit/s of data you expect that CPU to push. So, are these processors really only ~30 MHz? If they're much faster as I expect (hundreds of MHz, I'm guessing) you probably have an inefficiency in the system somewhere and need to remove that bottleneck. As always, you need to profile, monitor, and benchmark to find the CPU pig. – Warren Young Mar 12 '13 at 19:25
Which network driver(s) do these Ethernet ports use? And do they support ethtool? – derobert Mar 12 '13 at 19:33
Re: benchmarking, if iperf can get much more throughput in this system than your program, it proves the problem is your program, not the stack. – Warren Young Mar 12 '13 at 20:22
It has ~350 MHz, busybox, ~50MB RAM, a 2.6.30ish kernel, tc works and the app is mostly at ~0-15% load. I'll see what iperf says and keep you posted. I'll also check ethtool. – aquaherd Mar 12 '13 at 20:38

I would consider an alternative to changing the routing to support 30 simultaneous downloads on a single ARM Linux board.

Have you thought about setting up a transparent Squid proxy? Those updates, rather than being downloaded 16 times, once for each board, the Squid proxy would cache the single download and serve that to each of the downstream boards.

share|improve this answer
This is actually what I am doing. I limited the amount of simultaneous downloads for my own needs to be on the safe side. However, I am only providing infrastructure to others and I can't impose such restrictions on them. I also already cache the largest chunks. – aquaherd Mar 12 '13 at 20:28

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.