mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	bcachefs: Add more time stats for being blocked on allocator
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
		
							parent
							
								
									7c648fe899
								
							
						
					
					
						commit
						49a67206e4
					
				
					 3 changed files with 28 additions and 3 deletions
				
			
		|  | @ -246,6 +246,10 @@ struct open_bucket *bch2_bucket_alloc(struct bch_fs *c, struct bch_dev *ca, | |||
| 	if (unlikely(c->open_buckets_nr_free <= open_buckets_reserved(reserve))) { | ||||
| 		if (cl) | ||||
| 			closure_wait(&c->open_buckets_wait, cl); | ||||
| 
 | ||||
| 		if (!c->blocked_allocate_open_bucket) | ||||
| 			c->blocked_allocate_open_bucket = local_clock(); | ||||
| 
 | ||||
| 		spin_unlock(&c->freelist_lock); | ||||
| 		trace_open_bucket_alloc_fail(ca, reserve); | ||||
| 		return ERR_PTR(-OPEN_BUCKETS_EMPTY); | ||||
|  | @ -276,6 +280,9 @@ struct open_bucket *bch2_bucket_alloc(struct bch_fs *c, struct bch_dev *ca, | |||
| 	if (cl) | ||||
| 		closure_wait(&c->freelist_wait, cl); | ||||
| 
 | ||||
| 	if (!c->blocked_allocate) | ||||
| 		c->blocked_allocate = local_clock(); | ||||
| 
 | ||||
| 	spin_unlock(&c->freelist_lock); | ||||
| 
 | ||||
| 	trace_bucket_alloc_fail(ca, reserve); | ||||
|  | @ -301,6 +308,20 @@ out: | |||
| 	bucket_io_clock_reset(c, ca, bucket, WRITE); | ||||
| 	spin_unlock(&ob->lock); | ||||
| 
 | ||||
| 	if (c->blocked_allocate_open_bucket) { | ||||
| 		bch2_time_stats_update( | ||||
| 			&c->times[BCH_TIME_blocked_allocate_open_bucket], | ||||
| 			c->blocked_allocate_open_bucket); | ||||
| 		c->blocked_allocate_open_bucket = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	if (c->blocked_allocate) { | ||||
| 		bch2_time_stats_update( | ||||
| 			&c->times[BCH_TIME_blocked_allocate], | ||||
| 			c->blocked_allocate); | ||||
| 		c->blocked_allocate = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	spin_unlock(&c->freelist_lock); | ||||
| 
 | ||||
| 	bch2_wake_allocator(ca); | ||||
|  |  | |||
|  | @ -302,8 +302,10 @@ do {									\ | |||
| 	x(data_promote)				\ | ||||
| 	x(journal_write)			\ | ||||
| 	x(journal_delay)			\ | ||||
| 	x(journal_blocked)			\ | ||||
| 	x(journal_flush_seq) | ||||
| 	x(journal_flush_seq)			\ | ||||
| 	x(blocked_journal)			\ | ||||
| 	x(blocked_allocate)			\ | ||||
| 	x(blocked_allocate_open_bucket) | ||||
| 
 | ||||
| enum bch_time_stats { | ||||
| #define x(name) BCH_TIME_##name, | ||||
|  | @ -653,6 +655,8 @@ struct bch_fs { | |||
| 	/* ALLOCATOR */ | ||||
| 	spinlock_t		freelist_lock; | ||||
| 	struct closure_waitlist	freelist_wait; | ||||
| 	u64			blocked_allocate; | ||||
| 	u64			blocked_allocate_open_bucket; | ||||
| 	u8			open_buckets_freelist; | ||||
| 	u8			open_buckets_nr_free; | ||||
| 	struct closure_waitlist	open_buckets_wait; | ||||
|  |  | |||
|  | @ -596,7 +596,7 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts) | |||
| 
 | ||||
| 	c->journal.write_time	= &c->times[BCH_TIME_journal_write]; | ||||
| 	c->journal.delay_time	= &c->times[BCH_TIME_journal_delay]; | ||||
| 	c->journal.blocked_time	= &c->times[BCH_TIME_journal_blocked]; | ||||
| 	c->journal.blocked_time	= &c->times[BCH_TIME_blocked_journal]; | ||||
| 	c->journal.flush_seq_time = &c->times[BCH_TIME_journal_flush_seq]; | ||||
| 
 | ||||
| 	bch2_fs_btree_cache_init_early(&c->btree_cache); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Kent Overstreet
						Kent Overstreet