[comp.os.minix] Speed of execution related to chmem value !?!

nick@nswitgould.OZ (Nick Andrew) (03/25/88)

	I'm very puzzled by the behavior of the Minix Fix program. When run
with a stack+malloc size of 3000 bytes, Fix runs extremely slowly. When run
with an additional 3000 bytes to play around with, Fix runs TEN times as
fast. [ Background: Minix 1.2, using 1.2 lib & 1.1 compiler ]

	These are the figures:

Old file length 17184 characters (actually the V7 compatible Ar)
Diff file length 2055 chars
Output (stdout) 17640 chars

Fix with chmem =3000

Real	1:03.0
User	   7.2
Sys	  53.4		(wow!)

Fix with chmem =6000

Real	   7.0
User	   2.5
Sys	   2.4

	That's quite a large improvement. I thought maybe the
#define copy(s) printf("%s",s)

	statement was slight overkill so I changed it to an fputs(). That made
an improvement in the execution times of both of the above, respectively

Fix with chmem =3000 and fputs

Real	  59.0
User	   6.8
Sys	  51.1		(not much of an improvement)

Fix with chmem =6000 and fputs

Real	   4.0		(40% improvement)
User	   2.0
Sys	   0.3		(85% improvement)

	It seems that either streams, or standard output buffering is having
this marked effect on the speed of the system. Fix does not call malloc etc.

Can somebody with a good knowledge of the internals shed some light on this?

	... I know a certain amount of buffering helps performance, but this
is incredible ...

	Nick.

egisin@watmath.waterloo.edu (Eric Gisin) (03/29/88)

In article <7616@nswitgould.OZ>, nick@nswitgould.OZ (Nick Andrew) writes:
> 
> 	I'm very puzzled by the behavior of the Minix Fix program. When run
> with a stack+malloc size of 3000 bytes, Fix runs extremely slowly. When run
> with an additional 3000 bytes to play around with, Fix runs TEN times as
> fast. [ Background: Minix 1.2, using 1.2 lib & 1.1 compiler ]
> 
This was a common problem with large programs on V7 too.

The program fopen's a file.
Fopen cannot malloc a buffer because it cannot expand the data segment.
So fopen leaves the file unbuffered, and everything gets read/written
one byte at a time. That's why you see the high system time.