[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: overly aggressive memory usage by sort.c
From: |
Paul Eggert |
Subject: |
Re: overly aggressive memory usage by sort.c |
Date: |
Mon, 11 Jun 2012 03:58:45 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 |
On 06/11/2012 03:02 AM, Paul Eggert wrote:
> * src/sort.c (default_sort_size): Do not exceed 3/4 of total memory
Come to think of it, that patch is too conservative, as it
limits things to at most 3/8 of total memory. The 3/4 limit
should be applied after 'size' is halved, not before. Here's
a better patch:
>From dcfc5f8e6373dc7afe8e75c837dd81bbf724bb55 Mon Sep 17 00:00:00 2001
From: Paul Eggert <address@hidden>
Date: Mon, 11 Jun 2012 02:47:05 -0700
Subject: [PATCH] sort: by default, do not exceed 3/4 of physical memory
* src/sort.c (default_sort_size): Do not exceed 3/4 of total memory.
See Jeff Janes's bug report in
<http://lists.gnu.org/archive/html/coreutils/2012-06/msg00018.html>.
---
src/sort.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/sort.c b/src/sort.c
index 2593a2a..f21e092 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -1412,9 +1412,10 @@ default_sort_size (void)
double mem = MAX (avail, total / 8);
struct rlimit rlimit;
- /* Let SIZE be MEM, but no more than the maximum object size or
- system resource limits. Don't bother to check for values like
- RLIM_INFINITY since in practice they are not much less than SIZE_MAX. */
+ /* Let SIZE be MEM, but no more than the maximum object size,
+ total memory, or system resource limits. Don't bother to check
+ for values like RLIM_INFINITY since in practice they are not much
+ less than SIZE_MAX. */
size_t size = SIZE_MAX;
if (getrlimit (RLIMIT_DATA, &rlimit) == 0 && rlimit.rlim_cur < size)
size = rlimit.rlim_cur;
@@ -1434,6 +1435,10 @@ default_sort_size (void)
size = rlimit.rlim_cur / 16 * 15;
#endif
+ /* Similarly, leave a 1/4 margin for physical memory. */
+ if (total * 0.75 < size)
+ size = total * 0.75;
+
/* Return the minimum of MEM and SIZE, but no less than
MIN_SORT_SIZE. Avoid the MIN macro here, as it is not quite
right when only one argument is floating point. */
--
1.7.6.5
- overly aggressive memory usage by sort.c, Jeff Janes, 2012/06/07
- Re: overly aggressive memory usage by sort.c, Pádraig Brady, 2012/06/07
- Re: overly aggressive memory usage by sort.c, Jim Meyering, 2012/06/11
- Re: overly aggressive memory usage by sort.c, Paul Eggert, 2012/06/11
- Re: overly aggressive memory usage by sort.c,
Paul Eggert <=
- RE: overly aggressive memory usage by sort.c, Voelker, Bernhard, 2012/06/11
- Re: overly aggressive memory usage by sort.c, Paul Eggert, 2012/06/11
- [PATCH] maint: cleanup size determination in sort [was: overly aggressive memory usage by sort.c], Bernhard Voelker, 2012/06/14
- Re: [PATCH] maint: cleanup size determination in sort [was: overly aggressive memory usage by sort.c], Jim Meyering, 2012/06/20
- Re: [PATCH] maint: cleanup size determination in sort [was: overly aggressive memory usage by sort.c], Jeff Janes, 2012/06/20
- Re: [PATCH] maint: cleanup size determination in sort [was: overly aggressive memory usage by sort.c], Jim Meyering, 2012/06/20
- Re: [PATCH] maint: cleanup size determination in sort [was: overly aggressive memory usage by sort.c], Paul Eggert, 2012/06/20
- Re: overly aggressive memory usage by sort.c, Jeff Janes, 2012/06/12