Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Nov 1996 10:28:41 -0600 (CST)
From:      Joe Greco <jgreco@brasil.moneng.mei.com>
To:        luigi@labinfo.iet.unipi.it (Luigi Rizzo)
Cc:        jgreco@brasil.moneng.mei.com, hannibal@cyberstation.net, hackers@freebsd.org
Subject:   Re: Limiting bandwidth on a socket?  (SO_RCVBUF?)
Message-ID:  <199611061628.KAA08735@brasil.moneng.mei.com>
In-Reply-To: <199611061507.QAA08319@labinfo.iet.unipi.it> from "Luigi Rizzo" at Nov 6, 96 04:07:40 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> > > I could swear I saw a "low-bandwidth ncftp" or something of the sort on
> > > sunsite.unc.edu a couple years ago, so I think this is possible (Well, at
> > > least in Linux...).  It's apparently been deleted though.
> 
> Some ftp sites (e.g. funic.funet.fi) tell you the amount of bandwidth
> that has been allocated to your ftp connection. Try to look at what
> kind of ftp server they use.

The ones I have seen implement this with a sleep() mechanism.

> > I am not aware of any general way to do this without code modifications,
> > without the introduction of specialized code such as ET's bandwidth
> > manager (and I am by no means certain that BWMGR can handle this).
> 
> I think to remember this was discussed some time ago on the hackers list.
> Unfortunately I don't remember the outcome of the discussion.

Yeah, and I think I mentioned the sleep() thing last time too.

> If you work inside the kernel (see the 'dummynet" stuff in my
> home page, it introduces bandwidth limitations on your link; with a
> little effort it can be configured to set different limitations on
> different TCP/UDP ports), you can avoid modifying program sources,
> which is extremely annoying.

Yes, absolutely agree (at least for end users).

> Otherwise, for servers which are launched
> by inetd, perhaps you can add a bandwidth-limiter process between your
> process and the socket and again avoid having to modify sources.
> Perhaps tcp_wrappers do this ?

I do not know.  I have a tool that could perhaps be used in this sort
of application, however...

I have a little gimmick called "throttle" which accepts an argument of "K"
that accepts input on stdin and outputs on stdout, and guarantees that a
maximum of "n" K per second goes through it.

It is a really trivial algorithm, and it is important to realize that the
guarantee IS a maximum, but actual throughput may be substantially less.

All it does is

size = 1024 * argv[1]
mem = malloc(size)
while (data) {
	read(mem, size, stdin)
	write(mem, size, stdout)
	sleep(1)
}

"Duhhhhmb" but works.  One could go to a very small bit of work to make it
bidirectional, more suited to general inetd-type services.

> > I will note that some PPP/SLIP software allows prioritization of certain
> > types of traffic, by way of "TOS" (type of service) queue reordering.  
> > This works moderately well when the MTU is small and the amount of data
> > being buffered by the modem is very small.  Cheap modems generally do not
> > give you that level of control.
> 
> I don't think the modem takes more than 128-256 bytes of data, so
> packet prioritization inside the PPP sw can serve the purpose.

I have seen modems which appear to buffer well over a kilobyte of data..

... JG



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