mirror of https://github.com/openssl/openssl.git
				
				
				
			sparse array: reduces the block size
This becomes a performance improvement in the ossl_sa_doall_arg function which
has started appearing on profile output.  The other ossl_sa_ functions don't
contribute significantly to profile output.
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17973)
(cherry picked from commit 514bd51a8c)
			
			
This commit is contained in:
		
							parent
							
								
									a104b8aa53
								
							
						
					
					
						commit
						20de516cd3
					
				|  | @ -19,24 +19,19 @@ | |||
|  * depth of the tree but potentially wastes more memory.  That is, this is a | ||||
|  * direct space versus time tradeoff. | ||||
|  * | ||||
|  * The large memory model uses twelve bits which means that the are 4096 | ||||
|  * pointers in each tree node.  This is more than sufficient to hold the | ||||
|  * largest defined NID (as of Feb 2019).  This means that using a NID to | ||||
|  * index a sparse array becomes a constant time single array look up. | ||||
|  * | ||||
|  * The small memory model uses four bits which means the tree nodes contain | ||||
|  * sixteen pointers.  This reduces the amount of unused space significantly | ||||
|  * at a cost in time. | ||||
|  * The default is to use four bits which means that the are 16 | ||||
|  * pointers in each tree node. | ||||
|  * | ||||
|  * The library builder is also permitted to define other sizes in the closed | ||||
|  * interval [2, sizeof(ossl_uintmax_t) * 8]. | ||||
|  * interval [2, sizeof(ossl_uintmax_t) * 8].  Space use generally scales | ||||
|  * exponentially with the block size, although the implementation only | ||||
|  * creates enough blocks to support the largest used index.  The depth is: | ||||
|  *      ceil(log_2(largest index) / 2^{block size}) | ||||
|  * E.g. with a block size of 4, and a largest index of 1000, the depth | ||||
|  * will be three. | ||||
|  */ | ||||
| #ifndef OPENSSL_SA_BLOCK_BITS | ||||
| # ifdef OPENSSL_SMALL_FOOTPRINT | ||||
| #  define OPENSSL_SA_BLOCK_BITS           4 | ||||
| # else | ||||
| #  define OPENSSL_SA_BLOCK_BITS           12 | ||||
| # endif | ||||
| # define OPENSSL_SA_BLOCK_BITS           4 | ||||
| #elif OPENSSL_SA_BLOCK_BITS < 2 || OPENSSL_SA_BLOCK_BITS > (BN_BITS2 - 1) | ||||
| # error OPENSSL_SA_BLOCK_BITS is out of range | ||||
| #endif | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue