-
Notifications
You must be signed in to change notification settings - Fork 302
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
Wangdi/google 26 dfuse 1 #15653
base: google/2.6
Are you sure you want to change the base?
Wangdi/google 26 dfuse 1 #15653
Conversation
When dfuse sees I/O as well-aligned 128k reads then read MB at a time and cache the result allowing for faster read bandwidth for well behaved applicaions and large files. Create a new in-memory descriptor for file contents, pull in a whole descriptor on first read and perform all other reads from the same result. This should give much higher bandwidth for well behaved applications and should be easy to extend to proper readahead in future. Signed-off-by: Ashley Pittman <ashley.m.pittman@intel.com>
This only serves to add confusion at this point. Signed-off-by: Ashley Pittman <ashley.m.pittman@intel.com>
Create a active_inode struct and allocate it for all inodes which have more than one open handle. This allows us to share state/caching data across open handles easier and to better support concurrent readers. Future work here will improve performance for concurrent readers when caching is used, and allow us to make the in-memory inode struct smaller which will save memory. Signed-off-by: Ashley Pittman ashley.m.pittman@intel.com
Attach pre-read buffers to the inode rather than open file handle. This code was written with the idea that a client would open and read the file and that would populate the kernel cache however in practice there are often concurrent readers for the same file and what was happening was that the first-to-open was doing the pre-read but this was often not the first process to perform a read and furthermore often there would be multiple reads for the same regions, all of which would hit the network. Use the "active" entry on the inode to launch a pre-read on first open and have any request on any file handle use the pre-read buffer for replies if possible. In addition, when a read is to be serviced from the pre-read buffer but the data is not yet in memory rather than spinning on a lock consuming a fuse thread add a descriptor to a callback list so that the thread is released and the reply is made sooner when the data is available. This greatly reduces the number of duplicate network round-trip reads for workloads where multiple clients are trying to fetch the same data, something that we see a lot in some applications. Signed-off-by: Ashley Pittman ashley.m.pittman@intel.com
From #15298 Handle concurrent read in the chunk_read code. Rather than assuming each slot only gets requested once save the slot number as part of the request and handle multiple requests. This corrects the behaviour and avoids a crash when multiple readers read the same file concurrently and improves the performance in this case. Required-githooks: true Signed-off-by: Ashley Pittman <ashley.m.pittman@intel.com>
From #15528 If a read matches a current outstanding read then simply connect the two and when there's a reply from the network then respond to both requests. Ashley Pittman <ashley.m.pittman@intel.com> Required-githooks: true
Fix a bug where linear read was not correctly saved to the directory. Improve the NLT testing of pre_read to not just invoke it but to use the statistics to verify correct operation. Required-githooks: true Signed-off-by: Ashley Pittman <ashley.m.pittman@intel.com>
Add readahead RPC in the open read list earlier to make sure the following read will not send duplicate RPC. Required-githooks: true Signed-off-by: Di Wang <ddiwang@google.com>
Set dcache update timer for initialize timer, otherwise keep_cache flag will not be set for opendir, then concurrent opendir might truncate the directory page cache unnecessary. Set valid timer for inode entry created by readdirplus, otherwise the inode might needs to be lookup again. Required-githooks: true Signed-off-by: Di Wang <ddiwang@google.com>
Do not need object open in dfuse_cb_open, since if the following fetch only needs to read from the kernel page cache, then the object layout is not needed at all. Run-GHA: true Allow-unstable-test: true Required-githooks: true Signed-off-by: Di Wang <ddiwang@google.com>
Errors are component not formatted correctly,Ticket number prefix incorrect,PR title is malformatted. See https://daosio.atlassian.net/wiki/spaces/DC/pages/11133911069/Commit+Comments,Unable to load ticket data |
Test stage NLT on EL 8.8 completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-15653/1/execution/node/816/log |
Before requesting gatekeeper:
Features:
(orTest-tag*
) commit pragma was used or there is a reason documented that there are no appropriate tags for this PR.Gatekeeper: