mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alex Riesen <Alexander.Riesen@synopsys.com>
To: Manfred Spraul <manfred@colorfullife.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] pipe bugfix /cleanup
Date: Fri, 4 Oct 2002 09:40:08 +0200	[thread overview]
Message-ID: <20021004074008.GB941@riesen-pc.gr05.synopsys.com> (raw)
In-Reply-To: <Pine.LNX.4.44.0210031514230.19230-100000@dbl.q-ag.de>

On Thu, Oct 03, 2002 at 03:27:49PM +0200, Manfred Spraul wrote:
> Hi Linus,
> 
> pipe_write contains a wakeup storm, 2 writers that write into the same 
> fifo can wake each other up, and spend 100% cpu time with wakeup/schedule, 
> without making any progress.
> 
> The patch below was part of -dj, and IIRC even of -ac, for a few months, 
> but it's more a rewrite of pipe_read and _write.
> 
> Could you merge it, or do you want a minimal fix?
> 
> The only regression I'm aware of is that
> 
>   $ dd if=/dev/zero | grep not_there

This makes 2.4.19 + Con Kolivas patch behave very bad.
The system goes slow, freeze, than wakes up, freeze again, etc.

I did "cat /dev/zero | grep nothing".

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 0  0  0 124592 292056  60624  70488   0   1    27    19    7     2   5   1   2
 0  0  0 124592 292048  60632  70488   0   0     0    12  132   141   0   0 100
 0  0  0 124588 292048  60632  70488   0   0     0     0  126   109   0   0 100
 0  0  0 124588 292048  60632  70488   0   0     0     0  126   108   0   0 100
 0  0  0 124588 292048  60632  70488   0   0     0     0  127   102   0   0 100
 0  0  0 124588 292048  60632  70488   0   0     0     0  130   122   1   0  99
 0  0  0 124568 292004  60632  70488  28   0    28     0  151  1836   5   1  94
 1  0  0 124552 292004  60632  70488   0   0     0     0  150   530   6   1  93
 0  0  0 124552 292004  60632  70488   0   0     0     0  130   496   4   1  95
 0  0  0 124552 292004  60632  70488   0   0     0     0  138  1935   4   3  93
 0  0  0 124528 290956  60632  70488   0   0     0     0  250  3075  17   2  81
 0  0  0 124528 290948  60640  70488   0   0     0    44  143   197   0   0 100
 0  0  0 124516 290948  60640  70488   0   0     0     0  134   170   0   0 100
 1  0  0 124516 290952  60644  70488   0   0     4     0  143   186   0   1  99
 1  0  0 124516 290944  60644  70488   0   0     0     0  126   104   0   0 100
 2  0  0 124516 208760  60644  70488   4   0     4     0  136 37577  39  45  17
 2  0  0 124516 126544  60652  70488   0   0     0    12  123 16596  72  28   0
 2  0  1 253164   4832  54036  70120  16 660    16   660  148 69994   0 100   0
 1  1  2 439472   3264  53880  70120   0 20704     0 20696  398   978   0  28  72
 0  1  1 438920   3656  53088  70120   0 19496     0 19496  450   722   0   5  95
 0  1  1 438596   3716  53024  70120   0 19944     0 19944  442   134   0   7  93
 0  1  2 438364   3712  53004  70132   0 19944    20 19944  507   252   0   5  95
 1  1  3 438104   3784  52932  70132   0 19804     0 19804  442   171   0   1  99
 0  2  1 437884   3804  52892  70132   8 17956     8 17956  452   219   0   5  95
 0  2  1 437660   3736  52860  70132 100 18124   100 18124  435   205   0   1  99
 0  2  1 437440   3168  52796  70132   4 20392     4 20392  493   542   0   5  95
 0  2  2 437328   3144  52760  70168   0 19976     0 20180  602   341   1   1  98
10  0  6 143432 294816  52384  70168   8 128296     8 128436 2961   502   0   5  95
 1  0  0 133448 307256  52320  70168 352   0   356    44  225   330   0   1  99
 1  0  0 133372 307256  52320  70168   0   0     0     0  130   109   0   0 100
 1  0  0 133296 307240  52336  70168   0   0     0    56  123   101   0   0 100
 1  0  0 133244 307240  52336  70168   0   0     0     0  119    96   0   0 100
 2  0  0 132952 307240  52336  70168   0   0     0     0  124   309   1   1  98


> will fail due to OOM, because grep does something like
> 
> 	for(;;) {
> 		rlen = read(fd, buf, len);
> 		if (rlen == len) {
> 			len *= 2;
> 			buf = realloc(buf, len);
> 		}
> 	}
> 
> if it operates on pipes, and due to the improved syscall merging, read 
> will always return the maximum possible amount of data. But that's a grep 
> bug, not a kernel problem.
> 
> The diff is older, but applies to 2.5.40 without offsets.

doesn't apply to 2.4.19

-alex

  reply	other threads:[~2002-10-04  7:34 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-03 13:27 Manfred Spraul
2002-10-04  7:40 ` Alex Riesen [this message]
2002-10-04 13:46   ` Manfred Spraul

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=20021004074008.GB941@riesen-pc.gr05.synopsys.com \
    --to=alexander.riesen@synopsys.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=manfred@colorfullife.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®