From: roland <for...@gm...> - 2004-05-28 11:06:31
|
hi! i would like to report, that it your patch seems to work fine with 2.6.6 ! uml now has an "io bandwidth limiter" - no uml "customer" should be able to hog the io subsystem anymore :) now, we have an "iostat" for each uml, too: while true; do uml_mconsole umid io_status; sleep 1; done :) thanks christopher! one question: which values need to be set, to have "unlimited" i/o , i.e. to switch off token limitation entirely ? roland ps: the token limiter seems to have a little bug: set token_refill=1 do a "dd if=/dev/zero of=test.dat bs=1024k count=whatever" then "sync". for me, io isn`t limited here - io_tokens just becomes negative - nothing more. ok - io_refill=1 is no "real world" value anyway - so not really important to be fixed - but interesting :) ----- Original Message ----- From: "Christopher S. Aker" <ca...@th...> To: "uml-devel" <use...@li...> Sent: Sunday, March 28, 2004 11:06 AM Subject: [uml-devel] [PATCH] I/O-Request Token Bucket Limiter > Patch is also available here: > http://www.theshore.net/~caker/patches/ > > Apply to a tree already patched with 2.4-um or 2.6-um. > > -Chris > > ---token-limiter-v1.README--- > > This patch implements a simple token bucket filter/limiter on requests > processed through the async io_thread. It will work with or without COW, > but not on ubd devices in sync mode. > > * Two new command line arguments for setting at boot-time: > > token_max=60000 > This sets the maximum tokens in the token-bucket I/O request limiter. > Each io_thread request subtracts one token from the bucket. The bucket > is supplied with <token_refill> tokens every second. When the bucket > becomes empty, I/O requests are throttled to the <token_refill> rate. > > token_refill=2000 > This sets the bucket's refill rate, adding <token_refill> tokens to the > bucket every second. This becomes the I/O request rate when the bucket > becomes empty. > > * Three new mconsole commands to get status information and change the two > variables above: > > (mconsole) help > io_status - Return current I/O status and settings > io_token_max <num> - sets the bucket size > io_token_refill <num> - number of tokens to add each second > > * Example io_status output while: > > idle: > io_count=1845202 io_rate=0 io_tokens=50000 token_refill=1024 \ > token_max=50000 > > bursting: > io_count=1861594 io_rate=6806 io_tokens=35754 token_refill=1024 \ > token_max=50000 > > throttled: > io_count=1994811 io_rate=1087 io_tokens=-153 token_refill=1024 \ > token_max=50000 > io_count=2052289 io_rate=1057 io_tokens=-286 token_refill=1024 \ > token_max=50000 > io_count=2067794 io_rate=1015 io_tokens=-132 token_refill=1024 \ > token_max=50000 > > Our sample shows io_tokens being negative, but - while waiting for the bucket > to be re-supplied, requests will still dribble through no faster than > token_refill req/second. Or, perhaps this is due to inaccuracies of nanosleep > or a bug in my logic. > > * TODO > Stop using an alarm in the io_thread, and instead use gettimeofday to > calculate the token credits due and io_rate. > > > |