drbd: Load balancing method: striping
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
		
					parent
					
						
							
								380207d08e
							
						
					
				
			
			
				commit
				
					
						d60de03a66
					
				
			
		
					 2 changed files with 17 additions and 2 deletions
				
			
		| 
						 | 
					@ -745,10 +745,11 @@ static bool drbd_may_do_local_read(struct drbd_conf *mdev, sector_t sector, int
 | 
				
			||||||
	return drbd_bm_count_bits(mdev, sbnr, ebnr) == 0;
 | 
						return drbd_bm_count_bits(mdev, sbnr, ebnr) == 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool remote_due_to_read_balancing(struct drbd_conf *mdev)
 | 
					static bool remote_due_to_read_balancing(struct drbd_conf *mdev, sector_t sector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	enum drbd_read_balancing rbm;
 | 
						enum drbd_read_balancing rbm;
 | 
				
			||||||
	struct backing_dev_info *bdi;
 | 
						struct backing_dev_info *bdi;
 | 
				
			||||||
 | 
						int stripe_shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (mdev->state.pdsk < D_UP_TO_DATE)
 | 
						if (mdev->state.pdsk < D_UP_TO_DATE)
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
| 
						 | 
					@ -764,6 +765,14 @@ static bool remote_due_to_read_balancing(struct drbd_conf *mdev)
 | 
				
			||||||
	case RB_LEAST_PENDING:
 | 
						case RB_LEAST_PENDING:
 | 
				
			||||||
		return atomic_read(&mdev->local_cnt) >
 | 
							return atomic_read(&mdev->local_cnt) >
 | 
				
			||||||
			atomic_read(&mdev->ap_pending_cnt) + atomic_read(&mdev->rs_pending_cnt);
 | 
								atomic_read(&mdev->ap_pending_cnt) + atomic_read(&mdev->rs_pending_cnt);
 | 
				
			||||||
 | 
						case RB_32K_STRIPING:  /* stripe_shift = 15 */
 | 
				
			||||||
 | 
						case RB_64K_STRIPING:
 | 
				
			||||||
 | 
						case RB_128K_STRIPING:
 | 
				
			||||||
 | 
						case RB_256K_STRIPING:
 | 
				
			||||||
 | 
						case RB_512K_STRIPING:
 | 
				
			||||||
 | 
						case RB_1M_STRIPING:   /* stripe_shift = 20 */
 | 
				
			||||||
 | 
							stripe_shift = (rbm - RB_32K_STRIPING + 15);
 | 
				
			||||||
 | 
							return (sector >> (stripe_shift - 9)) & 1;
 | 
				
			||||||
	case RB_ROUND_ROBIN:
 | 
						case RB_ROUND_ROBIN:
 | 
				
			||||||
		return test_and_change_bit(READ_BALANCE_RR, &mdev->flags);
 | 
							return test_and_change_bit(READ_BALANCE_RR, &mdev->flags);
 | 
				
			||||||
	case RB_PREFER_REMOTE:
 | 
						case RB_PREFER_REMOTE:
 | 
				
			||||||
| 
						 | 
					@ -841,7 +850,7 @@ int __drbd_make_request(struct drbd_conf *mdev, struct bio *bio, unsigned long s
 | 
				
			||||||
				bio_put(req->private_bio);
 | 
									bio_put(req->private_bio);
 | 
				
			||||||
				req->private_bio = NULL;
 | 
									req->private_bio = NULL;
 | 
				
			||||||
				put_ldev(mdev);
 | 
									put_ldev(mdev);
 | 
				
			||||||
			} else if (remote_due_to_read_balancing(mdev)) {
 | 
								} else if (remote_due_to_read_balancing(mdev, sector)) {
 | 
				
			||||||
				/* Keep the private bio in case we need it
 | 
									/* Keep the private bio in case we need it
 | 
				
			||||||
				   for a local retry */
 | 
									   for a local retry */
 | 
				
			||||||
				local = 0;
 | 
									local = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,6 +108,12 @@ enum drbd_read_balancing {
 | 
				
			||||||
	RB_ROUND_ROBIN,
 | 
						RB_ROUND_ROBIN,
 | 
				
			||||||
	RB_LEAST_PENDING,
 | 
						RB_LEAST_PENDING,
 | 
				
			||||||
	RB_CONGESTED_REMOTE,
 | 
						RB_CONGESTED_REMOTE,
 | 
				
			||||||
 | 
						RB_32K_STRIPING,
 | 
				
			||||||
 | 
						RB_64K_STRIPING,
 | 
				
			||||||
 | 
						RB_128K_STRIPING,
 | 
				
			||||||
 | 
						RB_256K_STRIPING,
 | 
				
			||||||
 | 
						RB_512K_STRIPING,
 | 
				
			||||||
 | 
						RB_1M_STRIPING,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* KEEP the order, do not delete or insert. Only append. */
 | 
					/* KEEP the order, do not delete or insert. Only append. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue