hadoop-hdfs-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Colin Patrick McCabe (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HDFS-5276) FileSystem.Statistics got performance issue on multi-thread read/write.
Date Mon, 14 Oct 2013 17:31:44 GMT

    [ https://issues.apache.org/jira/browse/HDFS-5276?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13794299#comment-13794299

Colin Patrick McCabe commented on HDFS-5276:

As Binglin pointed out, you cannot use volatile here because of the "lost updates" problem.
 There is no way to atomically add one to a volatile variable-- someone else may have updated
it in between the time you read the value, and the time you wrote back the value plus one.

I also suspect that just using volatile would still be slower than the thread-local approach.
 The fundamental problem here is inter-CPU communication is slow, and just substituting volatile
for atomic doesn't solve that.

Thanks for the benchmarks, Binglin.

> FileSystem.Statistics got performance issue on multi-thread read/write.
> -----------------------------------------------------------------------
>                 Key: HDFS-5276
>                 URL: https://issues.apache.org/jira/browse/HDFS-5276
>             Project: Hadoop HDFS
>          Issue Type: Bug
>    Affects Versions: 2.0.4-alpha
>            Reporter: Chengxiang Li
>            Assignee: Colin Patrick McCabe
>         Attachments: DisableFSReadWriteBytesStat.patch, HDFS-5276.001.patch, HDFS-5276.002.patch,
HDFSStatisticTest.java, hdfs-test.PNG, jstack-trace.PNG, TestFileSystemStatistics.java, ThreadLocalStat.patch
> FileSystem.Statistics is a singleton variable for each FS scheme, each read/write on
HDFS would lead to a AutomicLong.getAndAdd(). AutomicLong does not perform well in multi-threads(let's
say more than 30 threads). so it may cause  serious performance issue. during our spark test
profile, 32 threads read data from HDFS, about 70% cpu time is spent on FileSystem.Statistics.incrementBytesRead().

This message was sent by Atlassian JIRA

View raw message