Bug 99168
Summary: | "highmemspeed" patch causes 60% slowdown for bounce buffer allocation | ||||||
---|---|---|---|---|---|---|---|
Product: | Red Hat Enterprise Linux 2.1 | Reporter: | Martin Wilck <martin.wilck> | ||||
Component: | kernel | Assignee: | Larry Woodman <lwoodman> | ||||
Status: | CLOSED CURRENTRELEASE | QA Contact: | Brian Brock <bbrock> | ||||
Severity: | medium | Docs Contact: | |||||
Priority: | medium | ||||||
Version: | 2.1 | CC: | riel | ||||
Target Milestone: | --- | ||||||
Target Release: | --- | ||||||
Hardware: | i386 | ||||||
OS: | Linux | ||||||
Whiteboard: | |||||||
Fixed In Version: | AS2.1-U7 kernel | Doc Type: | Bug Fix | ||||
Doc Text: | Story Points: | --- | |||||
Clone Of: | Environment: | ||||||
Last Closed: | 2005-09-30 19:00:54 UTC | Type: | --- | ||||
Regression: | --- | Mount Type: | --- | ||||
Documentation: | --- | CRM: | |||||
Verified Versions: | Category: | --- | |||||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
Cloudforms Team: | --- | Target Upstream Version: | |||||
Embargoed: | |||||||
Attachments: |
|
Description
Martin Wilck
2003-07-15 13:46:23 UTC
thank you for this excellent bugreport; I wish more bugreports were like this. Looking at the recent code it has a if (!iteration) wakeup_bdflush(0); where iteration starts at 0 and never gets 1 for the "first half" of the pool; this makes me wonder if this problem is still there for the recent kernels... Created attachment 92936 [details]
Patch that soves this performance issue
I made this patch as small as possible; in principle it simply adds a pair of
braces in both functions (and some whitespace).
I am not saying that I'd propose this patch as the final solution.
IMO alloc_bounce_page() and alloc_bounce_bh() need some general cleanup.
>this makes me wonder if this problem is still there for the recent kernels...
Yes - because (!iteration) is true in the first iteration. In our case there is
no real memory pressure, thus the pages are always allocated in the first
iteration.
Thus, every time alloc_bounce_...() is called and the emergency pool has more
than half of the entries free, wakeup_bdflush() is called once.
never mind my comment... the minimal fix should be if (iteration) wake_up(...) instead of !iteration I still like the braces better ... but that's up to you :-) Thank you for the quick response. Ooops - just found a typo in my original report.
>I have collected some statistics and found that in our case this happens ab
should read "... this happens about 40% of the time alloc_bounce_...() is called".
Any reason why this pretty obvious & easy-to-fix issue isn't fixed in 2.4.9-e.27? Just top follow up, the U3 kernel is due out shortly, if you want to grab a preview w/this fix, grab it from: http://people.redhat.com/~jbaron/.private/testing/2.4.9-e.27.28.test/ |