4 ms·
You can't specifically access the cached version, but the OS will (assuming the file isn't too large) remember the blocks read from disk in the cache for a whil
by dspillett 6y ago
You can't specifically access the cached version, but the OS will (assuming the file isn't too large) remember the blocks read from disk in the cache for a while (until the memory is needed by something else) so that next time the file is ready those blocks do not need to be read from disk. This can make a huge difference on traditional drives.
/dev/null is the abyss, but the cat command will read all the blocks comprising the file from the filesystem before sending them to that abyss.
You can see the effect like so:
dspillett@swann2:/tmp$ time cat a.bigish.file > /dev/null
real 0m3.830s
user 0m0.000s
sys 0m0.468s
dspillett@swann2:/tmp$ time cat a.bigish.file > /dev/null
real 0m0.165s
user 0m0.004s
sys 0m0.164s
dspillett@swann2:/tmp$ time cat a.bigish.file > /dev/null
real 0m0.148s
user 0m0.000s
sys 0m0.144s
(if "a.bigish.file" has only just been created, it will likely already be in RAM, run
sync; echo 3 > /proc/sys/vm/drop_caches
as root or other privileged user to clear the not-currently-active cache & buffers, or chose an older file) (note though that this clears all cache machine-wide, not just cached information from your current session)
- Foivos 6y agoThank you for the detailed explanation. So any interaction with the file would put it in memory will do. Of course assuming that you interact with the whole file. So if you have a big file and use "head", I guess it will not be enough. But you use "less" and scroll the whole thing you achieve the same result as in the command above right?
- dspillett 6y agoBasically, yes. There are some complications: * If the file is large then blocks at the start will be dropped from cache as you move further in, or will quickly be pushed out by IO activity elsewhere on your system. * Some commands open files with options that inhibit caching, so not everything will have this effect. > Of course assuming that you interact with the whole file. Reading some of the file will have the effect for that portion of the file, so if subsequent commands only touch the same parts then the effect is the same.
- Foivos 6y agoGreat explanation! Thank you!