crush: don't normalize input of crush_ln iteratively
authorIlya Dryomov <idryomov@gmail.com>
Tue, 27 Sep 2016 10:30:09 +0000 (12:30 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Wed, 5 Oct 2016 21:02:04 +0000 (23:02 +0200)
commit74a5293832b3c1f7cb8f86fb9af9ee747138d355
tree428a431d62ee601f6dd3ed5b0426714d38c7c66b
parent464691bd52b46a565153ec2a3b8b9984dacd4a00
crush: don't normalize input of crush_ln iteratively

Use __builtin_clz() supported by GCC and Clang to figure out
how many bits we should shift instead of shifting by a bit
in a loop until the value gets normalized. Improves performance
of this function by up to 3x in worst-case scenario and overall
straw2 performance by ~10%.

Reflects ceph.git commit 110de33ca497d94fc4737e5154d3fe781fa84a0a.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
net/ceph/crush/mapper.c