Return to BSD News archive
Path: sserve!newshost.anu.edu.au!munnari.oz.au!bunyip.cc.uq.oz.au!harbinger.cc.monash.edu.au!yeshua.marcam.com!MathWorks.Com!europa.eng.gtefsd.com!howland.reston.ans.net!math.ohio-state.edu!jussieu.fr!univ-lyon1.fr!ensta!bsdtest.ensta.fr!bouyer
From: bouyer@bsdtest.ensta.fr (Manuel Bouyer)
Newsgroups: comp.os.386bsd.questions
Subject: Re: linux's I/O calls faster than NetBSD's ?
Date: 8 Mar 1994 20:24:07 GMT
Organization: Ecole Nationale Superieure de Techniques Avancees, Paris
Lines: 94
Distribution: world
Message-ID: <2limt7$16k@homea.ensta.fr>
References: <2lhv9r$pbt@homea.ensta.fr>
NNTP-Posting-Host: bsdtest.ensta.fr
In article <2lhv9r$pbt@homea.ensta.fr>, i wrote:
|> Hi,
|> We have made some comparaisons between NetBSD 0.9 and Linux, and it appears that
|> Linux's disk i/o calls are much faster in some case (time gives 4 seconds versus 4
|> minutes for a programs which make direct acces writing and reading on a file, on
|> exactly the same hardware).
|> It seems that Linux bufferize the file, as NetBSD always write it on the hard
|> disk.
|>
|> Am i wrong ? Is there any way to change this ?
|>
I should have post the program too. Here it is:
/* PROGRAMME STADIS7 */
/* test d'entrees/sorties ********************/
/* acces direct **********/
/* on force les acces directs physiques en adoptant
un grand fichier qu'on atteint aleatoirement
**************************/
/* ici on utilise un fichier 1001*1001 et on fait
2*5000 operations de lecture et ecriture ******/
#define NNT 5000
#define N1 1000
#define N2 1000
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main()
{
register int i, k1, k2;
int ic = 0, il;
int *pt1 = &ic, *pt2 = &il;
int ln, lm, lt, temps;
FILE *fopen(), *fichp;
temps = time(0);
printf("DEBUT\n");
if ( fichp = fopen("stad1", "w+b"));
else {
printf(" ERREUR D'OUVERTURE \n");
exit(0);
}
for (i = 1; i <= NNT; i++) {
k1 = rand() / (double)RAND_MAX * (N1+1) + 1;
k2 = rand() / (double)RAND_MAX * (N2+1) + 1;
ln = ((k1- 1) * (N2+1) + k2) * sizeof(int);
if (fseek(fichp, ln, 0)) {
printf(" ERREUR FSEEK \n");
exit(0);
}
*pt2 = i;
if (fwrite(pt2, sizeof(int), 1, fichp) - 1) {
printf(" ERREUR D'ECRITURE \n");
exit(0);
}
if (fseek(fichp, ln, 0)) {
printf(" ERREUR FSEEK \n");
exit(0);
}
if (feof(fichp)) {
printf(" FIN DE FICHIER DETECTEE .. NE PEUT LIRE\n");
exit(0);
}
if (fread(pt1, sizeof(int), 1, fichp) - 1) {
printf(" ERREUR DE LECTURE \n");
exit(0);
}
}
printf("%10ld\n", *pt1);
if (fclose(fichp)) {
printf(" ERREUR DE FERMETURE \n");
exit(0);
}
printf("C'EST TERMINE............\n");
printf(" TEMPS ECOULE EN SECONDES: %ld \n", time(0) - temps);
}
--
Manuel Bouyer, Ecole Nationale Superieure de Techniques Avancees, Paris
email: bouyer@ensta.fr
--