首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

我用Awesome-Graphs看论文:解读X-Stream

编程知识
2024年07月30日 23:55

X-Stream论文《X-Stream: Edge-centric Graph Processing using Streaming Partitions》

前面通过文章《论文图谱当如是:Awesome-Graphs用200篇图系统论文打个样》向大家介绍了论文图谱项目Awesome-Graphs,并分享了Google的Pregel以及OSDI 2012上的PowerGraph。这次向大家分享发表在SOSP 2013上的另一篇经典图计算框架论文X-Stream,构建了单机上基于外存的Scatter-Gather图处理框架。

对图计算技术感兴趣的同学可以多做了解,也非常欢迎大家关注和参与论文图谱的开源项目:

提前感谢给项目点Star的小伙伴,接下来我们直接进入正文!

摘要

  • X-Stream是一个单机共享内存的既可以处理内存图也可以处理外存图的图处理系统。
  • 特点:
    • 以边为中心的计算模型。
    • 流式访问无序边,而不是随机访问。

1. 介绍

传统的以点为中心的处理:

  • scatter函数将点状态传播给邻居点。
  • gather函数累计更新,并重新计算点状态。


顺序/随机访问不同存储介质的性能差异:

  • 磁盘:500x
  • SSD:30x
  • 内存:1.8x - 4.6x

X-Stream的以边为中心的处理:

  • scatter/gather在边/更新上迭代,而不是在点上迭代。
  • 使用流式分区缓解点集的随机访问。
  • 将边和源点划分到同一个分区。


X-Stream主要贡献:

  • 边中心处理模型。
  • 流式分区。
  • 不同存储介质上的良好扩展性。
  • 高性能。

2. X-Stream处理模型

API设计:

  • Scatter:根据边和源点,计算目标点更新。
  • Gather:根据目标点收到更新,重新计算目标点状态。

2.1 流

X-Stream使用流的方式执行Scatter+Gather。边和更新是顺序访问的,但是点是随机访问的。

2.2 流式分区

流式分区包含:

  • 点集:分区上的点子集。
  • 边列表:源点的边。
  • 更新列表:目标点的更新。

2.3 分区上的Scatter-Gather

Scatter + Shuffle + Gather:

2.4 分区的大小和数量

  • 一方面为了让点集合尽量加载到快存储,分区数不能太小。
  • 另一方面为了最大化利用慢存储的顺序读写能力,分区数不能太大。
  • 通过固定分区点集合大小的方式进行分区。

2.5 API限制和扩展

  • 虽然不能遍历点上的所有边,但是可以对所有的点进行迭代,并提供自定义的点函数。
  • 不仅限于支持scatter-gather模型,也可以支持semi-streaming、W-Stream模型等。

3. 基于外存的流式引擎

每个流式分区维护三个磁盘文件:点文件、边文件、更新文件。
难点在于实现shuffle节点的顺序访问,通过合并scatter+shuffle阶段,更新写入到内存buffer,buffer满时执行内存shuffle追加到目标分区磁盘文件。

3.1 内存数据结构

stream buffer设计:

基于stream buffer,一个buffer用于存储scatter的更新,另一个存储内存shuffle的结果。

3.2 操作

初始化边分区可以使用内存shuffle方式实现。

3.3 磁盘IO

  • X-Stream的stream buffer采用异步Direct I/O,而不是OS页面缓存(4K)。
  • 预读和块写提高磁盘利用率,但是需要额外的stream buffer。
  • 使用RAID实现读写分离。
  • 使用SSD存储TRIM操作实现truncate。

3.4 分区数量

假设分区的更新满足均匀分布,则有如下内存公式:

  • N:点集合内存总量。
  • S:最大带宽IO请求包大小。
  • K:分区数。
  • M:内存总量。

4. 基于内存的流式引擎

4.1 并行Scatter-Gather

  • 每个线程写自由缓存,再统一flush到贡献的输出数据块。
  • 通过worker stealing避免倾斜。

