As a start:
Bump your cleaners up to one per dbspace.
Set lru_max_drity to 3
set lru_min_dirty to 1
You checkpoint problem is related to the number of dirty pages you have, and the time it takes to flush them, when a checkpoint occurs - either by timer or plog full. By setting the lru cleaner threshold values lower you start to clean as soon as things get dirty.
look at onstat -F, you want to see LRU writes, not chunk writes or (heaven) forground writes.