very weired random io behavior

From: Ming Zhang
Date: Fri Aug 26 2005 - 15:09:22 EST


I ran a small test program on a 400GB SATA disk connected to Marvel
chip. Using 2.6.11.12 kernel and get this strange behavior.


# iostat -k -p /dev/sdj
Linux 2.6.11.12 (bakstor2u.localdomain) 08/26/2005

avg-cpu: %user %nice %sys %iowait %idle
0.11 0.00 6.63 54.75 38.51

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdj 0.00 0.01 0.00 36 0

start with no io. run program with /dev/sdj and count 10240. i supposed
it should only write 40MB data and no read should be generated. but
result is quite weired. there are almost same amount of read and total
size is around 80MB.


# iostat -k -p /dev/sdj
Linux 2.6.11.12 (bakstor2u.localdomain) 08/26/2005

avg-cpu: %user %nice %sys %iowait %idle
0.11 0.00 6.48 55.65 37.77

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdj 4.26 11.31 11.47 80476 81640


pls cc to me.

Thanks!

Ming

---------------------------------------------------
#define _LARGEFILE64_SOURCE

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char *argv[])
{
int n;
int i, count;
char *name;
char buf[4096];
int fd;

if (argc != 3) {
printf("%s name count\n", argv[0]);
exit(1);
}
name = argv[1];
count = atoi(argv[2]);

fd = open(name, O_CREAT|O_WRONLY, S_IRWXU);
for (i = 0; i < count; i++) {
unsigned long x;

x = (rand() >> 1) << 1;
lseek64(fd, x, SEEK_SET);
write(fd, buf, 4096);
}
printf("done\n");
close(fd);
return 0;
}


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/