Hi,

I have analyzed the branch taken rate of the Linux kernel compiled
with GCC (using localyesconfig from Debian config) and found something
strange.

Hardware: Intel Core i7-4770, 32G RAM, 10GbE
Software: Linux 3.16.7, GCC 4.9.3 20121201, Debian sid

I use perf with rbf88:k,rff88:k events (Haswell specific) to profile
the taken rate of conditional branches in the kernel. Here are the
results:

Application    Taken (rbf88:k)  Total (rff88:k)    Taken rate
 Apache           3.91e9           6.35e9             62%
 nginx            6.00e9           1.03e10            58%
 MySQL            1.11e9           1.81e9             61%
 PostgreSQL       2.95e8           4.79e8             62%
 memcached        3.69e9           6.39e9             58%
 Redis            1.77e9           3.06e9             58%

The results are very strange because all the taken rates are greater
than 50%. Why not reverse the basic block reordering heuristics to
make them under 50%? Is there anything wrong with GCC?

Regards,

YUAN, Pengfei
Peking University

Reply via email to