-
Notifications
You must be signed in to change notification settings - Fork 592
HDDS-7199. Implement new mix workload Read/Write Freon command which meets specific test requirements #3754
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
cc @duongkame |
…block-token generation
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/RangeKeysGenerator.java
Show resolved
Hide resolved
hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/x509/SecurityConfig.java
Outdated
Show resolved
Hide resolved
| HDDS_BLOCK_TOKEN_ENABLED_DEFAULT); | ||
| // this.grpcBlockTokenEnabled = conf.getBoolean(HDDS_BLOCK_TOKEN_ENABLED, | ||
| // HDDS_BLOCK_TOKEN_ENABLED_DEFAULT); | ||
| this.grpcBlockTokenEnabled = false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please ensure this doesn't get in.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes!! let me change it back!
| } else { | ||
| byte[] data = new byte[objectSizeInBytes]; | ||
| try (OzoneInputStream inputStream = ozoneBucket.readKey(keyName)) { | ||
| inputStream.read(data); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kerneltime hey Ritesh, if I don't need to access the result from read method, is there a way we could suppress the build error thrown from git workflow by this line (because the build throws an error that we ignore the result of read method)? Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can add a @SuppressWarnings({"unused"}) to tell findbugs make an exception here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks!!
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
|
|
||
| @CommandLine.Option(names = {"-r", "--range"}, | ||
| description = "index range of read/write operations.", | ||
| defaultValue = "0") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to establish if --range is optional? It could read contiguously till it hit not found for a key and limit the range to that point. Or it could always be a required option.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's put it as required for now! We could think about to make it become optional as an improvement later!
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OzoneClientKeyReadWriteOps.java
Outdated
Show resolved
Hide resolved
| public String getKeyName(int clientIndex) { | ||
| int start, end; | ||
| // separate tasks evenly to each client | ||
| if (range < clientsCount) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please validate the expected behavior when client >> range. It might make sense to cap the client to be <= range, so in the case client configured is less than range, we only create enough clients such that each client reads only one object. Or to hammer the same client from multiple clients, if range < clients, each client gets the entire range.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok I update the logic a little bit!
Each thread has its own client which holds tcp connection to OM.
We set the range here which would become the range of each thread/client could read/write on.
For example, If we set range = 10, start_index (index of key) = 20, threadNo. = 30, and we run the Freon test 5 times.
Then only 5 clients would process the read/write operation from key index 20 to 29 (range=10).
If we set range = 10, start_index (index of key) = 20, threadNo. = 30 (clients = 30), and we run the Freon test 40 times.
Then first 30 tests would be assign to 30 client to read/write from key index 20 to 29 (range=10).
The rest of 10 tests would be picked up by any 10 clients whoever finish their tasks first.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Then we utilize multiple nodes to separate the total range of keys the user want to test on.
|
Yes! The command will potentially read some key which doesn't exist in the cluster. |
Code can continue testing and add a metric at the end for successful reads vs. not found read. It is a valid test to look at the performance of OM to report a key does not exist. Object Stores can be bombarded with nonexistent keys, and the performance of the underlying storage to report keys that don't exist is important. LSM tree-based storage has to scan all levels before reporting a key as not found and in some ways represents the worst case performance at scale. |
Thanks Ritesh for the context!! I'll create a separate jira regarding to this! This definitely make sense!! |
agree, reading nonexistent keys is a valid test case and the tool should support it deterministically. To do that, it has to know (on its own) which key exists and which doesn't. Warp does that by having a pre-test phase in which warp creates a set of keys (10K or so) and keeps the created keys in memory for the real read test. We can also do the same for this tool, by maintaining a set of known keys that can be initialized by a pretest phase and grows with the write test. |
|
There are failures in CI, please make sure CI pass before merge @kerneltime. |
|
Sorry, I had to revert this, because checkstyle and findbugs failures affect all other PRs. Please fix the failures and open new PR. |
Sure!! I'll take a look how Warp do it and create a jira for it! |
Sorry!! I'll take a look!! |
Sorry!! I'll take a look!! thanks Attila! |
Thank you @adoroszlai! |
What changes were proposed in this pull request?
Measure r/w performance when there is a very large of amount of metadata in rocksDB, & different amount of working sets whose size are larger than cache available.
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-7199
How was this patch tested?
Robot tests, manual tests in cluster.