[LU-10026] Client-side data compression Created: 23/Sep/17 Updated: 25/Oct/23 |
|
| Status: | Open |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | Lustre 2.17.0 |
| Type: | New Feature | Priority: | Minor |
| Reporter: | Andreas Dilger | Assignee: | Artem Blagodarenko |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | patch | ||
| Attachments: |
|
||||||||||||
| Issue Links: |
|
||||||||||||
| Rank (Obsolete): | 9223372036854775807 | ||||||||||||
| Description |
|
Due to the increasing gap between computational speed, network speed and storage capacity, it has become necessary to investigate data reduction techniques. Storage systems have become a significant part of the total cost of ownership due to the increased amount of storage devices, their associated acquisition cost and energy consumption. Ultimately, we are aiming for compression support in Lustre at multiple levels:
Compression will be completely transparent to the applications because it will be performed by the client and/or server on their behalf. However, it will be possible for users to tune Lustre's behavior to obtain the best performance/compression/etc. When using client-side compression, the single stream performance bottleneck will directly benefit from the compression. Initial studies have shown that a compression ratio of 1.5 can be achieved for scientific data using lz4. |
| Comments |
| Comment by Gerrit Updater [ 06/Dec/17 ] |
|
Anna Fuchs (anna.fuchs@informatik.uni-hamburg.de) uploaded a new patch: https://review.whamcloud.com/30393 |
| Comment by Anna Fuchs [ 06/Dec/17 ] |
|
The patch contains a first version of application-transparent client-side compression (write path). The data is compressed on the client, transferred compressed over The current version works with clients and object servers built The size of compression pool is currently static. For test purposes, please, change cmp_pool_init(number_of_buffers, size_of_buffer_in_kb) to an appropriate size in osc/osc_request.c:osc_init() and target/tgt_main.c:tgt_mod_init(). Also, set ppchunk (pages per chunk) in osc_request.c:calc_chunks() to a desired value for testing. See TODO 20. Approach: Compression is introduced on the client side just before the data transfer happens. Every chunk is compressed separately and currently serially. Parallel compression within In this version, the data is supposed to be decompressed on the server. In future version it On the one side, it is the chunk descriptor. There exists 1 chunk descriptor per chunk. This If the data is supposed to be stored compressed, we still need that information to be present. The read path in not affected in this version and the data is read like in an unpatched build. It is not planned to compress any data transfer between clients and MDSs. This version supports only lz4. Technical details: Compression forces the use of at least one additional memory buffer for de-/compressed data. Compression process (client-side). Mainly in osc_request.c:compressed_osc_brw_prep_request: 1. Input data array (pga), page_count many pages. Transfer. Main changes in tgt_handler.c:tgt_brw_write_compressed: 1. Receive RPC. Decompression process (server-side). Main changes in tgt_handler.c:tgt_brw_write_compressed: 1. Input data in lnb[logical_page_count] array. Since memory allocation (especially contiguous) in the kernel is not only expensive, but also not The buffers can be loaned from pool only in fixed size. Once you request a smaller buffer, you would The current state is work in progress. There is a long list of things to be done. Some of them are TODOs: 1. Style check (checkpatch.pl) 2. The compression pool already provides the ability to loan several buffers atomically to prevent deadlocks 3. Discuss whether the chunk descriptor can be present even if the build was configured without compression. Otherwise, isolate everything that affects compression. 4. Add/improve error handling. Check return values on failure and prepare fallbacks. Add debugging messages. 5. The header size within the data should be discussed. 6. Refactoring and merging duplicated functions into original ones as far as possible (compressed_osc_brw_prep_request, tgt_brw_write_compressed, osd_bufs_get_compressed_write, etc.) 7. Shrink chunk descriptor to really necessary values, since it is sent over the network 8. Add read path. 9. Currently there are no compatibility checks for the compression feature. The current version is based on the 10. Mixing of different algos of the same type should be possible chunk-wise to enable more flexibility for the future features. 11. Currently, compression is only controlled via the configuration setting --enable-compression when building. 12. Expand compression feature to store the data compressed. 13. Release original pga-pages on the client. See comments in osc_request.c:osc_release_cppga 14. Memory summary on the server might not recognize all the used memory. See comments in ofd_io.c:ofd_preprw_write_compressed 15. Minor TODOs in the code comments 16. Write compression tests (build and functionality) for Gerrit 17. Support read-modify-write. 18. In the near future we will support an algorithm than can handle page arrays as in- and output (pga-able) instead of contiguous buffers (cbuf-able). 19. We should restrict mixing of cbuf-able and pga-able algorithms. In theory, mixing all algorithm for every chunk is possible, in practice it results 20. Get/set correct values for 21. Dynamic decision making for compression usage, algorithms, strategy, etc. Further, see the project description and updated information at http://wiki.lustre.org/Enhanced_Adaptive_Compression_in_Lustre |
| Comment by Gerrit Updater [ 05/Apr/19 ] |
|
Anna Fuchs (anna.fuchs@informatik.uni-hamburg.de) uploaded a new patch: https://review.whamcloud.com/34603 |
| Comment by Anna Fuchs [ 05/Apr/19 ] |
|
We have taken care of some of the todos and split up the feature into multiple patches. The first of the series adds compression support to the build system and a backport for the lz4 module needed for kernel version <3.11. The remaining patches will follow soon and add support for the page buffer pool, basic data structures, client-side compression and server-side handling. |
| Comment by Gerrit Updater [ 12/Apr/19 ] |
|
Anna Fuchs (anna.fuchs@informatik.uni-hamburg.de) uploaded a new patch: https://review.whamcloud.com/34649 |
| Comment by Gerrit Updater [ 12/Apr/19 ] |
|
|
| Comment by Gerrit Updater [ 12/Apr/19 ] |
|
Anna Fuchs (anna.fuchs@informatik.uni-hamburg.de) uploaded a new patch: https://review.whamcloud.com/34651 |
| Comment by Gerrit Updater [ 06/May/19 ] |
|
Anna Fuchs (anna.fuchs@informatik.uni-hamburg.de) uploaded a new patch: https://review.whamcloud.com/34810 |
| Comment by Gerrit Updater [ 08/May/19 ] |
|
Anna Fuchs (anna.fuchs@informatik.uni-hamburg.de) uploaded a new patch: https://review.whamcloud.com/34831 |
| Comment by Sebastien Buisson [ 13/Jun/22 ] |
|
intel_hub_isc17.pdf |
| Comment by Andreas Dilger [ 07/Dec/22 ] |
|
Hi Anna, Michael, Matt, |
| Comment by Andreas Dilger [ 09/Dec/22 ] |
|
Links from Anna with publicly available data: https://www.earthdata.nasa.gov/eosdis/daacs |
| Comment by Gerrit Updater [ 19/May/23 ] |
|
"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/49170/ |
| Comment by Gerrit Updater [ 18/Aug/23 ] |
|
"Zhenyu Xu <bobijam@hotmail.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/51978 |
| Comment by Gerrit Updater [ 06/Sep/23 ] |
|
"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/51978/ |
| Comment by Gerrit Updater [ 03/Oct/23 ] |
|
"Sarah Liu <sarah@whamcloud.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/52572 |
| Comment by Gerrit Updater [ 25/Oct/23 ] |
|
"Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/52572/ |