4.2 并行多阶段shuffle

  • 将分区使用树形结构组织起来,分支因子F(扇出度大小),树的每一层对应一步shuffle。
  • 因此对于K个分区,一共需要logFK步shuffle。
  • 使用两个stream buffer轮换输入输出角色实现shuffle。
  • 论文将F设置为CPU cache的可用行数。

4.3 磁盘流的分层

内存引擎逻辑上在外存引擎上层,外存引擎可以自由选择使用内存引擎处理的分区数量,以最大化利用内存和计算资源。

5. 评估

  • 256M内存cache大小,在16core时达到最大内存带宽25GB/s。
  • 16M IO请求包大小。
From:https://www.cnblogs.com/fanzhidongyzby/p/18332132/x-stream
本文地址: http://shuzixingkong.net/article/615
0评论
提交 加载更多评论
其他文章 认识netty的基本组件
Java NIO VS Netty 有了 Java NIO,而且 Netty 也是基于 Java NIO 实现,那么为什么不能直接用 Java NIO 来实现网络通信模块呢? 接下来我解释一下原因。 如果我们用 Java NIO 来开发网络通信组件,势必会直接面对很多网络通信的问题。比如,
认识netty的基本组件
如何自动实现本地AD中禁用的用户从地址列表中隐藏掉?
我的博客园:https://www.cnblogs.com/CQman/ 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 需求信息: 用户本地AD用户通过ADConnect同步到O365,用户想实现在本地已做同步的OU中禁用某一用户后,其可以自动实现把该用户从地址列表中隐藏掉。 用户的ADCo
如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉?
FP分数规划在无线通信中的应用
更多精彩内容请关注微信公众号 ‘优化与算法’ 前言 在数学优化中,分数规划是线性分式规划的推广。分数规划中的目标函数是两个函数的比值,这两个函数通常是非线性的。要优化的比值通常描述系统的某种效率。 1. Concave-convex FP问题 1.1 基本形式 一维问题。符号说明:用R表示实数集,用
FP分数规划在无线通信中的应用 FP分数规划在无线通信中的应用 FP分数规划在无线通信中的应用
[python] 启发式算法库scikit-opt使用指北
scikit-opt是一个封装了多种启发式算法的Python代码库,可以用于解决优化问题。scikit-opt官方仓库见:scikit-opt,scikit-opt官网文档见:scikit-opt-doc。 scikit-opt安装代码如下: pip install scikit-opt # 调用s
[python] 启发式算法库scikit-opt使用指北 [python] 启发式算法库scikit-opt使用指北 [python] 启发式算法库scikit-opt使用指北
一款基于Fluent设计风格、现代化的WPF UI控件库
前言 今天大姚给大家分享一款基于Fluent设计风格、开源(MIT License)、现代化的WPF UI控件库,它提供直观的设计、主题、导航和全新的沉浸式控件,全部都是原生且无缝地集成在一起:WPF UI。 WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Window
一款基于Fluent设计风格、现代化的WPF UI控件库 一款基于Fluent设计风格、现代化的WPF UI控件库 一款基于Fluent设计风格、现代化的WPF UI控件库
《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇
1.简介 有些页面元素的生命周期如同流星一闪,昙花一现。我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒。我们就来判断元素是否显示出现过。 在操作元素之前,可以先判断元素的状态。判断元素操作状态也可以用于断言。 2.常用的元素判断方法 2.1page对象调用的判断方法 pa
《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇 《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇 《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇
一文带你了解CAP的全部特性,你学会了吗?
目录前言消息发布携带消息头设置消息前缀原生支持的延迟消息并行发布消息事务消息事务消息发送事务消息消费事务补偿消息处理序列化过滤器消息重试多线程处理自动恢复/重连分布式存储锁消息版本隔离优化的雪花算法消息自动清理消费者特性Attribute 订阅多Attribute 订阅通配符订阅异步订阅多程序集订阅
一文带你了解CAP的全部特性,你学会了吗? 一文带你了解CAP的全部特性,你学会了吗?
golang对遍历目录操作的优化
一转眼go1.23都快发布了,时间过得真快。 不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。 对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。 本文默认Linux环境,不过这个优
golang对遍历目录操作的优化 golang对遍历目录操作的优化