Aucbvax.3155
fa.unix-wizards
utzoo!decvax!ucbvax!unix-wizards
Tue Sep 15 15:18:28 1981
/bin/sort
>From chico!harpo!chico!eagle!jpl@Berkeley Tue Sep 15 15:13:03 1981
A letter from Peter Weinberger called my attention to the fact that a
sort misfeature which I thought had been corrected 2 years ago is still
alive and well and infecting Berkeley UNIX as well as Bell Labs variants.
This particular misfeature (there are many) will show up on any machine
for which sizeof(char *)/sizeof(char) != 2.  It does not prevent sort
from working, it merely causes it to underutilize the memory it allocates,
leading to more sort temporary files, leading to longer sort times.

The source of the problem is in the memory management initialization

  nlines = (a - L);
  nlines /= (5*(sizeof(char *)/sizeof(char)));
  ntext = nlines*8;

I assume (comments are rare in the source) that the intent is dedicate
1/5 of the memory which has just been allocated to pointers to records,
and the remaining 4/5 to the records themselves.  (The L is slop space
for the last record in a coreload -- more about it later.)  The effect
is to set nlines to the number of pointers which will fit in 1/5 of the
available space, but that funny magic number 8 is a throwback to the
days of 2-byte pointers.  It might better read,

  ntext = nlines * 4 * (sizeof(char *)/sizeof(char));

lest, on vaxen, half the record space will be unused.  If you run a big
sort on a vax and an 11, you can see that the sort temporaries on the
vax are only about 1/2 the size of those on the 11.  The ``good news''
is that the wasted space gives added protection against reading a big
record (>L bytes) when memory is nearly full and writing all over
critical memory, generally leading to a core dump.

While you're in there changing the sort, take the time to make blank()
a macro, like

#define blank(c) ((c==' ')||(c=='\t'))

On sorts with arguments (sort -t: +6 -7 /etc/passwd), up to 50% of
the cpu time can be gobbled up by the blank routine.

   May all your disorders be temporary.
   John P. Linderman  eagle!jpl

-----------------------------------------------------------------
gopher://quux.org/ conversion by John Goerzen <[email protected]>
of http://communication.ucsd.edu/A-News/


This Usenet Oldnews Archive
article may be copied and distributed freely, provided:

1. There is no money collected for the text(s) of the articles.

2. The following notice remains appended to each copy:

The Usenet Oldnews Archive: Compilation Copyright (C) 1981, 1996
Bruce Jones, Henry Spencer, David Wiseman.