From owner-svn-src-head@FreeBSD.ORG Thu Aug 28 18:45:17 2014 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 2DCC56F3; Thu, 28 Aug 2014 18:45:17 +0000 (UTC) Received: from h2.funkthat.com (gate2.funkthat.com [208.87.223.18]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "funkthat.com", Issuer "funkthat.com" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id CFB311EFD; Thu, 28 Aug 2014 18:45:16 +0000 (UTC) Received: from h2.funkthat.com (localhost [127.0.0.1]) by h2.funkthat.com (8.14.3/8.14.3) with ESMTP id s7SIjFur064640 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 28 Aug 2014 11:45:15 -0700 (PDT) (envelope-from jmg@h2.funkthat.com) Received: (from jmg@localhost) by h2.funkthat.com (8.14.3/8.14.3/Submit) id s7SIjFcZ064639; Thu, 28 Aug 2014 11:45:15 -0700 (PDT) (envelope-from jmg) Date: Thu, 28 Aug 2014 11:45:15 -0700 From: John-Mark Gurney To: Alexander Motin Subject: Re: svn commit: r269814 - head/sys/dev/xen/blkfront Message-ID: <20140828184515.GV71691@funkthat.com> References: <53e8e31e.2179.30c1c657@svn.freebsd.org> <53FF7386.3050804@FreeBSD.org> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <53FF7386.3050804@FreeBSD.org> User-Agent: Mutt/1.4.2.3i X-Operating-System: FreeBSD 7.2-RELEASE i386 X-PGP-Fingerprint: 54BA 873B 6515 3F10 9E88 9322 9CB1 8F74 6D3F A396 X-Files: The truth is out there X-URL: http://resnet.uoregon.edu/~gurney_j/ X-Resume: http://resnet.uoregon.edu/~gurney_j/resume.html X-TipJar: bitcoin:13Qmb6AeTgQecazTWph4XasEsP7nGRbAPE X-to-the-FBI-CIA-and-NSA: HI! HOW YA DOIN? can i haz chizburger? X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.2.2 (h2.funkthat.com [127.0.0.1]); Thu, 28 Aug 2014 11:45:15 -0700 (PDT) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, Roger Pau =?iso-8859-1?Q?Monn=E9?= , src-committers@freebsd.org X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Aug 2014 18:45:17 -0000 Alexander Motin wrote this message on Thu, Aug 28, 2014 at 21:23 +0300: > Hi, Roger. > > It looks to me like this commit does not work as it should. I got > problem when I just tried `newfs /dev/ada0 ; mount /dev/ada0 /mnt`. > Somehow newfs does not produce valid filesystem. Problem is reliably > repeatable and reverting this commit fixes it. > > I found at least one possible cause there: If original data buffer is > unmapped, misaligned and not physically contiguous, then present x86 > bus_dmamap_load_bio() implementation will process each physically > contiguous segment separately. Due to the misalignment first and last > physical segments may have size not multiple to 512 bytes. Since each > segment processed separately, they are not joined together, and > xbd_queue_cb() is getting segments not multiple to 512 bytes. Attempt to > convert them to exact number of sectors in the driver cause data corruption. Are you sure this isn't a problem w/ the tag not properly specifying the correct alignement? Also, I don't think there is a way for busdma to say that you MUST have a segment be a multiple of 512, though you could use a 512 boundary, but that would force all segments to only be 512 bytes... > This is a bug of the busdma code, and until it is fixed I don't see > solution other then temporary reverting this commit. > > On 11.08.2014 18:37, Roger Pau Monné wrote: > > Author: royger > > Date: Mon Aug 11 15:37:02 2014 > > New Revision: 269814 > > URL: http://svnweb.freebsd.org/changeset/base/269814 > > > > Log: > > blkfront: add support for unmapped IO > > > > Using unmapped IO is really beneficial when running inside of a VM, > > since it avoids IPIs to other vCPUs in order to invalidate the > > mappings. > > > > This patch adds unmapped IO support to blkfront. The following tests > > results have been obtained when running on a Xen host without HAP: > > > > PVHVM > > 3165.84 real 6354.17 user 4483.32 sys > > PVHVM with unmapped IO > > 2099.46 real 4624.52 user 2967.38 sys > > > > This is because when running using shadow page tables TLB flushes and > > range invalidations are much more expensive, so using unmapped IO > > provides a very important performance boost. > > > > Sponsored by: Citrix Systems R&D > > Tested by: robak > > MFC after: 1 week > > PR: 191173 > > > > dev/xen/blkfront/blkfront.c: > > - Add and announce support for unmapped IO. > > > > Modified: > > head/sys/dev/xen/blkfront/blkfront.c > > > > Modified: head/sys/dev/xen/blkfront/blkfront.c > > ============================================================================== > > --- head/sys/dev/xen/blkfront/blkfront.c Mon Aug 11 15:06:07 2014 (r269813) > > +++ head/sys/dev/xen/blkfront/blkfront.c Mon Aug 11 15:37:02 2014 (r269814) > > @@ -272,8 +272,12 @@ xbd_queue_request(struct xbd_softc *sc, > > { > > int error; > > > > - error = bus_dmamap_load(sc->xbd_io_dmat, cm->cm_map, cm->cm_data, > > - cm->cm_datalen, xbd_queue_cb, cm, 0); > > + if (cm->cm_bp != NULL) > > + error = bus_dmamap_load_bio(sc->xbd_io_dmat, cm->cm_map, > > + cm->cm_bp, xbd_queue_cb, cm, 0); > > + else > > + error = bus_dmamap_load(sc->xbd_io_dmat, cm->cm_map, > > + cm->cm_data, cm->cm_datalen, xbd_queue_cb, cm, 0); > > if (error == EINPROGRESS) { > > /* > > * Maintain queuing order by freezing the queue. The next > > @@ -333,8 +337,6 @@ xbd_bio_command(struct xbd_softc *sc) > > } > > > > cm->cm_bp = bp; > > - cm->cm_data = bp->bio_data; > > - cm->cm_datalen = bp->bio_bcount; > > cm->cm_sector_number = (blkif_sector_t)bp->bio_pblkno; > > > > switch (bp->bio_cmd) { > > @@ -993,7 +995,7 @@ xbd_instance_create(struct xbd_softc *sc > > > > sc->xbd_disk->d_mediasize = sectors * sector_size; > > sc->xbd_disk->d_maxsize = sc->xbd_max_request_size; > > - sc->xbd_disk->d_flags = 0; > > + sc->xbd_disk->d_flags = DISKFLAG_UNMAPPED_BIO; > > if ((sc->xbd_flags & (XBDF_FLUSH|XBDF_BARRIER)) != 0) { > > sc->xbd_disk->d_flags |= DISKFLAG_CANFLUSHCACHE; > > device_printf(sc->xbd_dev, -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not."