Re: change strip_cache_size freeze the whole raid

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I can try and do this later this week possibly.

Justin.

On Tue, 23 Jan 2007, Neil Brown wrote:

> On Monday January 22, kylewong@xxxxxxxxxx wrote:
> > Hi,
> > 
> > Yesterday I tried to increase the value of strip_cache_size to see if I can 
> > get better performance or not. I increase the value from 2048 to something 
> > like 16384. After I did that, the raid5 freeze. Any proccess read / write to 
> > it stucked at D state. I tried to change it back to 2048, read 
> > strip_cache_active, cat /proc/mdstat, mdadm stop, etc. All didn't return 
> > back. I even cannot shutdown the machine. Finally I need to press the reset 
> > button in order to get back my control.
> 
> Thanks for reporting this.
> 
> alt-sysrq-T or "echo t > /proc/sysrq-trigger" can be really helpful to
> diagnose this sort of problem (providing the system isn't so badly
> stuck that the kernel logs don't get stored).
> 
> It is probably hitting a memory-allocation deadlock, though I cannot
> see exactly where the deadlock would be.  If you are able to reproduce
> it and can get the kernel logs after 'alt-sysrq-T' I would really
> appreciate it.
> 
> This patch will almost certainly fix the problem, though I would like
> to completely understand it first....
> 
> NeilBrown
> 
> 
> 
> Signed-off-by: Neil Brown <neilb@xxxxxxx>
> 
> ### Diffstat output
>  ./drivers/md/raid5.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff .prev/drivers/md/raid5.c ./drivers/md/raid5.c
> --- .prev/drivers/md/raid5.c	2007-01-22 09:08:16.000000000 +1100
> +++ ./drivers/md/raid5.c	2007-01-23 07:17:25.000000000 +1100
> @@ -205,7 +205,7 @@ static int grow_buffers(struct stripe_he
>  	for (i=0; i<num; i++) {
>  		struct page *page;
>  
> -		if (!(page = alloc_page(GFP_KERNEL))) {
> +		if (!(page = alloc_page(GFP_IO))) {
>  			return 1;
>  		}
>  		sh->dev[i].page = page;
> @@ -321,7 +321,7 @@ static struct stripe_head *get_active_st
>  static int grow_one_stripe(raid5_conf_t *conf)
>  {
>  	struct stripe_head *sh;
> -	sh = kmem_cache_alloc(conf->slab_cache, GFP_KERNEL);
> +	sh = kmem_cache_alloc(conf->slab_cache, GFP_IO);
>  	if (!sh)
>  		return 0;
>  	memset(sh, 0, sizeof(*sh) + (conf->raid_disks-1)*sizeof(struct r5dev));
> -
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux