Sunday, March 29, 2009

Make Falcon faster

Falcon has a busy-wait loop that isn't very busy when it gets removed by an optimizing compiler. This makes it much slower on highly-concurrent CPU bound workloads. Fixing this can double performance in some cases.

The binaries used in the graphs that follow are:
  • 5131_inno - 5.1.31 + tcmalloc + InnoDB 1.0.3 plugin + InnoDB
  • 6010_falcon_orig - 6.0.10-alpha + tcmalloc + Falcon
  • 6bzr_falcon_orig - mysql-6.0-falcon in launchpad + tcmalloc + Falcon
  • 6010_falcon_fix - 6010_falcon_orig with fix in SyncObject::backoff
  • 6bzr_falcon_fix - 6bzr_falcon_orig with fix in SyncObject::backoff
Results with and without the fix:
One odd result for Falcon is that the code in 6.0.10 is much faster than the code in launchpad for concurrent joins, but the code in launchpad is much faster than the code in 6.0.10 for sysbench.

To put this in context, there is still a big difference between InnoDB and Falcon as can be viewed in the throughput in queries per hour for concurrent joins and the throughput in transactions per second for my sysbench.

A bug is open for this.

0 comments:

Post a Comment

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.