Repository navigation
Replies: 1 comment
|
Your reading of the encode path matches master (c15b66e). One thing to know before trying the fix you suggested: switching
The datanode-facing side seems to be in place already: Two side effects:
On the +10 GiB: before putting all of it on unreclaimed I don't have cluster numbers for your second question, sorry. (Drafted with help from Claude; code references checked against master c15b66e.) |
Uh oh!
There was an error while loading. Please reload this page.
Hi all,
We're evaluating ISA-L for EC writes through the S3 gateway on 2.2.1 (rs-3-2-1024k). We couldn't find any published Ozone numbers comparing the native coder with the Java coder. Does anyone have some to share?
What we measured on a small test cluster (2 s3g, 5 DNs, freon s3kg with a mix of 4 MiB PUTs and 32 MiB MPU parts, ~1.1 GB/s, 16g heap):
JFR confirms the native coder is used: RSUtil.encodeData (~78% of Java samples with the Java coder) is replaced by NativeRSRawEncoder.encodeImpl.
Two questions:
ECKeyOutputStream.ECChunkBuffers.allocateBuffers()takes heap buffers (byteBufferPool.getBuffer(false, cellSize), still the same on master). The native encoder prefers direct buffers, soRawErasureEncoder.encode()converts. On the native path,ByteArrayEncodingState.convertToByteBufferState()then callsByteBuffer.allocateDirect()for every input and output cell of every stripe, copies in, and copies the parity back out. At ~1 GB/s that's on the order of 2 GB/s of fresh direct allocation plus copies. We think this is both what eats most of the ISA-L gain and what causes the off-heap growth, since direct memory is only reclaimed by GC up toMaxDirectMemorySize, which defaults to the heap size. Is this known? Would allocating direct buffers whenencoder.preferDirectBuffer()is true be the right fix? The reconstruction input streams also callgetBuffer(false, …).All reactions