From: James Bottomley <James.Bottomley@suse.de>
To: "Kai Mäkisara" <kai.makisara@kolumbus.fi>
Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
lkolbe@techfak.uni-bielefeld.de, linux-scsi@vger.kernel.org
Subject: Re: After memory pressure: can't read from tape anymore
Date: Fri, 03 Dec 2010 09:06:16 -0600 [thread overview]
Message-ID: <1291388776.2881.4.camel@mulgrave.site> (raw)
In-Reply-To: <4CF905D1.6050903@kolumbus.fi>
On Fri, 2010-12-03 at 16:59 +0200, Kai Mäkisara wrote:
> On 12/03/2010 02:27 PM, FUJITA Tomonori wrote:
> > On Mon, 29 Nov 2010 19:09:46 +0200 (EET)
> > Kai Makisara<Kai.Makisara@kolumbus.fi> wrote:
> >
> >>> This same behaviour appears when we're doing a few incremental backups;
> >>> after a while, it just isn't possible to use the tape drives anymore -
> >>> every I/O operation gives an I/O Error, even a simple dd bs=64k
> >>> count=10. After a restart, the system behaves correctly until
> >>> -seemingly- another memory pressure situation occured.
> >>>
> >> This is predictable. The maximum number of scatter/gather segments seems
> >> to be 128. The st driver first tries to set up transfer directly from the
> >> user buffer to the HBA. The user buffer is usually fragmented so that one
> >> scatter/gather segment is used for each page. Assuming 4 kB page size, the
> >> maximu size of the direct transfer is 128 x 4 = 512 kB.
> >
> > Can we make enlarge_buffer friendly to the memory alloctor a bit?
> >
> > His problem is that the driver can't allocate 2 mB with the hardware
> > limit 128 segments.
> >
> > enlarge_buffer tries to use ST_MAX_ORDER and if the allocation (256 kB
> > page) fails, enlarge_buffer fails. It could try smaller order instead?
> >
> > Not tested at all.
> >
> >
> > diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
> > index 5b7388f..119544b 100644
> > --- a/drivers/scsi/st.c
> > +++ b/drivers/scsi/st.c
> > @@ -3729,7 +3729,8 @@ static int enlarge_buffer(struct st_buffer * STbuffer, int new_size, int need_dm
> > b_size = PAGE_SIZE<< order;
> > } else {
> > for (b_size = PAGE_SIZE, order = 0;
> > - order< ST_MAX_ORDER&& b_size< new_size;
> > + order< ST_MAX_ORDER&&
> > + max_segs * (PAGE_SIZE<< order)< new_size;
> > order++, b_size *= 2)
> > ; /* empty */
> > }
>
> You are correct. The loop does not work at all as it should. Years ago,
> the strategy was to start with as big blocks as possible to minimize the
> number s/g segments. Nowadays the segments must be of same size and the
> old logic is not applicable.
>
> I have not tested the patch either but it looks correct.
>
> Thanks for noticing this bug. I hope this helps the users. The question
> about number of s/g segments is still valid for the direct i/o case but
> that is optimization and not whether one can read/write.
Realistically, though, this will only increase the probability of making
an allocation work, we can't get this to a certainty.
Since we fixed up the infrastructure to allow arbitrary length sg lists,
perhaps we should document what cards can actually take advantage of
this (and how to do so, since it's not set automatically on boot). That
way users wanting tapes at least know what the problems are likely to be
and how to avoid them in their hardware purchasing decisions. The
corollary is that we should likely have a list of not recommended cards:
if they can't go over 128 SG elements, then they're pretty much
unsuitable for modern tapes.
James
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2010-12-03 15:06 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-28 19:15 After memory pressure: can't read from tape anymore Lukas Kolbe
2010-11-29 17:09 ` Kai Makisara
2010-11-30 13:31 ` Lukas Kolbe
2010-11-30 16:10 ` Boaz Harrosh
2010-11-30 16:23 ` Kai Makisara
2010-11-30 16:44 ` Boaz Harrosh
2010-11-30 17:04 ` Kai Makisara
2010-11-30 17:24 ` Boaz Harrosh
2010-11-30 19:53 ` Kai Makisara
2010-12-01 9:40 ` Lukas Kolbe
2010-12-02 11:17 ` Desai, Kashyap
2010-12-02 16:22 ` Kai Makisara
2010-12-02 18:14 ` Desai, Kashyap
2010-12-02 20:25 ` Kai Makisara
2010-12-05 10:44 ` Lukas Kolbe
2010-12-03 10:13 ` FUJITA Tomonori
2010-12-03 10:45 ` Desai, Kashyap
2010-12-03 11:11 ` FUJITA Tomonori
2010-12-02 10:01 ` Lukas Kolbe
2010-12-03 9:44 ` FUJITA Tomonori
2010-11-30 16:20 ` Kai Makisara
2010-12-01 17:06 ` Lukas Kolbe
2010-12-02 16:41 ` Kai Makisara
2010-12-06 7:59 ` Kai Makisara
2010-12-06 8:50 ` FUJITA Tomonori
2010-12-06 9:36 ` Lukas Kolbe
2010-12-06 11:34 ` Bjørn Mork
2010-12-08 14:19 ` Lukas Kolbe
2010-12-03 12:27 ` FUJITA Tomonori
2010-12-03 14:59 ` Kai Mäkisara
2010-12-03 15:06 ` James Bottomley [this message]
2010-12-03 17:03 ` Lukas Kolbe
2010-12-03 18:10 ` James Bottomley
2010-12-05 10:53 ` Lukas Kolbe
2010-12-05 12:16 ` FUJITA Tomonori
2010-12-14 20:35 ` Vladislav Bolkhovitin
2010-12-14 22:23 ` Stephen Hemminger
2010-12-15 16:27 ` Vladislav Bolkhovitin
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=1291388776.2881.4.camel@mulgrave.site \
--to=james.bottomley@suse.de \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=kai.makisara@kolumbus.fi \
--cc=linux-scsi@vger.kernel.org \
--cc=lkolbe@techfak.uni-bielefeld.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox