Siyao Meng created HDDS-17100:
---------------------------------

             Summary: Do not send chunk checksums in ReadChunk requests
                 Key: HDDS-17100
                 URL: https://issues.apache.org/jira/browse/HDDS-17100
             Project: Apache Ozone
          Issue Type: Improvement
            Reporter: Siyao Meng


{{ChunkInputStream#getChunkInfo}} builds the {{ChunkInfo}} of every ReadChunk 
request by copying the chunk's full {{ChunkInfo}}, including the checksum of 
every {{bytesPerChecksum}} slice of the chunk (256 checksums for a 4 MB chunk 
at 16 KB per checksum) and, for EC, the stripe checksum. This happens even for 
a small positioned read.

The datanode does not use these checksums for client reads (it only verifies 
data read for Ratis, see HDDS-5623), but it parses them and echoes the request 
{{ChunkInfo}} back in the response, which the client parses again. The client 
verifies the data against its own copy of the chunk checksums, not the echoed 
ones.

On a 3 datanode docker compose cluster with random 64 KB preads from 8 threads, 
parsing the ReadChunk request was about 12% of datanode CPU, almost all of it 
in {{ChecksumData$Builder.mergeFrom}}. Leaving the checksums out of the request 
cut datanode CPU per read from about 58 µs to 34 µs (request parsing dropped to 
2.6% of datanode CPU). Latency on the idle test cluster was unchanged within 
noise.

Proposed fix: clear {{checksums}} (keeping type and {{bytesPerChecksum}}) and 
{{stripeChecksum}} in the ReadChunk request {{ChunkInfo}}. The change is client 
side only and works with existing datanodes.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to