mirror of https://github.com/tikv/client-java.git
				
				
				
			Signed-off-by: ti-srebot <ti-srebot@pingcap.com> Co-authored-by: iosmanthus <dengliming@pingcap.com> Co-authored-by: Liangliang Gu <marsishandsome@gmail.com>
This commit is contained in:
		
							parent
							
								
									5cd888b88a
								
							
						
					
					
						commit
						7f4fb953d9
					
				|  | @ -22,6 +22,8 @@ import static java.lang.Math.max; | ||||||
| import io.netty.util.internal.LongCounter; | import io.netty.util.internal.LongCounter; | ||||||
| import io.netty.util.internal.PlatformDependent; | import io.netty.util.internal.PlatformDependent; | ||||||
| import io.netty.util.internal.StringUtil; | import io.netty.util.internal.StringUtil; | ||||||
|  | import io.prometheus.client.Counter; | ||||||
|  | import io.prometheus.client.Histogram; | ||||||
| import java.nio.ByteBuffer; | import java.nio.ByteBuffer; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.Collections; | import java.util.Collections; | ||||||
|  | @ -29,6 +31,21 @@ import java.util.List; | ||||||
| import java.util.concurrent.atomic.AtomicInteger; | import java.util.concurrent.atomic.AtomicInteger; | ||||||
| 
 | 
 | ||||||
| abstract class PoolArena<T> extends SizeClasses implements PoolArenaMetric { | abstract class PoolArena<T> extends SizeClasses implements PoolArenaMetric { | ||||||
|  | 
 | ||||||
|  |   public static final Counter poolArenaAllocations = | ||||||
|  |       Counter.build() | ||||||
|  |           .name("netty_buffer_pool_arena_allocations") | ||||||
|  |           .help("Number of times a pool arena was allocated") | ||||||
|  |           .labelNames("type") | ||||||
|  |           .register(); | ||||||
|  | 
 | ||||||
|  |   public static final Histogram poolArenaAllocationsDuration = | ||||||
|  |       Histogram.build() | ||||||
|  |           .name("netty_buffer_pool_arena_allocations_duration_seconds") | ||||||
|  |           .help("Duration of a pool arena allocation") | ||||||
|  |           .labelNames("type") | ||||||
|  |           .register(); | ||||||
|  | 
 | ||||||
|   static final boolean HAS_UNSAFE = PlatformDependent.hasUnsafe(); |   static final boolean HAS_UNSAFE = PlatformDependent.hasUnsafe(); | ||||||
| 
 | 
 | ||||||
|   enum SizeClass { |   enum SizeClass { | ||||||
|  | @ -136,13 +153,25 @@ abstract class PoolArena<T> extends SizeClasses implements PoolArenaMetric { | ||||||
|     final int sizeIdx = size2SizeIdx(reqCapacity); |     final int sizeIdx = size2SizeIdx(reqCapacity); | ||||||
| 
 | 
 | ||||||
|     if (sizeIdx <= smallMaxSizeIdx) { |     if (sizeIdx <= smallMaxSizeIdx) { | ||||||
|  |       Histogram.Timer smallAllocationTimer = | ||||||
|  |           poolArenaAllocationsDuration.labels("small").startTimer(); | ||||||
|       tcacheAllocateSmall(cache, buf, reqCapacity, sizeIdx); |       tcacheAllocateSmall(cache, buf, reqCapacity, sizeIdx); | ||||||
|  |       smallAllocationTimer.observeDuration(); | ||||||
|  |       poolArenaAllocations.labels("small").inc(); | ||||||
|     } else if (sizeIdx < nSizes) { |     } else if (sizeIdx < nSizes) { | ||||||
|  |       Histogram.Timer normalAllocationTimer = | ||||||
|  |           poolArenaAllocationsDuration.labels("normal").startTimer(); | ||||||
|       tcacheAllocateNormal(cache, buf, reqCapacity, sizeIdx); |       tcacheAllocateNormal(cache, buf, reqCapacity, sizeIdx); | ||||||
|  |       normalAllocationTimer.observeDuration(); | ||||||
|  |       poolArenaAllocations.labels("normal").inc(); | ||||||
|     } else { |     } else { | ||||||
|  |       Histogram.Timer hugeAllocationTimer = | ||||||
|  |           poolArenaAllocationsDuration.labels("huge").startTimer(); | ||||||
|       int normCapacity = directMemoryCacheAlignment > 0 ? normalizeSize(reqCapacity) : reqCapacity; |       int normCapacity = directMemoryCacheAlignment > 0 ? normalizeSize(reqCapacity) : reqCapacity; | ||||||
|       // Huge allocations are never served via the cache so just call allocateHuge |       // Huge allocations are never served via the cache so just call allocateHuge | ||||||
|       allocateHuge(buf, normCapacity); |       allocateHuge(buf, normCapacity); | ||||||
|  |       hugeAllocationTimer.observeDuration(); | ||||||
|  |       poolArenaAllocations.labels("huge").inc(); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue