[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 |
Hello,
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;
device_stat.read++;
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
weird:
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.
TIA
--
Saluti / Regards
Diego Roversi | diegor at maganet.net
| diegor at tiscalinet.it
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- how does gnumach/hurd cache data on disk?,
Diego Roversi <=