/** * This is the constructor you are looking for. * * <p>Build a reusable ring configuration object that holds the FROM and ring size definition. We * wait to allocate the ring later to support NUMA platforms. In order to wait we require an * object to hold this information. * * <p>Because some messages are made up of multiple fragments and not all fragments are the same * size this constructor will make use of the largest fragment defined in the from as the bases * for how big to make the primary ring. Once the primary ring is defined we find the fragment * with the highest ratio of variable length fields and assume the ring is full of those * exclusively. This gives us the maximum number of variable length fields that can be expected * which is multiplied by the provided maximumLenghOfVariableLengthFields to get the minimum size * of the byte ring. This value is then rounded up to the next power of 2. * * @param from * @param minimumFragmentsOnRing The minimum number of fragments/messages that the application * must be able to put on the ring. * @param maximumLenghOfVariableLengthFields */ public PipeConfig( FieldReferenceOffsetManager from, int minimumFragmentsOnRing, int maximumLenghOfVariableLengthFields) { int biggestFragment = FieldReferenceOffsetManager.maxFragmentSize(from); int primaryMinSize = minimumFragmentsOnRing * biggestFragment; this.primaryBits = (byte) (32 - Integer.numberOfLeadingZeros(primaryMinSize - 1)); int maxVarFieldsInRingAtOnce = FieldReferenceOffsetManager.maxVarLenFieldsPerPrimaryRingSize(from, 1 << primaryBits); int secondaryMinSize = maxVarFieldsInRingAtOnce * maximumLenghOfVariableLengthFields; this.byteBits = (byte) (32 - Integer.numberOfLeadingZeros(secondaryMinSize - 1)); this.byteConst = null; this.from = from; }
public PipeConfig(FieldReferenceOffsetManager from) { // default size which is smaller than half of 64K because this is the L1 cache size on intel // haswell. this.primaryBits = 6; this.byteBits = 15; this.byteConst = null; this.from = from; // validate FieldReferenceOffsetManager.maxVarLenFieldsPerPrimaryRingSize(from, 1 << primaryBits); }