mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Add DB_RF_NOPREFETCH to dbuf_read()s in dnode.c
Prefetching of dnodes in dbuf_read() can cause significant mutex contention for some workloads and isn't very helpful. This is because we already get 32 dnodes for each block read, and when iterating over a directory we prefetch the dnodes in the directory. Disable this prefetching to prevent the lock contention. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Submitted-by: Adam Moss <c@yotes.com> Submitted-by: Matthew Ahrens <mahrens@delphix.com> Signed-off-by: Adam Moss <c@yotes.com> Closes #10877 Closes #10953
This commit is contained in:
		
							parent
							
								
									7b353d2c8c
								
							
						
					
					
						commit
						edd23dba81
					
				| @ -1355,7 +1355,8 @@ dnode_hold_impl(objset_t *os, uint64_t object, int flag, int slots, | ||||
| 	 * We do not need to decrypt to read the dnode so it doesn't matter | ||||
| 	 * if we get the encrypted or decrypted version. | ||||
| 	 */ | ||||
| 	err = dbuf_read(db, NULL, DB_RF_CANFAIL | DB_RF_NO_DECRYPT); | ||||
| 	err = dbuf_read(db, NULL, DB_RF_CANFAIL | | ||||
| 	    DB_RF_NO_DECRYPT | DB_RF_NOPREFETCH); | ||||
| 	if (err) { | ||||
| 		DNODE_STAT_BUMP(dnode_hold_dbuf_read); | ||||
| 		dbuf_rele(db, FTAG); | ||||
| @ -2396,7 +2397,8 @@ dnode_next_offset_level(dnode_t *dn, int flags, uint64_t *offset, | ||||
| 			return (SET_ERROR(ESRCH)); | ||||
| 		} | ||||
| 		error = dbuf_read(db, NULL, | ||||
| 		    DB_RF_CANFAIL | DB_RF_HAVESTRUCT | DB_RF_NO_DECRYPT); | ||||
| 		    DB_RF_CANFAIL | DB_RF_HAVESTRUCT | | ||||
| 		    DB_RF_NO_DECRYPT | DB_RF_NOPREFETCH); | ||||
| 		if (error) { | ||||
| 			dbuf_rele(db, FTAG); | ||||
| 			return (error); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Adam D. Moss
						Adam D. Moss