[
https://issues.apache.org/jira/browse/HDFS-17914?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18081558#comment-18081558
]
ASF GitHub Bot commented on HDFS-17914:
---------------------------------------
lirui-apache commented on code in PR #8463:
URL: https://github.com/apache/hadoop/pull/8463#discussion_r3256142315
##########
hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java:
##########
@@ -1230,7 +1230,9 @@ void actualGetFromOneDataNode(final DNAddrPair datanode,
final long startInBlk,
long beginReadMS = Time.monotonicNow();
int nread = 0;
int ret;
- while (true) {
+ // Stop once the slice is filled; an extra read with remaining()==0
+ // can trigger wasted slow-lane I/O in SCR.
+ while (tmp.hasRemaining()) {
Review Comment:
I was doing aligned positional reads with a DirectByteBuffer. Ideally I
should only hit the fast lane and avoid the bounce buffer. But I noticed some
cost from the slow lane and found the extra read. I believe the issue is pretty
easy to trigger, but whether it brings real perf regression depends on the
BlockReader implementations.
> Prevent DFSInputStream from issuing 0-byte reads
> ------------------------------------------------
>
> Key: HDFS-17914
> URL: https://issues.apache.org/jira/browse/HDFS-17914
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: hdfs-client
> Reporter: Rui Li
> Priority: Major
> Labels: pull-request-available
>
> Currently, {{DFSInputStream#actualGetFromOneDataNode}} can issue an extra
> {{BlockReader#read}} after the buffer is completely filled. This extra read
> can cause a wasted slow-lane read into the bounce buffer for
> {{{}BlockReaderLocal{}}}.
> A possible fix is to terminate the loop once the requested slice is filled.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]