Mateusz Guzik <mjguzik@gmail.com> says:
quote:
When utilized it dodges strlen() in vfs_readlink(), giving about 1.5%
speed up when issuing readlink on /initrd.img on ext4.
The size is stored in a union with i_devices, which is never looked at
unless the inode is for a device.
ext4 and tmpfs are patched, other filesystems can also get there with
some more work.
benchmark:
plug into will-it-scale into tests/readlink1.c:
char *testcase_description = "readlink /initrd.img";
void testcase(unsigned long long *iterations, unsigned long nr)
{
char *tmplink = "/initrd.img";
char buf[1024];
while (1) {
int error = readlink(tmplink, buf, sizeof(buf));
assert(error > 0);
(*iterations)++;
}
}
* patches from https://lore.kernel.org/r/
20241120112037.822078-1-mjguzik@gmail.com:
tmpfs: use inode_set_cached_link()
ext4: use inode_set_cached_link()
vfs: support caching symlink lengths in inodes
Link: https://lore.kernel.org/r/20241120112037.822078-1-mjguzik@gmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>