DynaMix - Dynamic Mobile Device Integration for Efficient Cross-device Resource Sharing 论文笔记
Introduction
跨设备资源共享提供了利用远程设备资源的能力。这样就能通过访问大量异构设备(如智能手机、可穿戴设备、智能电视),扩展移动设备的能力,提供多设备服务。但是现有的资源共享机制面临三个问题:
共享的资源覆盖范围有限
涉及使用多个设备的复杂编程工作
现有方案无法优化任务的放置,因此在低速无线网络上运行时会遭受损失
文章提出DynaMix,这是一种新颖的框架,可实现有效的跨设备资源共享。
首先,DynaMix使用分布式共享内存(DSM)和IO请求转发来完全集成各种资源。DSM集成了CPU和内存,而IO请求转发集成了IO资源。
其次,由于DSM和IO请求转发支持在应用程序级别以下的低级资源共享,因此DynaMix不需要应用程序知道多个设备,从而实现了良好的可编程性。
第三,DynaMix通过监视每台设备的资源使用情况和设备间的网络使用情况来最大程度地减少设备间的通信,从而动态地在设备之间重新分配任务; 此外,DynaMix通过监视远程设备的连通性并获取应用程序状态的检查点来支持远程设备的无缝即插即用。
现有方案的局限性
IO请求转发
IO转发是一种利用远程IO资源的方式,通过转发IO请求到目的设备,然后目的设备代表请求设备访问请求的资源。请求转发方案可以在不同层(例如,内核,平台,用户)中转发IO请求。
但是,现有请求转发方案的适用性受到如下限制。首先,它们仅支持用于IO资源的共享。接下来,他们需要精心设计的抽象层来支持单设备应用程序。此外,除非他们以优化的任务分配访问资源,否则它们可能会承受严重的网络开销。(将视频解码的工作放到播放设备可以减少网络数据的传输)。
Dynamix Framework
首先,为了减轻程序员的负担,DynaMix不需要任何特殊的编程概念,也不需要特殊的API,只有基础内存一致性模型除外。程序员可以在具有多线程库的单个设备上编写普通的多线程程序,而无需担心远程资源。
其次,用户可以选择所需的资源以在运行时执行DynaMix应用程序。 DynaMix框架可动态集成所选资源,并构建一个称为“DynaMix设备”的虚拟设备。
第三,DynaMix检测网络流量并自动在设备之间重新分配任务,以最大程度地减少网络开销。在DynaMix设备中,DynaMix应用程序的任务(即线程)可以自由访问远程资源,也可以迁移以实现最佳任务重新分配。
Dynamix Framework 有两个基础操作模型,并需要为每个设备安装两个软件,资源集成器和线程迁移器:
远程资源集成
安装在每台设备上的资源集成器将共同应用DSM模型和内核级IO请求转发,以集成计算(例如CPU,内存)和IO(例如显示,存储)资源。这种机制使DynaMix能够满足理想的资源共享的两个设计目标:单设备编程模型和高资源覆盖率。
资源集成器分三个步骤执行集成。首先,资源集成器收集由远程资源集成器广播的远程资源的信息(例如,CPU频率,存储器大小,IO类型),并使资源可用于用户应用程序。其次,如果应用程序尝试使用远程资源,则资源集成器会将请求转发给目标资源集成器。第三,目标资源集成器通过共享内存将计算结果交付给应用程序,或者通过转发将IO结果交付给应用程序。
资源感知的任务重新分配
仅通过IO请求转发,DynaMix会引起严重的设备间通信。 因此,DynaMix通过将线程自适应地迁移到最佳设备来应用资源感知的任务重新分配机制,以最大程度地减少整个设备间的通信量。此机制满足资源感知任务重新分配的设计目标。
资源集成器和线程迁移器共同协作以启用任务重新分配。首先,资源集成器监视每个线程的资源使用情况(例如CPU,网络)以检测可能的资源竞争。 其次,在检测到争用时,线程迁移器权衡各种线程分配方案,并找到最佳方案。 第三,线程迁移器通过将线程的执行上下文传递到目标设备来迁移线程。
Implementation
资源集成器
资源集成器由三个组件组成,DSM引擎、IO引擎、设备状态监视器
DSM引擎
DSM引擎通过DSM的方式,将多个设备的内存区域集成到单个内存空间中。DSM引擎在收到内存访问请求后,要么传递其本地内存数据,要么将请求转发到拥有该数据的目标DSM引擎。它还与主守护程序一起协调这些通信,以实现全局一致的内存管理。
DSM引擎的三种性能优化。首先,它采用延迟释放一致性模型来安全地延迟获取释放块中的内存同步。其次,它在检测到顺序的内存访问模式时主动执行内存预取。第三,它使用页面级一致性块来减少一致性开销。
IO引擎
IO引擎通过内核级请求转发来管理对本地和远程IO资源的访问。为了将来自主机的请求转发到远程目标设备,I O引擎拦截与IO相关的系统调用(例如,open,read,write,ioctl),并将其与输入参数一起传递给远程设备。然后,远程设备执行转发的请求,并将结果返回给主机。
为了访问远程存储上的文件,IO引擎与主守护程序一起使用,该守护程序保留包含文件元数据的文件目录。因此,加入DynaMix设备的设备应将其文件元数据信息上传到共享文件目录。在收到文件访问请求后,IO引擎首先检查本地文件目录。如果该文件不存在,则IO引擎会要求主守护程序在共享文件目录中找到该位置,并将请求转发给所有者的设备。
设备状态监视器
设备状态监视器会定期收集各种系统信息(例如,每个线程的CPU利用率,网络阻塞时间)以检测CPU和网络的占用量。当CPU被充分利用但每个线程的CPU利用率较低而又不存在其他瓶颈时(例如,没有IO等待),它可以检测到CPU争用。另一方面,当由于远程IO访问或内存同步而导致的停顿时间超过预定义的阈值(例如,在我们的环境中为30%)时,它会检测到网络争用。在检测到此类更改后,设备状态监视器会立即通知主守护程序启动线程重新分配。
线程迁移器
线程迁移器由四个组件组成,线程管理器、迁移选择器、迁移引擎、心跳通讯器
线程管理器
线程管理器维护正在运行的线程的各种信息,例如执行状态,资源使用情况和锁定。在资源争用中,线程管理器计算线程的数据通信(即线程到线程和线程到资源),并将结果发送到迁移选择器,该选择器确定进行迁移的最佳对象及其目标设备。线程管理器还实现了内核级的锁,以使不同设备之间的线程同步。
迁移选择器
利用线程管理器提供的信息,迁移选择器可以确定迁移的最佳线程及其目标设备,并将信息作为迁移建议通知给主守护程序。
迁移选择器首先将紧密耦合的线程分组为一个线程组,这是最小迁移单元。这种分组简化了选择过程,并防止了不必要的迁移启动。如果线程之间的线程间通信量大于预定义的阈值,则该算法会将线程设置为线程组。接下来,它以使网络开销减少,网络增益最大化的方式找到最佳的线程组及其目标设备。请注意,在特定时间段内,选定的线程组被暂时排除在下一个目标选择中,以避免对同一组进行频繁的迁移调用。使用指数补偿延长时间。
迁移引擎
在迁移选择器确定了要迁移的线程(即线程组)及其目标设备之后,迁移引擎最终将执行线程迁移。
DynaMix通过采用线程克隆和实时迁移来支持低开销的迁移。通过在短时间内传输基本页面,可以最大程度地减少线程在迁移期间的暂停时间。
心跳通讯器
心跳通信器定期交换心跳消息,以检查设备连接并共享其资源状,可以从心跳消息的往返延迟估计设备间网络延迟。然后,资源状态信息将传递到迁移选择器。
心跳通讯器可以检测到哪个远程设备加入或离开了DynaMix设备。对于新加入的设备,其心跳通信器会广播心跳消息。接收到消息后,主守护程序会在DynaMix设备中注册新设备。心跳通信器还通过监视连接性(例如,丢包数)来检测不稳定的设备。如果设备变得不稳定,则心跳通信器会通知主守护程序开始将设备中的线程迁移到更稳定的设备,以避免可能导致整体进度损失的线程恢复。如果意外断开连接,主心跳通信器会通知线程管理器从最新检查点(第4.2.1节)中恢复。
Master Daemon
DynaMix设备具有单个主守护程序,该守护程序管理各种系统状态(例如线程,锁,内存页面,文件)以协调DynaMix操作和组件。主守护程序在无故障的主设备(用户发起应用的设备)上运行,由三个组件组成:线程目录,页面目录和文件目录。
线程目录
线程目录管理线程的全局状态(例如线程位置),并仲裁线程迁移过程。它从设备状态监视器收集资源争用信号,并从迁移选择器收集迁移建议。在收到建议后,线程目录选择最佳的迁移线程组及其目的地,以实现最高的网络收益,然后管理迁移引擎以执行设计的迁移。
线程目录还维护锁的信息(例如,当前所有者,状态)。要获取锁,每个设备都应查询主设备的线程目录。为了减少锁获取的开销,线程目录可以推测性地将锁授予频繁持有锁设备;当另一台设备尝试获取该锁时,线程目录将收回指定的锁。
页面目录
页面目录管理内存页面的共享状态,以协调内存同步操作。当设备由于缺页而发送远程读取请求时,页面目录将查询一个共享器表,该表保留每个页面的共享器设备列表。 然后,它将请求中继到共享设备之一,共享设备会将页面传递到请求设备。
文件目录
文件目录为全局一致的文件视图管理文件元数据和共享文件的物理位置。 每当新设备加入DynaMix设备或设备更新元数据时,主守护程序都会更新其文件目录,然后将更新后的信息通知其他设备。