Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Nov 1996 20:20:49 -0800 (PST)
From:      Tony Li <tli@jnx.com>
To:        jgreco@brasil.moneng.mei.com
Cc:        dennis@etinc.com, isp@FreeBSD.ORG
Subject:   Re: changed to: Frac T3?
Message-ID:  <199611190420.UAA14723@chimp.jnx.com>
In-Reply-To: <199611190357.VAA03823@brasil.moneng.mei.com> (message from Joe Greco on Mon, 18 Nov 1996 21:57:49 -0600 (CST))

next in thread | previous in thread | raw e-mail | index | archive | help


   I always thought packet routing was handled as a fairly high priority
   thing.  Packet arrives, generates interrupt, kernel processes, queues
   for output, and sends it.

   User processes should have no way to compete for time spent basically
   dealing with an interrupt.

Yes, exactly.  The problem is that routing protocols (e.g., routed) run as
processes and exhibit this behavior:

   As "sy" reached its peak value of 100, the system's interactive response
   became virtually dead and as the number of packets routed per second
   continued to grow, the vmstat "froze".  I couldn't coax any response
   from any daemons on the system, although I was allowed to connect.  When
   the pps being routed dropped, suddenly the system "sprang" to life
   again.

This is enough to trash most protocols.  Note that ongoing competition from
other process can also be a problem.

   However, less clear to me is that your argument against
   having any "significant non-routing load" on a router applies to UNIX
   based routers.  Maybe someone like David or Bruce could clarify this.

Simple to demonstrate.  Take a compute bound process which generates and
receives packets periodically.  This emulates your routing protocol.  Start
a kernel build.  You'll notice a non-trivial performance hit in interactive
response and computation by your routing protocol.  Now renice your kernel
build.  Things get better, but that process still consumes bus cycles,
physical memory, and gets some share of the CPU.  Add more load until
processes start paging.  You'll note that the progress of your 'routing
protocol' degrades further.  Pretty soon, your timers start to slip.
You're now on the brink of collapse.

The result is simple: routing protocols need a guaranteed minimal amount of
CPU and I/O to survive.  Lacking strict resource controls under Unix, the
best way of delivering that guarantee is to exclude other load from the
box.  For a seriously robust router, you'd also need to put a cap on the
amount of time spent in interrupt processing.

Tony




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611190420.UAA14723>