code: func (e *RadixHashJoinExec) evalRadixBit() {
  	sv := e.ctx.GetSessionVars()
  	innerResultSize := float64(e.innerResult.GetMemTracker().BytesConsumed())
  	l2CacheSize := float64(sv.L2CacheSize) * 3 / 4
  	radixBitsNum := math.Ceil(math.Log2(innerResultSize / l2CacheSize))
  	if radixBitsNum <= 0 {
  		radixBitsNum = 1
  	}
  	// Take the rightmost radixBitsNum bits as the bitmask.
  	e.radixBits = ^(math.MaxUint32 << uint(radixBitsNum))
  	e.innerParts = make([]partition, 1<<uint(radixBitsNum))
  }
docs: // evalRadixBit evaluates the radix bit numbers.
  // To ensure that one partition of inner relation, one hash table, one partition
  // of outer relation and the join result of these two partitions fit into the L2
  // cache when the input data obeys the uniform distribution, we suppose every
  // sub-partition of inner relation using three quarters of the L2 cache size.