On 06/08/2013 09:53 AM, Steve Grubb wrote:
On Saturday, June 08, 2013 09:34:22 AM Steve Grubb wrote:
> Does opening with noatime really make a measurable difference (assuming it
> worked)? I suspect not since what we have now is 2 syscalls. It would
> probably be faster to load icons without trying to set NOATIME.
Answering my own question....
#include <stdio.h>
#define __USE_GNU
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
void noatime(void)
{
int fd = open("/usr/share/icons/hicolor/48x48/apps/firefox.png",
O_RDONLY|O_NOATIME);
if (fd>=0)
close(fd);
else {
fd = open("/usr/share/icons/hicolor/48x48/apps/firefox.png",
O_RDONLY);
if (fd>=0)
close(fd);
}
}
void atime(void)
{
int fd = open("/usr/share/icons/hicolor/48x48/apps/firefox.png",
O_RDONLY);
if (fd>=0)
close(fd);
}
int main(int argc, char *argv[])
{
int i, mode=0;
if (argc == 2 && strcmp("noatime", argv[1]) == 0)
mode = 1;
for (i=0; i<5000; i++) {
if (mode)
noatime();
else
atime();
}
return 0;
}
As a normal user:
$ time ./test noatime
real 0m12.645s
user 0m0.003s
sys 0m0.159s
$ time ./test atime
real 0m0.019s
user 0m0.002s
sys 0m0.016s
Way faster doing a normal open. As root:
Bad test. The first run took the hit for getting the file info into
page cache, after that, everything was run from cache and you got the
second result above and the results below. You have to make sure that
from run to run the cache state of the file in question is identical.
# time ./test noatime
real 0m0.019s
user 0m0.000s
sys 0m0.019s
# time ./test atime
real 0m0.019s
user 0m0.001s
sys 0m0.017s
No real difference between them.
-Steve