[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

how does gnumach/hurd cache data on disk?

From: Diego Roversi
Subject: how does gnumach/hurd cache data on disk?
Date: Sat, 1 Dec 2001 10:52:55 +0100
User-agent: Mutt/1.2.5i


  I made some further investigation about the slow disk access under
gnumach/Hurd. I modified device.c in libstore, adding a printf line in
dev_read(), that I suppose is the place where disk access really happens:

static error_t
dev_read (struct store *store,
          store_offset_t addr, size_t index, mach_msg_type_number_t amount,
          void **buf, mach_msg_type_number_t *len)
  error_t ret=0;
  ret = dev_error (device_read (store->port, 0, addr, amount,
                                 (io_buf_ptr_t *)buf, len));
  printf("dev_read: index=%d amount=%d len=%d\n", addr, amount, *len);
  return ret; 

I started the new ext2fs translator on a partition, and I find the result

1) amount is always zero. Amount is supposed to be the amount of data to
read, passed to the system call device_read. What does it mean a request of
0 byte to read?
2) len is the number of byte readed by gnumach. This value often is 4096,
but sometimes 1024 or 2048. Why does it change? I suspect that the amount of
data to read is passed to device_read in a way that I don't understand.

I also found that data is preserved in memory (cached), but is discarded in
randomly. For example if I repeat the following command at interval of few
second: cat hurd-????_orig.tar.gz >/dev/null, the I see that the first time
the file is readed from disk, then for 3 or 4 times there is not readed from
disk, and then is readed (probably completly) from disk. Of course I'm
pleanty of free RAM. Bigger file (16Mb) is always reread from disk.

I hope that some gnumach/hurd expert can explain this strange behaviour.


Saluti / Regards

Diego Roversi | diegor at maganet.net
              | diegor at tiscalinet.it 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]