Percona published Linkbench results. It looks like they set innodb_io_capacity to a large value but did not increase innodb_lru_scan_depth. I think that is a mistake. This is a mistake that I have made and that I hope you can avoid. innodb_io_capacity limits the number of pages flushed per second from the flush list. innodb_lru_scan_depth limits the number of pages flushed per second from the LRU list. Perhaps it would have been better to derive both flush rates from innodb_io_capacity. These are approximate limits on the number of page writes per buffer pool instance per second rather than on the number of page writes per second. When innodb_buffer_pool_instances=8, innodb_io_capacity=2000 and innodb_lru_scan_depth=1000 then InnoDB can flush about 8 X 2000 pages per second from the flush list and 8 X 1000 pages per second from the LRU.
It is now very important to set both of these variables to the IO rate you want InnoDB to maintain. Prior to 5.6 this was much less important as InnoDB did "furious flushing" and the main background thread could greatly exceed innodb_io_capacity when there was work to be done.
The rest of this was posted to mysqlperformanceblog.com but looks like it is held up by spam filters. Maybe it has too many URLs. One day spam filters will discover the notion of relevance for URLs.
For 5.6 you need to set innodb_lru_scan_depth to a value similar to innodb_io_capacity. They should have made LRU page flushing a function of innodb_io_capacity, but they didn’t and a lot of people are going to waste time and lose performance because of this. I am one of those people.
When MySQL 5.6 spends a lot of time in buf_LRU_scan_and_free_block you are not going to have good performance results. Prior to 5.6 foreground threads were responsible for moving pages to the free list via buf_flush_free_margin. I did a lot of work for the innodb_fast_free_list option to fix the stalls and that change makes 5.1 competitive with 5.6 (http://mysqlha.blogspot.com/2013/02/mysql-56-is-much-faster-on-io-bound.html) but that patch can’t be used in 5.6.
In 5.6 a background thread, buf_flush_page_cleaner_thread, should be moving all pages to the free list. Foreground threads can still do it, but the server is much less efficient when they must do it. And when they call buf_LRU_scan_and_free_block they are trying to do it.
I filed a few bugs for this and I hope most of them will be fixed in 5.6.12. They should make a difference. I think Oracle might be aware of some of these problems prior to my bug reports — but it is hard to know what goes on behind the large wall between us and them.
I am not sure this one will be fixed. Too bad, as Percona has a fix for it – http://bugs.mysql.com/bug.php?id=45892