Hi,
Here’s the updated summary report(cold cache, fragmented index), now including results for the streaming I/O + io_uring configuration.

Thank you for the additional tests. I can see the image on Gmail, but I cannot on pgsql-hackers archive [0], so it might be a good idea to attach it and not to paste it on the body.
I saw the patch and have a few minor comments.
+ p.current_blocknum = 1;
To improve readability, how about using the following, which is consistent with nbtree.c [1]?
p.current_blocknum = BTREE_METAPAGE + 1;
Similarly, for hash index:
p.current_blocknum = HASH_METAPAGE + 1;
+ /* Unlock and release buffer */
UnlockReleaseBuffer(buf);
I think this comment is redundant since the function name UnlockReleaseBuffer is self-explanatory. I suggest omitting it from pgstathashindex and removing the existing one from pgstatindex_impl.