|
Konstantin Shvachko made changes - 30/Jul/08 01:46 AM
I benchmarked three operations: create, rename, and delete using NNThroughputBenchmark, which is a pure name-node benchmark. It calls the name-node methods directly without using the rpc protocol. So the rpc overhead is not included in these results, and should be measured separately say with synthetic load generator.
In a sense these benchmarks determine an upper bound for the HDFS operations, namely the maximum throughput the name-node can sustain under heavy load. Each run starts with an empty files system and performs 1 million operations handled by 256 threads on the name-node. The output is the throughput that is the number of operation per second, which is calculated as 1,000,000/(tE-tB), where tB is when the first thread starts, and tE is when all threads stop. The threads run in parallel. Each test consists of 1,000,000 operations performed using 256 threads.
Some conclusions:
Another set of statistical data, which characterizes the actual load on the name-node on some of our clusters. Unfortunately, the statistics for open is broken, and we do not collect stats for renames. So I can only present creates and deletes. Please contribute if somebody has more data.
Konstantin Shvachko made changes - 30/Jul/08 02:01 AM
+1 overall. Here are the results of testing the latest attachment
http://issues.apache.org/jira/secure/attachment/12387153/NNThruputMoreOps.patch against trunk revision 680823. +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 6 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: http://hudson.zones.apache.org/hudson/job/Hadoop-Patch/2979/testReport/ This message is automatically generated. NFS is a black art: when doing benchmarks such as these, implementation matters. Are we using NFSv2? v3? v4? UDP or TCP? What is the rwsize set to? What is the server side and what is the client side? What about TCP/IP tuning?
You probably know that better than I do. But the point of the benchmarking was to compare nfs vs local drives.
There was a suspicion that ios to nfs are substantially slower then to local drives, and it turned out to be pretty much the same. It would even better of course if we could fine tune nfs. I edited a typo in the formula explaining throughput:
– 1,000,000/(tE-tE) + 1,000,000/(tE-tB) It looks as though it is not just the number of mutations but something else matters as well(may be amount of data written to edits log per mutation, cpu, or locking). That could explain large disparity between number creates, renames, and deletes though each of these is single mutation.
I just committed this.
Please feel free to comment, discuss the benchmark results.
Konstantin Shvachko made changes - 05/Aug/08 09:55 PM
Hi Konstantin,
Great analysis. I completely agree with you that coarse-grain locking for the namenode should not be impacting scalability of opens and creates. It is the disk sync times that really matters. BTW, when you ran the test on a single disk on local drive, did you see the disk max-out on IO? You said that 5710 creates occured, the limitation being CPU on the machine or disk IO contention? Also, I had a patch Dhruba,
For creates we definitely have disk IO contention not the cpu. About H2330, Hairong tested it with her new synthetic load generator - very encouraging results. Integrated in Hadoop-trunk #581 (See http://hudson.zones.apache.org/hudson/job/Hadoop-trunk/581/
Robert Chansler made changes - 26/Aug/08 09:58 PM
Robert Chansler made changes - 22/Oct/08 12:48 AM
Nigel Daley made changes - 20/Nov/08 11:38 PM
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
It extends NNThroughputBenchmark with new operations rename and delete as well as introduces additional command line options,
which control what the benchmarks do with generated files before and after the execution.