From: James Chapman <jchapman@katalix.com>
To: Mark Lord <liml@rtr.ca>, Fajun Chen <fajunchen@gmail.com>
Cc: "linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>,
linux-scsi@vger.kernel.org, Tejun Heo <htejun@gmail.com>
Subject: Re: Process Scheduling Issue using sg/libata
Date: Mon, 19 Nov 2007 16:40:15 +0000 [thread overview]
Message-ID: <4741BC6F.3010100@katalix.com> (raw)
In-Reply-To: <4740C59F.50709@rtr.ca>
Mark Lord wrote:
> Fajun Chen wrote:
>>
>> As a matter of fact, I'm using /dev/sg*. Due to the size of my test
>> application, I have not be able to compress it into a small and
>> publishable form. However, this issue can be easily reproduced on my
>> ARM XScale target using sg3_util code as follows:
>> 1. Run printtime.c attached, which prints message to console in a loop.
>> 2. Run sgm_dd (part of sg3_util package, source code attached) on the
>> same system as follows:
>>> sgm_dd if=/dev/sg0 of=/dev/null count=10M bpt=1
>> The print task can be delayed for as many as 25 seconds. Surprisingly,
>> I can't reproduce the problem in an i386 test system with a more
>> powerful processor.
>>
>> Some clarification to MAP_ANONYMOUS option in mmap(). After fixing a
>> bug and more testing, this option seems to make no difference to cpu
>> load. Sorry about previous report. Back to the drawing board now :-)
> ..
>
> Okay, I don't see anything unusual here. The code is on a slow CPU,
> and is triggering 10MBytes of PIO over a (probably) slow bus to an ATA
> device.
>
> This *will* tie up the CPU at 100% for the duration of the I/O,
> because the I/O happens in interrupt handlers, which are outside
> of the realm of the CPU scheduler.
>
> This is a known shortcoming of Linux for real-time uses.
>
> When the I/O uses DMA transfers, it *may* still have a similar effect,
> depending upon the caching in the ATA device, and on how the DMA shares
> the memory bus with the CPU.
>
> Again, no surprise here.
>
> One way to deal with it in an embedded device, is to force the
> application that's generating the I/O to self-throttle.
> Or modify the device driver to self-throttle.
Does disk access have to be so interrupt driven? Could disk interrupt
handling be done in a softirq/kthread like the networking guys deal with
network device interrupts? This would prevent the system from
live-locking when it is being bombarded with disk IO events. It doesn't
seem right that the disk IO subsystem can cause interrupt live-lock on
relatively slow CPUs...
> You may want to find an embedded Linux consultant to help out
> with this situation if it's beyond your expertise.
Check out the rtlinux patch, which pushes all interrupt handling out to
per-cpu kernel threads (irqd). The kernel scheduler then regains control
of what runs when.
Another option is to change your ATA driver to do interrupt processing
at task level using a workqueue or similar.
--
James Chapman
Katalix Systems Ltd
http://www.katalix.com
Catalysts for your Embedded Linux software development
next prev parent reply other threads:[~2007-11-19 16:40 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-17 0:49 Process Scheduling Issue using sg/libata Fajun Chen
2007-11-17 3:02 ` Tejun Heo
2007-11-17 6:14 ` Fajun Chen
2007-11-17 17:13 ` James Chapman
2007-11-17 19:37 ` Fajun Chen
2007-11-17 4:30 ` Mark Lord
2007-11-17 7:20 ` Fajun Chen
2007-11-17 16:25 ` Mark Lord
2007-11-17 19:20 ` Fajun Chen
2007-11-17 19:55 ` Mark Lord
2007-11-18 6:48 ` Fajun Chen
2007-11-18 14:32 ` Mark Lord
2007-11-18 19:14 ` Fajun Chen
2007-11-18 19:54 ` Mark Lord
2007-11-18 22:29 ` Fajun Chen
2007-11-18 23:07 ` Mark Lord
2007-11-19 16:40 ` James Chapman [this message]
2007-11-19 16:51 ` Tejun Heo
2007-11-19 17:17 ` Alan Cox
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=4741BC6F.3010100@katalix.com \
--to=jchapman@katalix.com \
--cc=fajunchen@gmail.com \
--cc=htejun@gmail.com \
--cc=liml@rtr.ca \
--cc=linux-ide@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).