From: Jens Axboe <axboe@suse.de>
To: Andi Kleen <ak@suse.de>
Cc: Andy Chittenden <AChittenden@bluearc.com>,
Anton Altaparmakov <aia21@cam.ac.uk>,
Andrew Morton <akpm@osdl.org>,
davej@redhat.com, linux-kernel@vger.kernel.org,
lwoodman@redhat.com,
Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Subject: Re: adding swap workarounds oom - was: Re: Out of Memory: Killed process 16498 (java).
Date: Wed, 1 Mar 2006 15:34:38 +0100 [thread overview]
Message-ID: <20060301143438.GX4816@suse.de> (raw)
In-Reply-To: <200603011526.39457.ak@suse.de>
On Wed, Mar 01 2006, Andi Kleen wrote:
> On Wednesday 01 March 2006 15:18, Jens Axboe wrote:
> > On Wed, Mar 01 2006, Andi Kleen wrote:
> > > On Wednesday 01 March 2006 14:41, Jens Axboe wrote:
> > > > On Wed, Mar 01 2006, Andy Chittenden wrote:
> > > > > with revised patch that does:
> > > > >
> > > > > printk("sg%d: dma=%llx, dma_len=%u/%u, pfn=%lu\n", i,
> > > > > (unsigned long long) sg->dma_address, sg->dma_length, sg->offset,
> > > > > page_to_pfn(sg->page));
> > > >
> > > > That is correct, thanks!
> > > >
> > > > > hda: DMA table too small
> > > > > ide dma table, 255 entries, bounce pfn 1310720
> > > > > sg0: dma=81c8800, dma_len=4096/0, pfn=1296369
> > > >
> > > > Still the same badness here, it's 2kb into a page so straddles two pages
> > > > for one entry.
> > >
> > > That's normal if it was in the IOMMU and a merged entry.
> > >
> > > You can try iommu=nomerge.
> > >
> > > Or maybe the higher layers are passing in physically continuous pages
> > > that get merged? Not too unlikely at boot.
> >
> > But that would have to be 1kb or 512b io going in
>
> Yes. Why not?
It's not totally out of the question, but I would say it's unlikely.
Andy, I have generated a new debug patch that also dumps the request in
question, can you apply that one? It replaces the earlier patch...
> > > > Andi, any idea what is going on here? Why is this throwing up all of a
> > > > sudden??
> > >
> > > What is throwing up exactly?
> > >
> > > There was a change recently in the merging algorithm, but it shouldn't
> > > cause any bad side effects for correct users of *_map_sg()
> >
> > That the request we end up passing to blk_rq_map_sg() and then to
> > pci_map_sg() ends up with more entries than the driver advertised. So
> > far I think only Andy reported this, and then only with your
> > blk_queue_bounce_limit() patch applied.
>
> It shouldn't end up with more, only with less.
Sure yes, but if that 'less' is still more than what the driver can
handle, then there's a problem.
> Does iommu=nomerge make a difference?
Andy?
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index 0523da7..f893f98 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -221,6 +221,37 @@ int ide_build_sglist(ide_drive_t *drive,
EXPORT_SYMBOL_GPL(ide_build_sglist);
+static void dump_dma_table(ide_drive_t *drive, struct request *rq)
+{
+ ide_hwif_t *hwif = HWIF(drive);
+ request_queue_t *q = drive->queue;
+ struct bio *bio;
+ struct bio_vec *bvec;
+ int i;
+
+ printk("ide dma table, %d entries, bounce pfn %lu\n", hwif->sg_nents, q->bounce_pfn);
+ for (i = 0; i < hwif->sg_nents; i++) {
+ struct scatterlist *sg = &hwif->sg_table[i];
+
+ printk("sg%d: dma=%llx, len=%u/%u, pfn=%lu\n", i, (unsigned long long) sg->dma_address, sg->dma_length, sg->offset, page_to_pfn(sg->page));
+ }
+
+ printk("request: phys seg %d, hw seg %d, nr_sectors %lu\n", rq->nr_phys_segments, rq->nr_hw_segments, rq->nr_sectors);
+ i = 0;
+ rq_for_each_bio(bio, rq) {
+ int j;
+
+ printk(" bio%d: bytes=%u, phys seg %d, hw seg %d\n", i, bio->bi_size, bio->bi_phys_segments, bio->bi_hw_segments);
+ bio_for_each_segment(bvec, bio, j) {
+ void *addr = page_address(bvec->bv_page);
+
+ printk(" bvec%d: addr=%p, size=%u, off=%u\n", j, addr, bvec->bv_len, bvec->bv_offset);
+ }
+ i++;
+ }
+
+}
+
/**
* ide_build_dmatable - build IDE DMA table
*
@@ -311,6 +342,7 @@ use_pio_instead:
hwif->sg_table,
hwif->sg_nents,
hwif->sg_dma_direction);
+ dump_dma_table(drive, rq);
return 0; /* revert to PIO for this request */
}
--
Jens Axboe
next prev parent reply other threads:[~2006-03-01 14:35 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-01 13:34 adding swap workarounds oom - was: Re: Out of Memory: Killed process 16498 (java) Andy Chittenden
2006-03-01 13:41 ` Jens Axboe
2006-03-01 14:05 ` Andi Kleen
2006-03-01 14:18 ` Jens Axboe
2006-03-01 14:26 ` Andi Kleen
2006-03-01 14:34 ` Jens Axboe [this message]
2006-03-01 14:41 ` Andi Kleen
2006-03-01 15:00 ` Jens Axboe
-- strict thread matches above, loose matches on Subject: below --
2006-03-03 9:16 Andy Chittenden
2006-03-02 10:46 Andy Chittenden
2006-03-02 11:10 ` Jens Axboe
2006-03-02 12:21 ` Andi Kleen
2006-03-02 12:26 ` Jens Axboe
[not found] <89E85E0168AD994693B574C80EDB9C270393C141@uk-email.terastack.bluearc.com>
2006-03-01 15:57 ` Jens Axboe
2006-03-01 14:40 Andy Chittenden
2006-03-01 10:47 Andy Chittenden
2006-03-01 12:15 ` Jens Axboe
2006-03-01 12:19 ` Jens Axboe
2006-03-01 12:23 ` Andi Kleen
2006-03-01 12:25 ` Jens Axboe
2006-03-01 9:42 Andy Chittenden
2006-03-01 9:55 ` Jens Axboe
2006-02-28 10:27 Andy Chittenden
2006-02-28 10:29 ` Jens Axboe
2006-02-28 10:10 Andy Chittenden
2006-02-28 10:20 ` Jens Axboe
2006-02-27 16:39 Andy Chittenden
2006-02-27 14:50 Andy Chittenden
2006-02-27 14:56 ` Jens Axboe
[not found] <89E85E0168AD994693B574C80EDB9C270393BF0E@uk-email.terastack.bluearc.com>
2006-02-27 14:28 ` Jens Axboe
2006-02-24 9:33 Andy Chittenden
2006-02-22 10:43 Andy Chittenden
2006-02-22 13:34 ` Jens Axboe
2006-02-22 13:35 ` Jens Axboe
2006-02-22 13:38 ` Jens Axboe
2006-02-03 13:56 Andy Chittenden
2006-02-03 14:00 ` Jens Axboe
2006-01-27 11:53 Andy Chittenden
2006-01-27 14:21 ` Jens Axboe
2006-01-27 14:39 ` Anton Altaparmakov
2006-02-03 9:20 ` adding swap workarounds oom - was: " Anton Altaparmakov
2006-02-03 9:26 ` Andrew Morton
2006-02-03 11:01 ` Anton Altaparmakov
2006-02-03 13:54 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060301143438.GX4816@suse.de \
--to=axboe@suse.de \
--cc=AChittenden@bluearc.com \
--cc=aia21@cam.ac.uk \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=bzolnier@gmail.com \
--cc=davej@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lwoodman@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.