skip to main content
research-article
Open access

CAVE: Concurrency-Aware Graph Processing on SSDs

Published: 30 May 2024 Publication History

Abstract

Large-scale graph analytics has become increasingly common in areas like social networks, physical sciences, transportation networks, and recommendation systems. Since many such practical graphs do not fit in main memory, graph analytics performance depends on efficiently utilizing underlying storage devices. These out-of-core graph processing systems employ sharding and sub-graph partitioning to optimize for storage while relying on efficient sequential access of traditional hard disks. However, today's storage is increasingly based on solid-state drives (SSDs) that exhibit high internal parallelism and efficient random accesses. Yet, state-of-the-art graph processing systems do not explicitly exploit those properties, resulting in subpar performance.
In this paper, we develop CAVE, the first graph processing engine that optimally exploits underlying SSD-based storage by harnessing the available storage device parallelism via carefully selecting which I/Os to graph data can be issued concurrently. Thus, CAVE traverses multiple paths and processes multiple nodes and edges concurrently, achieving parallelization at a granular level. We identify two key ways to parallelize graph traversal algorithms based on the graph structure and algorithm: intra-subgraph and inter-subgraph parallelization. The first identifies subgraphs that contain vertices that can be accessed in parallel, while the latter identifies subgraphs that can be processed in their entirety in parallel. To showcase the benefit of our approach, we build within CAVE parallelized versions of five popular graph algorithms (Breadth-First Search, Depth-First Search, Weakly Connected Components, PageRank, Random Walk) that exploit the full bandwidth of the underlying device. CAVE uses a blocked file format based on adjacency lists and employs a concurrent cache pool that is essential to the parallelization of graph algorithms. By experimenting with different types of graphs on three SSD devices, we demonstrate that CAVE utilizes the available parallelism, and scales to diverse real-world graph datasets. CAVE achieves up to one order of magnitude speedup compared to the popular out-of-core systems Mosaic and GridGraph, and up to three orders of magnitude speedup in runtime compared to GraphChi.

References

