有效
一种Spark负载访存行为追踪方法及装置
毛睿、陆敏华、陆克中、罗秋明、刘刚、李荣华、廖好、周明洋、王利、王晶、隋秀峰
深圳大学
毛
毛睿 专利 171
腾讯科技(深圳)有限公司特定数据处理电子数据处理程序控制装置
陆
陆敏华 专利 52
深圳大学特定数据处理电子数据处理计算技术
陆
陆克中 专利 83
深圳大学电子数据处理计算技术物理仪器
罗
罗秋明 专利 53
深圳职业技术大学电子数据处理计算技术物理仪器
刘
刘刚 专利 48
深圳大学特定数据处理电子数据处理计算技术
李
李荣华 专利 49
深圳大学特定数据处理电子数据处理计算技术
廖
廖好 专利 66
深圳大学电子数据处理计算技术物理仪器
周
周明洋 专利 28
深圳大学计算技术物理仪器数据交换网
王
王利 专利 19
深圳大学物理仪器计算技术计算模型系统
王
王晶 专利 5
深圳大学物理仪器计算技术其它光学
隋
隋秀峰 专利 31
中国科学院计算技术研究所电子数据处理计算技术物理仪器
摘要
一种Spark负载访存行为追踪方法,包括:在执行区,在UnsafeShuffleWriter对象的hashcode、第一被访问数据的RDD信息以及ShuffleExternalSorter对象的hashcode之间建立对应关系;获取第一被访问数据的虚拟地址和物理地址的相关信息,并根据UnsafeShuffleWriter对象的hashcode、第一被访问数据的RDD信息以及ShuffleExternalSorter对象的hashcode之间的对应关系,得到第一被访问数据的RDD信息、虚拟地址的相关信息和物理地址的相关信息的对应关系并保存在文件中;在存储区,当对MemoryStore维护的哈希表执行存储或读取操作时,获取存储或读取操作对应的第二被访问数据的RDD信息、虚拟地址的相关信息及物理地址的相关信息,然后将上述三者之间的对应关系保存在文件中。本发明还提供一种Spark负载访存行为追踪装置,可打通Spark、JVM、OS三层,使Spark语义一直延伸到硬件层。
1.一种Spark负载访存行为追踪方法,Spark管理的内存包括执行区和存储区,其特征在于,所述方法包括:在所述执行区,当所述Spark启动ShuffleMapTask线程对第一被访问数据进行处理时,在所述ShuffleMapTask线程调用的UnsafeShuffleWriter对象的哈希码值、所述第一被访问数据的RDD信息以及所述UnsafeShuffleWriter调用的ShuffleExternalSorter对象的哈希码值之间建立对应关系;获取所述ShuffleExternalSorter为所述第一被访问数据申请的虚拟地址的相关信息以及所述虚拟地址对应的物理地址的相关信息,并根据所述UnsafeShuffleWriter对象的哈希码值、所述第一被访问数据的RDD信息以及所述ShuffleExternalSorter对象的哈希码值之间的对应关系,得到所述第一被访问数据的RDD信息、虚拟地址的相关信息以及物理地址的相关信息之间的对应关系,并保存在文件中;在所述存储区,当对MemoryStore维护的哈希表执行存储或读取操作时,获取所述存储或读取操作的对象,并根据所述对象得到所述存储或读取操作对应的第二被访问数据的虚拟地址的相关信息以及所述第二被访问数据的虚拟地址对应的物理地址的相关信息,所述哈希表以BlockId为键,以MemoryEntry为值,所述对象包括所述第二被访问数据的BlockId和MemoryEntry;将所述第二被访问数据的RDD信息、虚拟地址的相关信息以及物理地址的相关信息之间的对应关系,保存在所述文件中,所述第二被访问数据的RDD信息包括获取的BlockId。
2.如权利要求1所述的方法,其特征在于,所述在所述ShuffleMapTask线程调用的UnsafeShuffleWriter对象的哈希码值、所述第一被访问数据的RDD信息以及所述UnsafeShuffleWriter调用的ShuffleExternalSorter对象的哈希码值之间建立对应关系,具体包括:获取所述ShuffleMapTask线程调用的UnsafeShuffleWriter对象的哈希码值和所述第一被访问数据的RDD信息,将所述UnsafeShuffleWriter对象的哈希码值和所述第一被访问数据的RDD信息写入第一哈希表,所述第一哈希表以所述UnsafeShuffleWriter对象的哈希码值为键,以所述第一被访问数据的RDD信息为值;获取所述UnsafeShuffleWriter对象的哈希码值和所述UnsafeShuffleWriter调用的ShuffleExternalSorter对象的哈希码值,将所述UnsafeShuffleWriter对象的哈希码值和所述ShuffleExternalSorter对象的哈希码值写入第二哈希表,所述第二哈希表以所述ShuffleExternalSorter对象的哈希码值为键,以所述UnsafeShuffleWriter对象的哈希码值为值。
3.如权利要求2所述的方法,其特征在于,所述第一被访问数据的虚拟地址的相关信息包括所述第一被访问数据的虚拟地址及其对应的虚拟页信息;所述获取所述ShuffleExternalSorter为所述第一被访问数据申请的虚拟地址的相关信息以及所述虚拟地址对应的物理地址的相关信息,并根据所述UnsafeShuffleWriter对象的哈希码值、所述第一被访问数据的RDD信息以及所述ShuffleExternalSorter对象的哈希码值之间的对应关系,得到所述第一被访问数据的RDD信息、虚拟地址的相关信息以及物理地址的相关信息之间的对应关系,并保存在文件中,具体包括:获取所述ShuffleExternalSorter对象的哈希码值和为所述第一被访问数据申请的虚拟地址;在所述第二哈希表中查找与所述ShuffleExternalSorter对象的哈希码值对应的所述UnsafeShuffleWriter对象的哈希码值;在所述第一哈希表中查找与所述UnsafeShuffleWriter对象的哈希码值对应的所述第一被访问数据的RDD信息;访问操作系统页表,得到与所述虚拟地址对应的虚拟页信息以及物理地址的相关信息;将所述第一被访问数据的RDD信息、虚拟地址、虚拟页信息以及物理地址的相关信息合成一条记录,并保存在所述文件中。
4.如权利要求1所述的方法,其特征在于,所述第二被访问数据的虚拟地址的相关信息包括所述第二被访问数据的虚拟地址及其对应的虚拟页信息;所述当对MemoryStore维护的哈希表执行存储或读取操作时,获取所述存储或读取操作的对象,并根据所述对象得到所述存储或读取操作对应的第二被访问数据的虚拟地址的相关信息以及所述第二被访问数据的虚拟地址对应的物理地址的相关信息,具体包括:当对MemoryStore维护的哈希表执行存储或读取操作时,获取所述哈希表中的BlockId和MemoryEntry,获取所述MemoryEntry的成员变量ByteBuffer数组;利用Unsafe类提供的接口,获取所述ByteBuffer数组中每一个ByteBuffer对象的成员变量hb的值,所述成员变量hb的值为字节数组在JVM堆中的起始地址;将所述成员变量hb的值与所述JVM堆的头信息的长度相加,得到所述第二被访问数据的虚拟地址;通过访问操作系统页表,得到所述第二被访问数据的虚拟地址对应的虚拟页信息以及物理地址的相关信息。
5.如权利要求4所述的方法,其特征在于,所述将所述第二被访问数据的RDD信息、虚拟地址的相关信息以及物理地址的相关信息之间的对应关系,保存在所述文件中,具体包括:将所述BlockId作为所述第二被访问数据的RDD信息,与所述第二被访问数据的虚拟地址、虚拟页信息和物理地址的相关信息一起组合成一条记录,并保存到所述文件中。
6.一种Spark负载访存行为追踪装置,Spark管理的内存包括执行区和存储区,其特征在于,所述装置包括:建立单元,用于在所述执行区,当所述Spark启动ShuffleMapTask线程对第一被访问数据进行处理时,在所述ShuffleMapTask线程调用的UnsafeShuffleWriter对象的哈希码值、所述第一被访问数据的RDD信息以及所述UnsafeShuffleWriter调用的ShuffleExternalSorter对象的哈希码值之间建立对应关系;第一追踪单元,用于获取所述ShuffleExternalSorter为所述第一被访问数据申请的虚拟地址的相关信息以及所述虚拟地址对应的物理地址的相关信息,并根据所述UnsafeShuffleWriter对象的哈希码值、所述第一被访问数据的RDD信息以及所述ShuffleExternalSorter对象的哈希码值之间的对应关系,得到所述第一被访问数据的RDD信息、虚拟地址的相关信息以及物理地址的相关信息之间的对应关系;保存单元,用于将所述第一被访问数据的RDD信息、虚拟地址的相关信息以及物理地址的相关信息之间的对应关系保存在文件中;第二追踪单元,用于在所述存储区,当对MemoryStore维护的哈希表执行存储或读取操作时,获取所述存储或读取操作的对象,并根据所述对象得到所述存储或读取操作对应的第二被访问数据的虚拟地址的相关信息以及所述第二被访问数据的虚拟地址对应的物理地址的相关信息,所述哈希表以BlockId为键,以MemoryEntry为值,所述对象包括所述第二被访问数据的BlockId和MemoryEntry;所述保存单元,还用于将所述第二被访问数据的RDD信息、虚拟地址的相关信息以及物理地址的相关信息之间的对应关系,保存在所述文件中,所述第二被访问数据的RDD信息包括获取的BlockId。
7.如权利要求6所述的装置,其特征在于,所述建立单元,具体用于将所述ShuffleMapTask线程调用的UnsafeShuffleWriter对象的哈希码值和所述第一被访问数据的RDD信息传给第一追踪单元,通过所述第一追踪单元将所述UnsafeShuffleWriter对象的哈希码值和所述第一被访问数据的RDD信息写入第一哈希表,所述第一哈希表以所述UnsafeShuffleWriter对象的哈希码值为键,以所述第一被访问数据的RDD信息为值;所述建立单元,还具体用于将所述UnsafeShuffleWriter对象的哈希码值和所述UnsafeShuffleWriter调用的ShuffleExternalSorter对象的哈希码值传给所述第一追踪单元,通过所述第一追踪单元将所述UnsafeShuffleWriter对象的哈希码值和所述ShuffleExternalSorter对象的哈希码值写入第二哈希表,所述第二哈希表以所述ShuffleExternalSorter对象的哈希码值为键,以所述UnsafeShuffleWriter对象的哈希码值为值。
8.如权利要求7所述的装置,其特征在于,所述第一被访问数据的虚拟地址的相关信息包括所述第一被访问数据的虚拟地址及其对应的虚拟页信息;所述第一追踪单元,具体用于获取所述ShuffleExternalSorter对象的哈希码值和为所述第一被访问数据申请的虚拟地址,在所述第二哈希表中查找与所述ShuffleExternalSorter对象的哈希码值对应的所述UnsafeShuffleWriter对象的哈希码值,在所述第一哈希表中查找与所述UnsafeShuffleWriter对象的哈希码值对应的所述第一被访问数据的RDD信息,访问操作系统页表,得到与所述虚拟地址对应的虚拟页信息以及物理地址的相关信息;所述保存单元,具体用于通过第一追踪单元,将所述第一被访问数据的RDD信息、虚拟地址、虚拟页信息以及物理地址的相关信息合成一条记录,并保存在所述文件中。
9.如权利要求6所述的装置,其特征在于,所述第二被访问数据的虚拟地址的相关信息包括所述第二被访问数据的虚拟地址及其对应的虚拟页信息;所述第二追踪单元,具体用于当对MemoryStore维护的哈希表执行存储或读取操作时,获取所述哈希表中的BlockId和MemoryEntry,获取所述MemoryEntry的成员变量ByteBuffer数组,利用Unsafe类提供的接口,获取所述ByteBuffer数组中每一个ByteBuffer对象的成员变量hb的值,所述成员变量hb的值为字节数组在JVM堆中的起始地址,将所述成员变量hb的值与所述JVM堆的头信息的长度相加,得到所述第二被访问数据的虚拟地址,以及通过访问操作系统页表,得到所述第二被访问数据的虚拟地址对应的虚拟页信息以及物理地址的相关信息。
10.如权利要求9所述的装置,其特征在于,所述保存单元,还具体用于将所述BlockId作为所述第二被访问数据的RDD信息,与所述第二被访问数据的虚拟地址、虚拟页信息和物理地址的相关信息一起组合成一条记录,并保存到所述文件中。



