<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Niklas,<div class=""><br class=""></div><div class="">Out of interest have you tried testing performance with&nbsp;performance.stat-prefetch enabled?</div><div class=""><div class="">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class="">--<br class="">Sam McLeod&nbsp;<br class="">@s_mcleod<br class=""><a href="https://smcleod.net" class="">https://smcleod.net</a></div></div>

</div>

<div><br class=""><blockquote type="cite" class=""><div class="">On 14 Sep 2017, at 10:42 pm, Niklas Hambüchen &lt;<a href="mailto:mail@nh2.me" class="">mail@nh2.me</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hi,<br class=""><br class="">I have a gluster 3.10 volume with a dir with ~1 million small files in<br class="">them, say mounted at /mnt/dir with FUSE, and I'm observing something weird:<br class=""><br class="">When I list and stat them all using rsync, then the lstat() calls that<br class="">rsync does are incredibly fast (23 microseconds per call on average,<br class="">definitely faster than a network roundtrip between my 3-machine bricks<br class="">connected via Ethernet).<br class="">But when I try to back them up with the `bup` tool<br class="">(<a href="https://github.com/bup/bup" class="">https://github.com/bup/bup</a>), which (at least according to strace) does<br class="">the same syscalls as rsync to stat all files, it takes 1700 microseconds<br class="">per lstat() call, and the total time to go over all files is 50x higher.<br class=""><br class="">These are my strace statistics:<br class=""><br class="">rsync strace:<br class=""><br class=""> &nbsp;$ strace -f -w -c rsync -a --dry-run /mnt/dir /tmp/nonexisting<br class=""><br class=""> &nbsp;% time &nbsp;&nbsp;&nbsp;&nbsp;seconds &nbsp;usecs/call &nbsp;&nbsp;&nbsp;&nbsp;calls &nbsp;&nbsp;&nbsp;errors syscall<br class=""> &nbsp;------ ----------- ----------- --------- --------- ----------------<br class=""> &nbsp;&nbsp;52.35 &nbsp;&nbsp;69.682773 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26617 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2618 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 select<br class=""> &nbsp;&nbsp;39.60 &nbsp;&nbsp;52.712292 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1056 &nbsp;&nbsp;&nbsp;&nbsp;49907 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getdents<br class=""> &nbsp;&nbsp;&nbsp;8.00 &nbsp;&nbsp;10.655949 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11 &nbsp;&nbsp;&nbsp;998102 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lstat<br class=""> &nbsp;&nbsp;&nbsp;0.02 &nbsp;&nbsp;&nbsp;0.022890 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1900 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read<br class=""> &nbsp;&nbsp;&nbsp;0.01 &nbsp;&nbsp;&nbsp;0.017219 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;829 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write<br class=""> &nbsp;&nbsp;&nbsp;0.01 &nbsp;&nbsp;&nbsp;0.012093 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;868 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;munmap<br class=""> &nbsp;&nbsp;&nbsp;0.01 &nbsp;&nbsp;&nbsp;0.006656 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;606 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mmap<br class=""> &nbsp;&nbsp;&nbsp;0.00 &nbsp;&nbsp;&nbsp;0.004168 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1389 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readlink<br class=""> &nbsp;&nbsp;&nbsp;0.00 &nbsp;&nbsp;&nbsp;0.001796 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1796 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chdir<br class=""> &nbsp;&nbsp;&nbsp;0.00 &nbsp;&nbsp;&nbsp;0.001019 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;510 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clone<br class=""> &nbsp;&nbsp;&nbsp;0.00 &nbsp;&nbsp;&nbsp;0.000841 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13 open<br class=""><br class="">Took ~50 seconds real time to complete.<br class=""><br class="">bup strace (I interrupted it after a while):<br class=""><br class=""> &nbsp;strace: Process 10749 attached<br class=""> &nbsp;strace: Process 10750 attached<br class=""> &nbsp;Indexing: 25600 (566 paths/s)<br class=""> &nbsp;^C<br class=""> &nbsp;% time &nbsp;&nbsp;&nbsp;&nbsp;seconds &nbsp;usecs/call &nbsp;&nbsp;&nbsp;&nbsp;calls &nbsp;&nbsp;&nbsp;errors syscall<br class=""> &nbsp;------ ----------- ----------- --------- --------- ----------------<br class=""> &nbsp;&nbsp;89.55 1140.837325 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1700 &nbsp;&nbsp;&nbsp;671016 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lstat<br class=""> &nbsp;&nbsp;&nbsp;3.92 &nbsp;&nbsp;49.875376 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;934 &nbsp;&nbsp;&nbsp;&nbsp;53387 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getdents<br class=""> &nbsp;&nbsp;&nbsp;3.58 &nbsp;&nbsp;45.655985 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;52238 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;874 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read<br class=""> &nbsp;&nbsp;&nbsp;2.14 &nbsp;&nbsp;27.293944 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;789 &nbsp;&nbsp;&nbsp;&nbsp;34588 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5799 open<br class=""> &nbsp;&nbsp;&nbsp;0.57 &nbsp;&nbsp;&nbsp;7.266342 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;141 &nbsp;&nbsp;&nbsp;&nbsp;51384 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llistxattr<br class=""> &nbsp;&nbsp;&nbsp;0.09 &nbsp;&nbsp;&nbsp;1.090689 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;42 &nbsp;&nbsp;&nbsp;&nbsp;25692 &nbsp;&nbsp;&nbsp;&nbsp;25692 getxattr<br class=""> &nbsp;&nbsp;&nbsp;0.06 &nbsp;&nbsp;&nbsp;0.780977 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26 &nbsp;&nbsp;&nbsp;&nbsp;29825 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1019 close<br class=""> &nbsp;&nbsp;&nbsp;0.05 &nbsp;&nbsp;&nbsp;0.601806 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23 &nbsp;&nbsp;&nbsp;&nbsp;25739 &nbsp;&nbsp;&nbsp;&nbsp;25722 ioctl<br class=""> &nbsp;&nbsp;&nbsp;0.03 &nbsp;&nbsp;&nbsp;0.373894 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1851 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;202 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select<br class=""> &nbsp;&nbsp;&nbsp;0.00 &nbsp;&nbsp;&nbsp;0.055953 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3879 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;brk<br class=""><br class=""> &nbsp;real &nbsp;&nbsp;&nbsp;20m52.150s<br class=""> &nbsp;user &nbsp;&nbsp;&nbsp;0m2.608s<br class=""> &nbsp;sys &nbsp;&nbsp;&nbsp;&nbsp;0m11.456s<br class=""><br class="">Note I passed `-c -w` to strace to measure wall time of the syscalls<br class="">spend, not system CPU time.<br class=""><br class="">Using<br class=""><br class=""> &nbsp;time strace -f -c -w ls -lU /mnt/dir &gt; /dev/null<br class=""><br class="">shows that ls is as fast as rsync (also in 50 seconds).<br class=""><br class="">(Aside: I've filed the large number of getdents() as<br class=""><a href="https://bugzilla.redhat.com/show_bug.cgi?id=1478411" class="">https://bugzilla.redhat.com/show_bug.cgi?id=1478411</a> but that's not the<br class="">core question of this email.)<br class=""><br class="">My volume info:<br class=""><br class=""> &nbsp;&nbsp;&nbsp;# gluster vol info<br class=""><br class=""> &nbsp;&nbsp;&nbsp;Volume Name: myvol<br class=""> &nbsp;&nbsp;&nbsp;Type: Replicate<br class=""> &nbsp;&nbsp;&nbsp;Volume ID: ...<br class=""> &nbsp;&nbsp;&nbsp;Status: Started<br class=""> &nbsp;&nbsp;&nbsp;Snapshot Count: 0<br class=""> &nbsp;&nbsp;&nbsp;Number of Bricks: 1 x 3 = 3<br class=""> &nbsp;&nbsp;&nbsp;Transport-type: tcp<br class=""> &nbsp;&nbsp;&nbsp;Bricks:<br class=""> &nbsp;&nbsp;&nbsp;Brick1: 10.0.0.1:/data/glusterfs/brick<br class=""> &nbsp;&nbsp;&nbsp;Brick2: 10.0.0.2:/data/glusterfs/brick<br class=""> &nbsp;&nbsp;&nbsp;Brick3: 10.0.0.3:/data/glusterfs/brick<br class=""> &nbsp;&nbsp;&nbsp;Options Reconfigured:<br class=""> &nbsp;&nbsp;&nbsp;changelog.capture-del-path: on<br class=""> &nbsp;&nbsp;&nbsp;changelog.changelog: on<br class=""> &nbsp;&nbsp;&nbsp;storage.build-pgfid: on<br class=""> &nbsp;&nbsp;&nbsp;nfs.disable: on<br class=""> &nbsp;&nbsp;&nbsp;transport.address-family: inet<br class=""> &nbsp;&nbsp;&nbsp;client.ssl: on<br class=""> &nbsp;&nbsp;&nbsp;server.ssl: on<br class=""> &nbsp;&nbsp;&nbsp;storage.linux-aio: on<br class=""> &nbsp;&nbsp;&nbsp;<a href="http://performance.io" class="">performance.io</a>-thread-count: 64<br class=""> &nbsp;&nbsp;&nbsp;performance.readdir-ahead: on<br class=""> &nbsp;&nbsp;&nbsp;server.event-threads: 32<br class=""> &nbsp;&nbsp;&nbsp;client.event-threads: 32<br class=""> &nbsp;&nbsp;&nbsp;server.outstanding-rpc-limit: 64<br class=""> &nbsp;&nbsp;&nbsp;cluster.lookup-unhashed: auto<br class=""> &nbsp;&nbsp;&nbsp;performance.flush-behind: on<br class=""> &nbsp;&nbsp;&nbsp;performance.strict-write-ordering: off<br class=""> &nbsp;&nbsp;&nbsp;performance.high-prio-threads: 64<br class=""> &nbsp;&nbsp;&nbsp;performance.normal-prio-threads: 64<br class=""> &nbsp;&nbsp;&nbsp;performance.low-prio-threads: 64<br class=""> &nbsp;&nbsp;&nbsp;performance.write-behind-window-size: 10MB<br class=""> &nbsp;&nbsp;&nbsp;cluster.ensure-durability: on<br class=""> &nbsp;&nbsp;&nbsp;performance.lazy-open: yes<br class=""> &nbsp;&nbsp;&nbsp;cluster.use-compound-fops: off<br class=""> &nbsp;&nbsp;&nbsp;performance.open-behind: on<br class=""> &nbsp;&nbsp;&nbsp;features.cache-invalidation: off<br class=""> &nbsp;&nbsp;&nbsp;performance.quick-read: off<br class=""> &nbsp;&nbsp;&nbsp;performance.read-ahead: off<br class=""> &nbsp;&nbsp;&nbsp;performance.stat-prefetch: off<br class=""> &nbsp;&nbsp;&nbsp;changelog.rollover-time: 1<br class=""> &nbsp;&nbsp;&nbsp;cluster.self-heal-daemon: enable<br class=""><br class="">Questions:<br class=""><br class="">What could explain why bup's lstat()s are slow and rsync's lstat()s are<br class="">fast?<br class=""><br class="">Also, how comes rsync's lstat()s can be faster than a network roundtrip<br class="">at all, given that I have all caching disabled (e.g. stat-prefetch: off,<br class="">cache-invalidation: off)?<br class=""><br class="">Is there some caching going on? Might bup issue its syscalls in an order<br class="">that might destroy this caching, while rsync and ls use a favourable order?<br class=""><br class="">Thanks!<br class="">_______________________________________________<br class="">Gluster-users mailing list<br class=""><a href="mailto:Gluster-users@gluster.org" class="">Gluster-users@gluster.org</a><br class="">http://lists.gluster.org/mailman/listinfo/gluster-users<br class=""></div></div></blockquote></div><br class=""></div></body></html>