svn commit: r287405 - head/sys/geom

Edward Tomasz Napierała trasz at FreeBSD.org
Thu Sep 3 12:06:12 UTC 2015


On 0902T1729, Warner Losh wrote:
> Author: imp
> Date: Wed Sep  2 17:29:30 2015
> New Revision: 287405
> URL: https://svnweb.freebsd.org/changeset/base/287405
> 
> Log:
>   After the introduction of direct dispatch, the pacing code in g_down()
>   broke in two ways. One, the pacing variable was accessed in multiple
>   threads in an unsafe way. Two, since large numbers of I/O could come
>   down from the buf layer at one time, large numbers of allocation
>   failures could happen all at once, resulting in a huge pace value that
>   would limit I/Os to 10 IOPS for minutes (or even hours) at a
>   time. While a real solution to these problems requires substantial
>   work (to go to a no-allocation after the first model, or to have some
>   way to wait for more memory with some kind of reserve for pager and
>   swapper requests), it is relatively easy to make this simplistic
>   pacing less pathological.

Shouldn't we emit some warning the first time this happens, to aid
in debugging strange IO performance degradation?  Something like...

> @@ -688,7 +699,7 @@ g_io_deliver(struct bio *bp, int error)
>  	bp->bio_driver2 = NULL;
>  	bp->bio_pflags = 0;
>  	g_io_request(bp, cp);

	if (warned_about_pace == 0) {
		printf("WARNING: GEOM io allocation failed; expect reduced IO performance\n");
		warned_about_pace = 1;
	}

> -	pace++;
> +	pace = 1;
>  	return;
>  }



More information about the svn-src-head mailing list