Comparative analysis of three GNSS data download methods
-
摘要: 为综合评估单线程、多线程和多协程在全球卫星导航系统(GNSS)数据下载中的性能,以武汉大学国际GNSS服务(IGS)数据中心为下载源,从下载文件的时间跨度和量级大小两个方面对三种方法的下载效果进行对比分析. 结果表明:在中小型文件下载过程中多线程的优势大于单线程和多协程;在大型文件下载中,多协程的下载效果略优于多线程,且都相较单线程性能更佳;由于GNSS数据普遍是中小型文件,所以多线程更适用于GNSS数据下载工作.
-
关键词:
- 全球卫星导航系统(GNSS) /
- 数据下载 /
- 单线程 /
- 多线程 /
- 多协程
Abstract: In order to comprehensively evaluate the performance of single-thread, multi-thread, and multi-coroutine in Global Navigation Satellite System (GNSS) data download, this paper uses the International GNSS Service (IGS) data center of Wuhan University as the download source and analyzes the download effects of three methods in terms of the time span and magnitude of the download file. The results show that in the process of small and medium-sized files download, multi-thread has more advantages than single-thread and multi-coroutine,while for large file downloads, the download effect of multi-coroutine is slightly better than multi-thread, and both have better performance than that of single-thread. Since GNSS data file is generally small and medium-sized file, multi-thread is more suitable for GNSS data download. -
0. 引 言
高精度全球卫星导航系统(GNSS)数据是定位、导航和授时(PNT)服务的前提和基础,对最终服务精度的好坏起决定性作用. 在PNT智能化服务大背景下[1],伴随高精度数据解算工作的深入,GNSS数据的重要性愈加突显. 一方面,GNSS的服务范围不断拓宽,已是部分传统技术手段的重要替代技术[2],相关数据解算成为业内人员的日常工作;另一方面,GNSS自身的发展和完善,促进GNSS数据在种类和数量上迅速增长,被广泛应用于电离层、对流层、参考框架、地球自转和地壳运动等研究[3-7]. 高精度GNSS数据主要来源于国际GNSS服务(IGS)和连续运行参考站(CORS),供用户下载使用.
伴随用户对GNSS数据的需求急剧增长,如何高效获取大批量GNSS数据成为高精度PNT服务的首要考虑问题. 物理层面上,可通过提升信道带宽来加快文件下载速率,但这无疑为用户带来更高的成本;技术层面上,操控多台计算机共同执行相同下载任务能有效缩短耗时,不足在于占用大量计算机资源. 因此已有众多学者对如何高效下载GNSS数据进行研究,主要集中在基于单线程下载的软件研发,对多线程和多协程下载方法涉及较少[8-11]. 因此,本文以自研软件为平台,对单线程、多线程和多协程三种下载方法的性能进行比较分析,为相关GNSS数据下载软件开发提供参考和借鉴.
1. GNSS数据下载方法
GNSS数据主要存储于目标IGS数据中心和CORS对应的服务器内,用户可通过网络请求的方式获取. 在数据下载过程中采用单线程、多线程和多协程等方法,可以实现数据的有效下载. 其中,线程是操作系统能够进行运算调度的基本单位,是程序实际执行单元;协程则是一种用户态的轻量级线程,它是比线程占用更少资源的执行单元[12-14]. 下面依次对单线程、多线程和多协程下载方法做简要介绍.
1.1 单线程下载
单线程下载是基于单个线程的控制流逐个下载目标数据. 主要流程是先向服务器发送下载请求,建立计算机与服务器间的数据传输通道;然后CPU将web端数据缓存到电脑主存储器(内存)中,存储完毕后CPU被释放;最后,存储器直接存取(DMA)负责把内存里的缓存数据写入磁盘. 详细步骤如图1所示.
1.2 多线程下载
多线程下载是同时开启多个线程,每个线程用于执行不同的下载任务. 多线程下载首先以计算机和服务器间的数据传输通道为基础,借助计算机内核的调度交替获得CPU的处理资源,将每个线程任务对应的web数据分别缓存至内存,最后由DMA将其写入磁盘,完成多任务并发下载[15],如图2所示.
1.3 多协程下载
多协程下载是同时创建多个协程,每个协程负责一个下载任务. 它是以计算机和服务器间的数据传输通道为基础,将单个协程和线程进行对接,完成CPU缓存web数据的作业步骤;当协程遇到I/O(硬盘/内存)读写操作时,协程和线程会分离,其中协程独自等待DMA将缓存数据写入磁盘,线程则准备与下一个协程进行对接,循环上述流程,如图3所示.
2. 数据下载与分析
为比较分析单线程、多线程和多协程三种下载方法的性能,选取武汉大学IGS数据中心2020年001天至2021年234天(共计600天)的数据,统计三种方法分别下载100、200、···、600天不同量级数据的耗时情况(取5次测试结果的平均值). 其中,下载测试的文件根据GNSS数据整体大小分为小、中、大三个量级,小文件是指单个文件大小小于1 MB/天的GNSS数据,主要有广播星历、精密星历、地球自转参数、电离层延迟和对流程延迟等,测试选取的是最常用的GPS广播星历文件;中文件是指单个文件大小介于1~4 MB/天的数据,该类文件包括大部分的观测数据,测试选取BJFS站RINEX 2.xx观测数据;大文件是单个文件大小超过4 MB/天的数据,它在GNSS数据中占极少部分,主要有天线相位中心改正和部分观测文件等,测试选取WUH2站RINEX 3.xx观测数据. 不同时间跨度下的小、中、大三类文件总大小如表1所示,三种下载方法的耗时结果如表2所示.
表 1 不同时间跨度的文件大小统计MB 文件数量 100天 200天 300天 400天 500天 600天 小 6.4 12.7 18.9 24.7 30.1 35.5 中 163.2 329.1 492.6 648.4 801.5 943.3 大 466.3 1 024.9 1 587.4 2 099.8 2 539.3 3 102.7 表 2 不同时间跨度的三种下载方法耗时统计s 方法名称 文件量级 100天 200天 300天 400天 500天 600天 单线程 小 68 135 211 269 354 416 中 122 245 365 479 597 711 大 178 392 604 795 964 1 178 多线程 小 5 8 11 15 19 23 中 22 43 62 80 97 114 大 67 146 223 292 346 410 多协程 小 16 30 44 56 68 79 中 29 54 78 100 122 142 大 73 144 212 274 326 396 文中三种方法下载耗时采用课题组研发的“GNSS数据下载软件(GDDS v1.0)”进行统计,该软件采用Python设计开发,支持IGS和区域CORS数据的下载[16]. 测试所用PC机软硬件配置为:Intel Core i5-7200 CPU,2.50 GHz主频,8 GB内存,Win10操作系统(64位);平均网速为:12.5 MB/s.
2.1 单线程下载结果分析
图4为单线程下载不同量级文件. 由图4可知,单线程在下载单个文件量级相同的任意时间跨度的数据时,速度几乎保持不变;随着下载任务中单个文件量级逐渐增大,单线程的下载速度也有提升.
文件下载的耗时主要来源于服务器响应、CPU缓存和DMA拷贝三个等待过程,其中服务器响应由其自身硬件配置决定,与请求下载的文件大小无关;CPU缓存和DMA拷贝受文件大小和相关操作速度的双重影响. 在单线程下载过程中,一直循环执行着等待服务器响应下载请求、CPU缓存web数据和DMA将数据拷贝至磁盘等耗时操作. 当下载任务中的各文件大小基本一致时,上述三个等待过程的耗时大致相同,因此单线程下载任意时间跨度的相同量级文件的速度保持不变;随着下载任务中单个文件量级增大,CPU缓存和DMA拷贝的耗时均线性增长,但等待服务器响应的耗时维持不变,因此总耗时的增长率低于文件量级的增长,即表现出单线程下载大文件的速度优于中小文件.
2.2 多线程下载结果分析
图5是多线程下载不同量级文件的详情. 由图5可知,多线程在下载小文件时,随着时间跨度的增大,下载速度先急剧增大,300天小文件对应的下载速度达到峰值,然后下载速度有一定的回落;在下载中、大文件时,随着时间跨度的增大,下载速度逐渐加快.
多线程是通过快速切换CPU资源达到CPU缓存和DMA拷贝同时进行的效果,因此在下载小文件过程中,多线程能短时间完成大批量数据下载工作,显著提高整体下载速度;当下载速度达到服务器允许此类型文件的最快传输值时,出于安全考虑服务器会主动限制该IP地址的后续数据传输速度,导致长时间跨度的下载任务速度降低. 在下载中、大文件时,多线程下载速度难于达到服务器此类型数据的报警值,所以下载速度会随时间跨度的增大而加快.
2.3 多协程下载结果分析
图6是多协程下载不同量级文件的详情. 由图6可知,多协程的下载速度先随时间跨度的增大而加快,当时间跨度达到一定程度后,下载速度便稳定下来. 多协程的这种速度变化趋势随着下载任务中单个文件量级的增大愈加显著.
多协程下载是充分利用阻塞的时间实现多任务的分段式下载,即在执行下载任务中,多协程遇到I/O等待便会挂起当前任务,切换至下一个任务执行;当I/O处理完毕后,又切换回该任务继续运行. 多协程在下载过程中充分利用了CPU资源,因此其下载的文件数量越多,理论下载速度就越快. 但在实际下载过程中,多协程的下载速度并不会随下载的文件数量增多而无限加快,它会受到一些其他因素的制约,如信道带宽、计算机性能等,导致下载速度到达一定程度后增长缓慢.
2.4 三种方法综合分析
图7是三种方法在小、中、大三类GNSS数据下载中的速度对比. 由图7可知,在下载中小文件时,下载速度最快的是多线程,其次是多协程,最后是单线程;下载大文件时,多线程和多协程的下载效果相近,均优于单线程下载,其中多协程的速度略高于多线程.
单线程下载是基于下载步骤有序运行,整个下载过程CPU大部分时间都处于空闲状态;多线程是通过内核调度完成CPU的支配,让CPU保持连续运行的状态;多协程是根据用户需求让CPU处理不同的任务片段,使其一直处于工作状态. 由此可知单线程的CPU利用率明显低于多线程和多协程,需花费更多时间完成相同的web数据缓存工作,导致单线程下载不同量级文件的速度都慢于多线程和多协程.
多线程利用的是CPU多个核参与下载,缺点在于线程的切换是基于内核的调度完成,所以其切换的开销较大. 多协程在下载过程中利用的是单核CPU,优点在于协程间的切换是寄存器上下文和栈的恢复,不占用内核的开销,故协程间的切换速度快于线程. 在下载中小文件时,多线程借助调用CPU多核参与下载的特性,其下载速度明显高于多协程;随着下载任务中单个文件量级的增大,CPU多核的性能优势在下载过程中逐渐弱化,出现多线程与多协程下载速度相互靠拢的现象;在下载大文件时,两者都因外部条件限制达到最佳速度,而协程间的切换快于线程,所以多协程下载速度整体略优于多线程.
3. 结 语
本文对单线程、多线程和多协程三种GNSS数据下载方法进行了对比分析. 结果表明:下载中小文件时多线程明显优于其他两种方法;下载大文件时多协程略优于多线程,且两者的性能都高于单线程;由于GNSS数据主要以中小型文件为主,所以GNSS数据下载软件宜采用多线程下载方式.
-
表 1 不同时间跨度的文件大小统计
MB 文件数量 100天 200天 300天 400天 500天 600天 小 6.4 12.7 18.9 24.7 30.1 35.5 中 163.2 329.1 492.6 648.4 801.5 943.3 大 466.3 1 024.9 1 587.4 2 099.8 2 539.3 3 102.7 表 2 不同时间跨度的三种下载方法耗时统计
s 方法名称 文件量级 100天 200天 300天 400天 500天 600天 单线程 小 68 135 211 269 354 416 中 122 245 365 479 597 711 大 178 392 604 795 964 1 178 多线程 小 5 8 11 15 19 23 中 22 43 62 80 97 114 大 67 146 223 292 346 410 多协程 小 16 30 44 56 68 79 中 29 54 78 100 122 142 大 73 144 212 274 326 396 -
[1] 杨元喜, 杨诚, 任夏. PNT智能服务[J]. 测绘学报, 2021, 50(8): 1006-1012. [2] TEUNISSEN P J G, MONTENBRUCK O. Springer handbook of Global Navigation Satellite Systems [M]. Springer International Publishing, 2017. DOI: 10.1007/978-3-319-42928-1-17
[3] HU Z Y, FAN L, WANG C, et al. More reliable global ionospheric maps combined from ionospheric products of the seven IGS analysis centers[J]. Results in physics, 2020, 17(3-4): 103162. DOI: 10.1016/j.rinp.2020.103162
[4] 杨飞, 郭际明, 李弈韬, 等. GPT3模型估计对流层产品精度检验与分析[J]. 大地测量与地球动力学, 2021, 41(11): 1123-1126. [5] 马一方, 周晓慧, 华培学. 测站坐标阶跃对参考框架稳定性的影响分析[J]. 测绘科学, 2021, 46(10): 20-24. [6] 魏二虎, 刘学习, 孙浪浪, 等. 测站数目和观测弧段对GPS解算地球自转参数的影响分析[J]. 大地测量与地球动力学, 2017, 37(2): 187-191. [7] 马俊, 姜卫平, 周晓慧, 等. 联合小波和方差分量估计方法分析中国IGS测站时间序列变化特征[J]. 武汉大学学报(信息科学版), 2018, 43(4): 629-636. [8] 倪蓉蓉, 王庆, 潘树国, 等. IGS服务数据专用FTP客户端设计与实现[J]. 测绘科学, 2011, 36(6): 278-280,288. [9] 王丞, 李磊, 张铭彬. 一种高效的GNSS数据自动化下载方法的实现[J]. 全球定位系统, 2018, 43(3): 129-134. [10] CHEN Z S, CUI Y, LI L Y, et al. GDP: an open-source GNSS data preprocessing toolkit[J]. GPS solutions, 2020, 24(3): 42-49. DOI: 10.1007/s10291-020-01003-z
[11] 王建伟, 郭春喜, 白穆, 等. 海量IGS数据实时线程池并发获取[J]. 测绘通报, 2020(12): 93-96,105. [12] 周维, 周可人, 栾钟治, 等. 基于共享内存的多核时代数据结构研究[J]. 软件学报, 2016, 27(4): 1009-1025. [13] 蒋炎岩, 许畅, 马晓星, 等. 获取访存依赖: 并发程序动态分析基础技术综述[J]. 软件学报, 2017, 28(4): 747-763. [14] 刘书健. 基于协程的高并发的分析与研究[D]. 昆明: 昆明理工大学, 2016. [15] 李鹏, 曾露, 王焕东. 多核处理器系统I/O访存优化研究[J]. 高技术通讯, 2018, 28(6): 488-499. DOI: 10.3772/j.issn.1002-0470.2018.06.002 [16] 吴汤婷, 梁乔, 胡伟建, 等. GNSS数据下载软件设计与实现[C]//第十三届中国卫星导航年会, 北京, 2022. -
期刊类型引用(1)
1. 吴汤婷,梁乔,赵宝贵. 基于Python的RINEX数据转换软件设计与实现. 测绘工程. 2024(02): 33-40 . 百度学术
其他类型引用(0)