Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Dec 2010 16:45:20 +0200
From:      Alexander Motin <mav@FreeBSD.org>
To:        Lev Serebryakov <lev@serebryakov.spb.ru>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Where userland read/write requests, whcih is larger than MAXPHYS, are splitted?
Message-ID:  <4D023D00.10301@FreeBSD.org>
In-Reply-To: <mailpost.1291988544.5326917.42118.mailing.freebsd.hackers@FreeBSD.cs.nctu.edu.tw>
References:  <mailpost.1291988544.5326917.42118.mailing.freebsd.hackers@FreeBSD.cs.nctu.edu.tw>

next in thread | previous in thread | raw e-mail | index | archive | help
Lev Serebryakov wrote:
>    I'm  digging  thought  GEOM/IO  code  and  can not find place, where
>  requests  from  userland to read more than MAXPHYS bytes, is splitted
>  into  several "struct bio"?
> 
>       It seems, that these children request are issued one-by-one, not in
>  parallel,   am  I  right?  Why?  It  breaks  down  parallelism,  when
>  underlying GEOM can process several requests simoltaneously?

AFAIK first time requests from user-land broken to MAXPHYS-size pieces
by physio() before entering GEOM. Requests are indeed serialized here, I
suppose to limit KVA that thread can harvest, but IMHO it could be
reconsidered.

One more split happens (when needed) at geom_disk module to honor disk
driver's maximal I/O size. There is no serialization. Most of ATA/SATA
drivers in 8-STABLE support I/O up to at least min(512K, MAXPHYS) - 128K
by default. Many SCSI drivers still limited by DFLTPHYS - 64K.

-- 
Alexander Motin



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