Reading and Writing Performance Optimization of Cross-Language FUSE Framework

GU Rong,LUO Yi-li,QIU Ling-wei,WANG Zhao-kang,DAI Hai-peng,HUANG Yi-hua
DOI: https://doi.org/10.12263/dzxb.20220372
2023-01-01
Abstract:Big data analytical applications like deep learning-based AI applications more and more rely on distributed file system to store and manage large scale data sets. File systems often need to provide standard POSIX interfaces to enhance their access compatibility with upper-layer applications. However, it is complicated to develop POSIX-compatible file systems in kernel space. In recent years, FUSE(File System in User Space) has been used by many well-known file systems, including Alluxio, Ceph, etc., because it significantly simplifies the file system development. The popular FUSE library libfuse is developed in the C language. However, the popular distributed file systems(like HDFS and Alluxio) for big data applications are developed with the Java language. To make the Java-based distributed file systems use the FUSE mechanism, the cross-language FUSE frameworks are needed to bridge the gap, which becomes a potential performance bottleneck. The cross-language FUSE framework uses a cross-programming language function callback mechanism to enable the C functions of the FUSE library to call the programming interface provided by the distributed file system in Java. In this way, we can provide the access to the standard POSIX interface for the Java-based distributed file systems. However,the existing cross-language FUSE frameworks are inefficient in performance. It makes the data I/O in data-intensive applications(like deep learning and big data analysis) occupy noticeable proportion of their execution costs. To address the problem, we first systematically evaluate the performance of the widely-used cross-language FUSE framework, and find the bottlenecks of throughput performance in high concurrency and small file scenarios. We then analyze the bottlenecks of the cross-language FUSE framework from multiple perspectives, and propose several directions for optimizing the cross-language FUSE framework. According to the optimization directions, we design and implement JNI-FUSE, an efficient crosslanguage FUSE framework. In JNI-FUSE, we propose the defer detach and meta cache techniques to reduce execution costs of cross-programming language function callbacks. Experiment results show that JNI-FUSE improves the average framework performance from 1.15 times to 6.04 times compared to the cutting-edge cross-language FUSE framework JNR-FUSE. JNI-FUSE improves the end-to-end performance by 1.90 time to 2.71 times on average, and accelerates the deep learning training by 1.06 times to 1.73 times on average compared to JNR-FUSE. JNI-FUSE has been accepted and integrated by the well-known open-source distributed file system Alluxio due to is good performance.
What problem does this paper attempt to address?