From: "Kai Mäkisara" <kai.makisara@kolumbus.fi>
To: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: 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 16:59:29 +0200 [thread overview]
Message-ID: <4CF905D1.6050903@kolumbus.fi> (raw)
In-Reply-To: <20101203212453W.fujita.tomonori@lab.ntt.co.jp>
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.
Thanks,
Kai
next prev parent reply other threads:[~2010-12-03 14:59 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 [this message]
2010-12-03 15:06 ` James Bottomley
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=4CF905D1.6050903@kolumbus.fi \
--to=kai.makisara@kolumbus.fi \
--cc=fujita.tomonori@lab.ntt.co.jp \
--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 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.