Re: return to the begin of InputStream
On Wed, 9 Dec 2009, Eric Sosman wrote:
On 12/9/2009 4:13 PM, Tom Anderson wrote:
On Wed, 9 Dec 2009, Eric Sosman wrote:
On 12/9/2009 10:49 AM, Tom Anderson wrote:
On Sat, 5 Dec 2009, Eric Sosman wrote:
(Marginally topical) [...]
(The topicality margin gets even thinner) [...]
[...]
As for file modification times, I confess an incomplete grasp of
exactly which operations do and do not update them. However, just
poking a new value into a page that's mmap'ed from a file is not
enough to update the time stamp. Can you imagine the overhead if every
memory write trapped to the kernel to update the time?
Right, but the kernel could update the mtime when it flushed pages to
disk. The timestamp would reflect the time of the flush, not the write
to the page, but that's how it is with buffered stream IO too. Or am i
misunderstanding again, and there was no writing to disk happening?
(Topicality margin now thin enough to use in a microtome)
I disagree! This group is about being a java programmer. Java programmers
do things like work with mmapped working files used by long-lived
processes, and as such, this is relevant to them, by whom i mean us.
No disk writes. The tmpfs file system on Solaris tries to
stay memory-resident as much as possible, and only goes to the
swap area(s) if RAM becomes awfully scarce.
Ah, yes, that sort of changes the semantics. On a disk-resident FS,
changing the contents of an mmapped file doesn't change the bytes on disk
immediately; they will usually be written some time after the instructions
doing the write are finished. Is the point that in Solaris tmpfs, the same
pages are used for the mmap buffer and the definitive contents of the
file? In that case, there is no flushing to disk, and so no chance to
update a timestamp.
Now, i have been assuming that writing to a mapped file which *does* live
on disk affects the timestamp. Here is a test:
http://urchin.earth.li/~twic/Code/MMapTest.java
And here are the results on a machine which identifies itself as "Linux
localhost 2.6.18-92.1.6.el5PAE #1 SMP Wed Jun 25 14:21:46 EDT 2008 i686
i686 i386 GNU/Linux":
t0 = 1260468714000
t1 = 1260468714000
t2 = 1260468714000
t3 = 1260468714000
file = Mapd file
In other words, writing to a mmapped file doesn't change the mtime. Yikes!
tom
--
POTATO POWER IS UNTRACEABLE POWER