On 4/19/19 6:05 PM, Coly Li wrote:
When btree_flush_write() is called, it means the journal space is exhuasted already. Current code only selects a single btree node to write out, which may introduce huge cache bounce from the spinlock on multiple cpu cores, when a lot of kworkers on journaling code path to call btree_flush_write() for journal space reclaiming. This patch tries to flush as many btree node as possible inside a single call to btree_flush_write(), then the frequence of calling btree_flush_write() can be reduced, which in turn reduces the cache bounce from spinlock on multiple cpu cores. Please notice that this patch does not reduce the total times of acquiring spinlock, a spin lock is still acquired when select every single btree node to write out, but this patch will try best to hold the spinlock on same cpu core, which avoids the cache bounce where the spinlock is acquired by multiple different cpu cores. After the patch applied, in my pressure testing, 'top' shows more than 50% sys cpu time reduced from the kworks which competing spinlock inside btree_flush_write(). Signed-off-by: Coly Li <colyli@xxxxxxx> --- drivers/md/bcache/journal.c | 7 ++++++- drivers/md/bcache/journal.h | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-)
Reviewed-by: Hannes Reinecke <hare@xxxxxxxx> Cheers, Hannes -- Dr. Hannes Reinecke Teamlead Storage & Networking hare@xxxxxxx +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 21284 (AG Nürnberg)