Low zfs prefetch hits - why?
Artemiev Igor
ai at kliksys.ru
Thu Nov 5 06:25:38 UTC 2009
#sysctl vfs.zfs.zfetch
vfs.zfs.zfetch.array_rd_sz: 524288
vfs.zfs.zfetch.block_cap: 8
vfs.zfs.zfetch.min_sec_reap: 2
vfs.zfs.zfetch.max_streams: 8
Trying to sequential read 1G file by 128K chunks.
#./arcstat.pl -f Time,pmis,pm%
Time pmis pm%
05:48:40 749 100
05:48:41 1K 100
05:48:42 1K 100
05:48:43 1K 100
05:48:44 1K 100
05:48:45 1K 100
05:48:46 1K 100
05:48:47 257 99
I thought, blocks didn`t prefetching and wrote small dtrace script:
#!/usr/sbin/dtrace -qs
fbt:zfs:dmu_zfetch:entry
{
printf("dmu_zfetch: offset=%ld size=%ld prefetched=%ld\n", arg1, arg2, arg3);
}
fbt:zfs:dbuf_prefetch:entry
{
printf(" zfetching block %d\n", arg1);
}
Here output:
dmu_zfetch: offset=325058560 size=131072 prefetched=32
dmu_zfetch: offset=325189632 size=131072 prefetched=32
dmu_zfetch: offset=325320704 size=131072 prefetched=32
dmu_zfetch: offset=325451776 size=131072 prefetched=32
dmu_zfetch: offset=325582848 size=131072 prefetched=32
dmu_zfetch: offset=326369280 size=131072 prefetched=32
dmu_zfetch: offset=326500352 size=131072 prefetched=32
dmu_zfetch: offset=326631424 size=131072 prefetched=32
dmu_zfetch: offset=326762496 size=131072 prefetched=32
dmu_zfetch: offset=326893568 size=131072 prefetched=32
dmu_zfetch: offset=327024640 size=131072 prefetched=32
zfetching block 2503
zfetching block 2504
zfetching block 2505
zfetching block 2506
zfetching block 2507
zfetching block 2508
zfetching block 2509
zfetching block 2510
dmu_zfetch: offset=327155712 size=131072 prefetched=32
dmu_zfetch: offset=327286784 size=131072 prefetched=32
dmu_zfetch: offset=327417856 size=131072 prefetched=32
dmu_zfetch: offset=327548928 size=131072 prefetched=32
dmu_zfetch: offset=327680000 size=131072 prefetched=32
Why this happening? Statistic is unrelevant?
With sendfile(2) prefetching completely didn`t work - no forward read ahead.
More information about the freebsd-fs
mailing list