• Dan Williams's avatar
    md/raid456: downlevel multicore operations to raid_run_ops · 417b8d4a
    Dan Williams authored
    The percpu conversion allowed a straightforward handoff of stripe
    processing to the async subsytem that initially showed some modest gains
    (+4%).  However, this model is too simplistic and leads to stripes
    bouncing between raid5d and the async thread pool for every invocation
    of handle_stripe().  As reported by Holger this can fall into a
    pathological situation severely impacting throughput (6x performance
    loss).
    
    By downleveling the parallelism to raid_run_ops the pathological
    stripe_head bouncing is eliminated.  This version still exhibits an
    average 11% throughput loss for:
    
    	mdadm --create /dev/md0 /dev/sd[b-q] -n 16 -l 6
    	echo 1024 > /sys/block/md0/md/stripe_cache_size
    	dd if=/dev/zero of=/dev/md0 bs=1024k count=2048
    
    ...but the results are at least stable and can be used as a base for
    further multicore experimentation.
    Reported-by: default avatarHolger Kiehl <Holger.Kiehl@dwd.de>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    417b8d4a
raid5.c 161 KB