[1]
Umut A Acar, Arthur Chargué raud, and Mike Rainey. 2015. A work-efficient algorithm for parallel unordered depth-first search. In Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis (SC). 67:1--67:12. https://doi.org/10.1145/2807591.2807651
[2]
T M Tariq Adnan, Md. Saiful Islam, Tarikul Islam Papon, Shourav Nath, and Muhammad Abdullah Adnan. 2022. UACD: A Local Approach for Identifying the Most Influential Spreaders in Twitter in a Distributed Environment. Soc. Netw. Anal. Min., Vol. 12, 1 (2022), 37. https://doi.org/10.1007/S13278-022-00862--3
[3]
Nitin Agrawal, Vijayan Prabhakaran, Ted Wobber, John D. Davis, Mark Manasse, and Rina Panigrahy. 2008. Design Tradeoffs for SSD Performance. In Proceedings of the USENIX Annual Technical Conference (ATC). 57--70. http://dl.acm.org/citation.cfm?id=1404019
[4]
Réka Albert and Albert-László Barabá si. 2001. Statistical mechanics of complex networks. CoRR, Vol. cond-mat/0 (2001). http://arxiv.org/abs/cond-mat/0106096
[5]
Manos Athanassoulis, Bishwaranjan Bhattacharjee, Mustafa Canim, and Kenneth A. Ross. 2012. Path Processing using Solid State Storage. In Proceedings of the International Workshop on Accelerating Data Management Systems Using Modern Processor and Storage Architectures (ADMS). 23--32. http://www.adms-conf.org/athanassoulis_adms12.pdf
[6]
Manos Athanassoulis, Subhadeep Sarkar, Tarikul Islam Papon, Zichen Zhu, and Dimitris Staratzis. 2022. Building Deletion-Compliant Data Systems. In IEEE Data Engineering Bulletin. 21--36.
[7]
Sergey Brin and Lawrence Page. 1998. The Anatomy of a Large-Scale Hypertextual Web Search Engine. Comput. Networks, Vol. 30, 1--7 (1998), 107--117. https://doi.org/10.1016/S0169--7552(98)00110-X
[8]
Feng Chen, Binbing Hou, and Rubao Lee. 2016. Internal Parallelism of Flash Memory-Based Solid-State Drives. ACM Transactions on Storage (TOS), Vol. 12, 3 (2016), 1--13. https://doi.org/10.1145/2818376
[9]
Feng Chen, Rubao Lee, and Xiaodong Zhang. 2011. Essential roles of exploiting internal parallelism of flash memory based solid state drives in high-speed data processing. In Proceedings of the IEEE International Symposium on High Performance Computer Architecture (HPCA). 266--277. https://doi.org/10.1109/HPCA.2011.5749735
[10]
Rong Chen, Jiaxin Shi, Yanzhe Chen, Binyu Zang, Haibing Guan, and Haibo Chen. 2018. PowerLyra: Differentiated Graph Computation and Partitioning on Skewed Graphs. ACM Trans. Parallel Comput., Vol. 5, 3 (2018), 13:1--13:39. https://doi.org/10.1145/3298989
[11]
Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, and Clifford Stein. 2009. Introduction to Algorithms, 3rd Edition. MIT Press. http://mitpress.mit.edu/books/introduction-algorithms
[12]
Diego Didona, Nikolas Ioannou, Radu Stoica, and Kornilios Kourtis. 2020. Toward a Better Understanding and Evaluation of Tree Structures on Flash SSDs. Proceedings of the VLDB Endowment, Vol. 14, 3 (2020), 364--377. http://www.vldb.org/pvldb/vol14/p364-didona.pdf
[13]
Shimon Even and Guy Even. 2012. Graph Algorithms (2nd ed.). Cambridge University Press. http://www.cambridge.org/us/academic/subjects/computer-science/algorithmics-complexity-computer-algebra-and-computational-g/graph-algorithms-2nd-edition
[14]
Joseph E Gonzalez, Yucheng Low, Haijie Gu, Danny Bickson, and Carlos Guestrin. 2012. PowerGraph: Distributed Graph-Parallel Computation on Natural Graphs. In Proceedings of the USENIX Symposium on Operating Systems Design and Implementation (OSDI). 17--30. https://www.usenix.org/conference/osdi12/technical-sessions/presentation/gonzalez
[15]
Joseph E Gonzalez, Reynold S Xin, Ankur Dave, Daniel Crankshaw, Michael J Franklin, and Ion Stoica. 2014. GraphX: Graph Processing in a Distributed Dataflow Framework. In Proceedings of the USENIX Symposium on Operating Systems Design and Implementation (OSDI). 599--613. https://www.usenix.org/conference/osdi14/technical-sessions/presentation/gonzalez
[16]
Wook-Shin Han, Sangyeon Lee, Kyungyeol Park, Jeong-Hoon Lee, Min-Soo Kim, Jinha Kim, and Hwanjo Yu. 2013. TurboGraph: a fast parallel graph engine handling billion-scale graphs in a single PC. In The 19th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, KDD 2013, Chicago, IL, USA, August 11--14, 2013. 77--85. https://doi.org/10.1145/2487575.2487581
[17]
Alexandru Iosup, Tim Hegeman, Wing Lung Ngai, Stijn Heldens, Arnau Prat-Pé rez, Thomas Manhardt, Hassan Chafi, Mihai Capota, Narayanan Sundaram, Michael J Anderson, Ilie Gabriel Tanase, Yinglong Xia, Lifeng Nai, and Peter A Boncz. 2016. LDBC Graphalytics: A Benchmark for Large-Scale Graph Analysis on Parallel and Distributed Platforms. Proceedings of the VLDB Endowment, Vol. 9, 13 (2016), 1317--1328. https://doi.org/10.14778/3007263.3007270
[18]
Ziyang Jiao and Bryan S Kim. 2022. Generating realistic wear distributions for SSDs. In HotStorage '22: 14th ACM Workshop on Hot Topics in Storage and File Systems, Virtual Event, June 27 - 28, 2022. 65--71. https://doi.org/10.1145/3538643.3539757
[19]
Guodong Jin, Xiyang Feng, Ziyi Chen, Chang Liu, and Semih Salihoglu. 2023. KÙ ZU Graph Database Management System. In Proceedings of the Conference on Innovative Data Systems Research (CIDR). https://www.cidrdb.org/cidr2023/papers/p48-jin.pdf
[20]
Jeong-Uk Kang, Heeseung Jo, Jinsoo Kim, and Joonwon Lee. 2006. A superblock-based flash translation layer for NAND flash memory. In Proceedings of the 6th ACM & IEEE International conference on Embedded software, EMSOFT 2006, October 22--25, 2006, Seoul, Korea. 161--170. https://doi.org/10.1145/1176887.1176911
[21]
U Kang, Hanghang Tong, Jimeng Sun, Ching-Yung Lin, and Christos Faloutsos. 2011. GBASE: a scalable and general graph management system. In Proceedings of the 17th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, San Diego, CA, USA, August 21--24, 2011. 1091--1099. https://doi.org/10.1145/2020408.2020580
[22]
Donald E. Knuth. 2022. "Weak components", The Art of Computer Programming, Volume IV, Pre-Fascicle 12A: Components and Traversal. 11--14 pages. https://cs.stanford.edu/ knuth/fasc12a.pdf
[23]
Seongyun Ko and Wook-Shin Han. 2018. TurboGraph: A Scalable and Fast Graph Analytics System. In Proceedings of the ACM SIGMOD International Conference on Management of Data. 395--410. https://doi.org/10.1145/3183713.3196915
[24]
Aapo Kyrola, Guy E Blelloch, and Carlos Guestrin. 2012. GraphChi: Large-Scale Graph Computation on Just a PC. In Proceedings of the USENIX Symposium on Operating Systems Design and Implementation (OSDI). 31--46. https://www.usenix.org/conference/osdi12/technical-sessions/presentation/kyrola
[25]
Jure Leskovec and Andrej Krevl. 2014. SNAP Datasets: Stanford Large Network Dataset Collection. http://snap.stanford.edu/data.
[26]
Hang Liu and H Howie Huang. 2017. Graphene: Fine-Grained IO Management for Graph Computing. In Proceedings of the USENIX Conference on File and Storage Technologies (FAST). 285--300. https://www.usenix.org/conference/fast17/technical-sessions/presentation/liu
[27]
Ning Liu, Dong-sheng Li, Yiming Zhang, and Xiong-lve Li. 2020. Large-scale graph processing systems: a survey. Frontiers Inf. Technol. Electron. Eng., Vol. 21, 3 (2020), 384--404. https://doi.org/10.1631/FITEE.1900127
[28]
László Lová sz. 1993. Random walks on graphs. Combinatorics, Paul erdos is eighty, Vol. 2, 1--46 (1993), 4.
[29]
Yucheng Low, Joseph Gonzalez, Aapo Kyrola, Danny Bickson, Carlos Guestrin, and Joseph M Hellerstein. 2012. Distributed GraphLab: A Framework for Machine Learning in the Cloud. Proceedings of the VLDB Endowment, Vol. 5, 8 (2012), 716--727. https://doi.org/10.14778/2212351.2212354
[30]
Steffen Maass, Changwoo Min, Sanidhya Kashyap, Woon-Hak Kang, Mohan Kumar, and Taesoo Kim. 2017. Mosaic: Processing a Trillion-Edge Graph on a Single Machine. In Proceedings of the Twelfth European Conference on Computer Systems, EuroSys 2017, Belgrade, Serbia, April 23--26, 2017. 527--543. https://doi.org/10.1145/3064176.3064191
[31]
Grzegorz Malewicz, Matthew H Austern, Aart J C Bik, James C Dehnert, Ilan Horn, Naty Leiser, and Grzegorz Czajkowski. 2010. Pregel: a system for large-scale graph processing. In Proceedings of the ACM SIGMOD International Conference on Management of Data. 135--146. https://doi.org/10.1145/1807167.1807184
[32]
Bo Mao, Suzhen Wu, and Lide Duan. 2018. Improving the SSD Performance by Exploiting Request Characteristics and Internal Parallelism. IEEE Trans. on CAD of Integrated Circuits and Systems, Vol. 37, 2 (2018), 472--484. https://doi.org/10.1109/TCAD.2017.2697961
[33]
Kiran Kumar Matam, Gunjae Koo, Haipeng Zha, Hung-Wei Tseng, and Murali Annavaram. 2019. GraphSSD: graph semantics aware SSD. In Proceedings of the 46th International Symposium on Computer Architecture, ISCA 2019, Phoenix, AZ, USA, June 22--26, 2019. 116--128. https://doi.org/10.1145/3307650.3322275
[34]
Junoh Moon, Mincheol Kang, Wonyoung Lee, and Soontae Kim. 2022. Salvaging Runtime Bad Blocks by Skipping Bad Pages for Improving SSD Performance. In Proceedings of the Design, Automation & Test in Europe Conference & Exhibition (DATE). 576--579. https://doi.org/10.23919/DATE54114.2022.9774677
[35]
Patrick E. O'Neil, Edward Cheng, Dieter Gawlick, and Elizabeth J. O'Neil. 1996. The log-structured merge-tree (LSM-tree). Acta Informatica, Vol. 33, 4 (1996), 351--385. https://doi.org/10.1007/s002360050048
[36]
Tarikul Islam Papon. 2024. Enhancing Data Systems Performance by Exploiting SSD Concurrency & Asymmetry. In Proceedings of the IEEE International Conference on Data Engineering (ICDE) PhD Symposium.
[37]
Tarikul Islam Papon and Manos Athanassoulis. 2021a. A Parametric I/O Model for Modern Storage Devices. In Proceedings of the International Workshop on Data Management on New Hardware (DAMON). https://doi.org/10.1145/3465998.3466003
[38]
Tarikul Islam Papon and Manos Athanassoulis. 2021b. The Need for a New I/O Model. In Proceedings of the Biennial Conference on Innovative Data Systems Research (CIDR).
[39]
Tarikul Islam Papon and Manos Athanassoulis. 2023. ACEing the Bufferpool Management Paradigm for Modern Storage Devices. In Proceedings of the IEEE International Conference on Data Engineering (ICDE).
[40]
Stan Park and Kai Shen. 2009. A performance evaluation of scientific I/O workloads on Flash-based SSDs. In Proceedings of the IEEE International Conference on Cluster Computing (CLUSTER). 1--5. https://doi.org/10.1109/CLUSTR.2009.5289148
[41]
Stan Park and Kai Shen. 2012. FIOS: a fair, efficient flash I/O scheduler. In Proceedings of the USENIX Conference on File and Storage Technologies (FAST). 13.
[42]
Roger A Pearce, Maya B Gokhale, and Nancy M Amato. 2010. Multithreaded Asynchronous Graph Traversal for In-Memory and Semi-External Memory. In Conference on High Performance Computing Networking, Storage and Analysis, SC 2010, New Orleans, LA, USA, November 13--19, 2010. 1--11. https://doi.org/10.1109/SC.2010.34
[43]
Gregory Popovitch. 2020. The Parallel Hashmap. https://github.com/greg7mdp/parallel-hashmap (2020).
[44]
Amitabha Roy, Laurent Bindschaedler, Jasmina Malicevic, and Willy Zwaenepoel. 2015. Chaos: scale-out graph processing from secondary storage. In Proceedings of the ACM Symposium on Operating Systems Principles (SOSP). 410--424. https://doi.org/10.1145/2815400.2815408
[45]
Amitabha Roy, Ivo Mihailovic, and Willy Zwaenepoel. 2013. X-Stream: edge-centric graph processing using streaming partitions. In Proceedings of the ACM Symposium on Operating Systems Principles (SOSP). 472--488. https://doi.org/10.1145/2517349.2522740
[46]
Subhadeep Sarkar, Tarikul Islam Papon, Dimitris Staratzis, and Manos Athanassoulis. 2020. Lethe: A Tunable Delete-Aware LSM Engine. In Proceedings of the ACM SIGMOD International Conference on Management of Data. 893--908. https://doi.org/10.1145/3318464.3389757
[47]
Arman Shehabi, Sarah Smith, Dale Sartor, Richard Brown, Magnus Herrlin, Jonathan Koomey, Eric Masanet, Nathaniel Horner, Inês Azevedo, and William Lintner. 2016. United States Data Center Energy Usage Report. Ernest Orlando Lawrence Berkeley National Laboratory, Vol. LBNL-10057 (2016). https://eta.lbl.gov/publications/united-states-data-center-energy
[48]
Kai Shen and Stan Park. 2013. FlashFQ: A Fair Queueing I/O Scheduler for Flash-Based SSDs. In Proceedings of the USENIX Annual Technical Conference (ATC). 67--78.
[49]
Barak Shoshany. 2021. BS::thread_pool: a fast, lightweight, and easy-to-use C17 thread pool library. https://github.com/bshoshany/thread-pool (2021).
[50]
Julian Shun and Guy E Blelloch. 2013. Ligra: a lightweight graph processing framework for shared memory. In ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming, PPoPP '13, Shenzhen, China, February 23--27, 2013. 135--146. https://doi.org/10.1145/2442516.2442530
[51]
Narayanan Sundaram, Nadathur Satish, Md. Mostofa Ali Patwary, Subramanya Dulloor, Michael J Anderson, Satya Gautam Vadlamudi, Dipankar Das, and Pradeep Dubey. 2015. GraphMat: High performance graph analytics made productive. Proceedings of the VLDB Endowment, Vol. 8, 11 (2015), 1214--1225. https://doi.org/10.14778/2809974.2809983
[52]
Kai Wang, Aftab Hussain, Zhiqiang Zuo, Guoqing Xu, and Ardalan Amiri Sani. 2017. Graspan: A Single-machine Disk-based Graph System for Interprocedural Static Analyses of Large-scale Systems Code. In Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS). 389--404. https://doi.org/10.1145/3037697.3037744
[53]
Kai Wang, Zhiqiang Zuo, John Thorpe, Tien Quang Nguyen, and Guoqing Harry Xu. 2018. RStream: Marrying Relational Algebra with Streaming for Efficient Graph Mining on A Single Machine. In Proceedings of the USENIX Symposium on Operating Systems Design and Implementation (OSDI). 763--782. https://www.usenix.org/conference/osdi18/presentation/wang
[54]
Shoujin Wang, Liang Hu, Yan Wang, Xiangnan He, Quan Z Sheng, Mehmet A Orgun, Longbing Cao, Francesco Ricci, and Philip S Yu. 2021. Graph Learning based Recommender Systems: A Review. In Proceedings of the Thirtieth International Joint Conference on Artificial Intelligence, IJCAI 2021, Virtual Event / Montreal, Canada, 19--27 August 2021. 4644--4652. https://doi.org/10.24963/ijcai.2021/630
[55]
Wenlei Xie, Guozhang Wang, David Bindel, Alan J Demers, and Johannes Gehrke. 2013. Fast Iterative Graph Computation with Block Updates. Proceedings of the VLDB Endowment, Vol. 6, 14 (2013), 2014--2025. https://doi.org/10.14778/2556549.2556581
[56]
Xifeng Yan, Philip S Yu, and Jiawei Han. 2004. Graph Indexing: A Frequent Structure-based Approach. In Proceedings of the ACM SIGMOD International Conference on Management of Data. 335--346. https://doi.org/10.1145/1007568.1007607
[57]
Kaiyuan Zhang, Rong Chen, and Haibo Chen. 2015. NUMA-aware graph-structured analytics. In Proceedings of the 20th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming, PPoPP 2015, San Francisco, CA, USA, February 7--11, 2015. 183--193. https://doi.org/10.1145/2688500.2688507
[58]
Yu Zhang, Xiaofei Liao, Hai Jin, Lin Gu, Ligang He, Bingsheng He, and Haikun Liu. 2018. CGraph: A Correlations-aware Approach for Efficient Concurrent Iterative Graph Processing. In Proceedings of the USENIX Annual Technical Conference (ATC). 441--452. https://www.usenix.org/conference/atc18/presentation/zhang-yu
[59]
Peixiang Zhao and Jiawei Han. 2010. On Graph Query Optimization in Large Networks. Proceedings of the VLDB Endowment, Vol. 3, 1 (2010), 340--351. https://doi.org/10.14778/1920841.1920887
[60]
Da Zheng, Disa Mhembere, Randal C Burns, Joshua T Vogelstein, Carey E Priebe, and Alexander S Szalay. 2015. FlashGraph: Processing Billion-Node Graphs on an Array of Commodity SSDs. In Proceedings of the USENIX Conference on File and Storage Technologies (FAST). 45--58. https://www.usenix.org/conference/fast15/technical-sessions/presentation/zheng
[61]
Xiaowei Zhu, Wenguang Chen, Weimin Zheng, and Xiaosong Ma. 2016. Gemini: A Computation-Centric Distributed Graph Processing System. In Proceedings of the USENIX Symposium on Operating Systems Design and Implementation (OSDI). 301--316. https://www.usenix.org/conference/osdi16/technical-sessions/presentation/zhu
[62]
Xiaowei Zhu, Wentao Han, and Wenguang Chen. 2015. GridGraph: Large-Scale Graph Processing on a Single Machine Using 2-Level Hierarchical Partitioning. In Proceedings of the USENIX Annual Technical Conference (ATC). 375--386. https://www.usenix.org/conference/atc15/technical-session/presentation/zhu
[63]
Zichen Zhu, Siqiang Luo, Xiaokui Xiao, Yin Yang, Dingheng Mo, and Yufei Han. 2022. VC-Tune: Tuning and Exploring Distributed Vertex-Centric Graph Systems. In Proceedings of the IEEE International Conference on Data Engineering (ICDE). 3142--3145. https://doi.org/10.1109/ICDE53745.2022.00283

Recommendations

Comments

Information & Contributors

Information

Published In

cover image Proceedings of the ACM on Management of Data
Proceedings of the ACM on Management of Data  Volume 2, Issue 3
SIGMOD
June 2024
1953 pages
EISSN:2836-6573
DOI:10.1145/3670010
Issue’s Table of Contents
This work is licensed under a Creative Commons Attribution International 4.0 License.

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 30 May 2024
Published in PACMMOD Volume 2, Issue 3

Author Tags

  1. BFS
  2. DFS
  3. SSD
  4. WCC
  5. concurrency
  6. graph traversal
  7. internal parallelism

Qualifiers

  • Research-article

Funding Sources

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • 0
    Total Citations
  • 488
    Total Downloads
  • Downloads (Last 12 months)488
  • Downloads (Last 6 weeks)85
Reflects downloads up to 06 Feb 2025

Other Metrics

Citations

View Options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Login options

Full Access

Figures

Tables

Media

Share

Share

Share this Publication link

Share on social media