mirror of
				https://github.com/isar/libmdbx.git
				synced 2025-11-01 03:48:57 +08:00 
			
		
		
		
	mdbx: add MDBX_opt_spill_parent4child_denominator runtime option.
				
					
				
			More for https://github.com/erthink/libmdbx/issues/128 Change-Id: If1549c3855eb59c107eb115e6dbca515e81644f9
This commit is contained in:
		
							
								
								
									
										18
									
								
								src/core.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								src/core.c
									
									
									
									
									
								
							| @@ -6893,6 +6893,15 @@ int mdbx_txn_begin_ex(MDBX_env *env, MDBX_txn *parent, MDBX_txn_flags_t flags, | ||||
|                       MDBX_TXN_RDONLY | MDBX_WRITEMAP | MDBX_TXN_BLOCKED); | ||||
|     if (unlikely(rc != MDBX_SUCCESS)) | ||||
|       return rc; | ||||
|  | ||||
|     if (env->me_options.spill_parent4child_denominator) { | ||||
|       /* Spill dirty-pages of parent to provide dirtyroom for child txn */ | ||||
|       rc = mdbx_txn_spill(parent, nullptr, | ||||
|                           parent->tw.dirtylist->length / | ||||
|                               env->me_options.spill_parent4child_denominator); | ||||
|       if (unlikely(rc != MDBX_SUCCESS)) | ||||
|         return rc; | ||||
|     } | ||||
|     mdbx_tassert(parent, mdbx_audit_ex(parent, 0, false) == 0); | ||||
|  | ||||
|     flags |= parent->mt_flags & (MDBX_TXN_RW_BEGIN_FLAGS | MDBX_TXN_SPILLS); | ||||
| @@ -9922,6 +9931,7 @@ __cold int mdbx_env_create(MDBX_env **penv) { | ||||
|     env->me_options.dp_initial = env->me_options.dp_limit; | ||||
|   env->me_options.spill_max_denominator = 8; | ||||
|   env->me_options.spill_min_denominator = 8; | ||||
|   env->me_options.spill_parent4child_denominator = 0; | ||||
|  | ||||
|   int rc; | ||||
|   const size_t os_psize = mdbx_syspagesize(); | ||||
| @@ -20462,6 +20472,11 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option, | ||||
|       return MDBX_EINVAL; | ||||
|     env->me_options.spill_min_denominator = (uint8_t)value; | ||||
|     break; | ||||
|   case MDBX_opt_spill_parent4child_denominator: | ||||
|     if (unlikely(value > 255)) | ||||
|       return MDBX_EINVAL; | ||||
|     env->me_options.spill_parent4child_denominator = (uint8_t)value; | ||||
|     break; | ||||
|  | ||||
|   default: | ||||
|     return MDBX_EINVAL; | ||||
| @@ -20522,6 +20537,9 @@ __cold int mdbx_env_get_option(const MDBX_env *env, const MDBX_option_t option, | ||||
|   case MDBX_opt_spill_min_denominator: | ||||
|     *value = env->me_options.spill_min_denominator; | ||||
|     break; | ||||
|   case MDBX_opt_spill_parent4child_denominator: | ||||
|     *value = env->me_options.spill_parent4child_denominator; | ||||
|     break; | ||||
|  | ||||
|   default: | ||||
|     return MDBX_EINVAL; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user