On Sat, May 26, 2012 at 10:59:06PM -0400, Joey Hess wrote: > Adam Borowski wrote: > > I think that box had jfs, but other filesystems are no different: for > > example, ext* will fsync() during a rename() call behind your back even if > > you don't request it, forcing every file to hit the disk platters even > > though they'll immediately get changed again. For files outside /tmp/ that > > makes sense: the system has to guarantee you won't lose data during a crash. > > But why should I care about not losing temp files? > > In practice, it's rare for anything that uses libc's interfaces to /tmp > (or TMPDIR directly) to rename files in /tmp. Files in /tmp are opened, > unlinked, written, read, and closed. Renaming files in /tmp is thus not > likely to be a major source of system load. My charge of premature > optimisation stands.
Ok, so let's benchmark typical workloads on /tmp, ie: for (1..$n) { open F, ">", $_; syswrite F, $data; close F; } for (1..$n) { open F, "<", $_; sysread F, $dummy, $len; close F; unlink $_; } (Best of three runs:) 5000 byte files: tmpfs btrfs jfs ext4 real 0m1.430s 0m20.421s 1m35.687s 0m14.498s user 0m0.416s 0m0.576s 0m0.772s 0m0.604s sys 0m0.928s 0m7.528s 0m4.812s 0m0.604s 5000000 byte files: tmpfs btrfs jfs ext4 real 0m0.548s 0m5.062s 0m5.246s 0m5.351s user 0m0.004s 0m0.008s 0m0.008s 0m0.004s sys 0m0.540s 0m0.640s 0m0.612s 0m0.696s This is without even hitting the disk, ie, strictly in-memory, nullifying the biggest advantage of tmpfs. It still acts over an order of magnitude faster. If any operation would trigger a fsync(), tmpfs gains additional three orders of magnitude of an edge¹. [1]. Ok, somewhat less with jfs, but that's because instead of 6.6 times slower than ext4, with fsync() it suddenly became consistently 3.4 times faster. That's the perils of relative comparisons, but hey, it doesn't matter that much if tmpfs is 1000 or 10000 faster :p -- I was born an ugly, dumb and work-loving child, then an evil midwife replaced me in the crib.
signature.asc
Description: Digital signature