加入收藏 | 设为首页 | 会员中心 | 我要投稿 孝感站长网 (https://www.0712zz.com.cn/)- 运营、云管理、管理运维、云计算、大数据!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

2020年5G领域十大事件回顾

发布时间:2021-01-29 15:12:17 所属栏目:外闻 来源:互联网
导读:由于具有超高的下载速度和超低的网络延迟,5G可以被应用在很多之前看起来不可能实现的技术领域,例如自动驾驶、人工智能和远程医疗等。这些行业都是未来国内主要研究的方向,而5G的诞生则为国内提供了必要的技术支持。 除此之外,必须要提到的是,国内5G网络

由于具有超高的下载速度和超低的网络延迟,5G可以被应用在很多之前看起来不可能实现的技术领域,例如自动驾驶、人工智能和远程医疗等。这些行业都是未来国内主要研究的方向,而5G的诞生则为国内提供了必要的技术支持。

除此之外,必须要提到的是,国内5G网络已经彻底改变了4G和3G时代的落后局面,走在了全世界的前沿。这是因为近几年国内涌现出了一大批优秀的通信公司,例如华为、中兴等,再加上三大运营商的基建能力,5G的领先可以说是水到渠成。

数据显示,截至到去年下半年,在华为等公司和三大运营商的帮助下,国内已建成了将近七十万座5G基站,5G用户也突破了一亿人次,全面领先于平均水平!而在国内大多数一二线城市,甚至是小城镇里,5G网络也得到了覆盖,用不了多久就会普及。

不过,随着时间的进一步推移,如今国内5G的热度似乎没有之前那么高了,而5G用户增长的速度也变得非常缓慢。至于为什么会出现这样的情况,是因为大多数4G用户都在观望,他们正在思考一个重要的问题:到底有没有必要升级到5G?
 

将Rust内存请求转发给系统调用后,还需要将应用的内存请求继续传递给系统libc. mp的做法是通过Rust的feature开关,可以自行选择两种方式处理应用内存请求,这两种方式都是通过在Rust中指定link_name 属性实现:

  • 直接通过__libc_malloc的link_name将应用内存请求转发给libc
  • 通过指定成jemallocator的函数入口 _rjem_malloc,使应用和Rust共用jemalloc.
  • 最终可以使Hook业务使用完整的Rust语言功能而不用担心Rust自身代码引起的循环调用崩溃。

2.1.2 高性能堆栈反解

除了利用Rust系统编程语言特性避开内存循环调用之外,作者还利用Rust的高性能特点实现了几种高性能堆栈反解。

利用ELF的.eh_frame 节(C++异常处理机制)提供的栈回溯信息。

基于.ARM.exidx + .ARM.extab的栈回溯,这个是ARM提供的unwind table.

具体实现可以看作者的这个Crate not-perf。这里选择第二种做说明,如图下,对每个线程的堆栈都用线程局部存储维护了一套栈帧缓存,这个缓存来自于ELF文件中的unwind table信息,当堆栈的帧在缓存未命中时会把对应二进制的unwind表被加载到内存,而命中的时候,就不需要去读取文件。通常二进制被加载后它的地址空间就不会发生变化,所以缓存的效率很高。缺点是每个线程都有一套完整的缓存。从系统层面看占用的内存overhead很大。
 

2. 内存塔(MemTower)方案

本节主要介绍memory-profiler项目的实现和内存塔(MemTower)方案在移植该项目至Android平台上的过程和对原方案的改进。阐述我们是如何实现并满足上述的诉求。

2.1 选择Rust & Memory-profiler

针对上门的诉求,期望能够找到一种新的解决方案。当时正好在研究Rust,因此在GitHub上结合关键字搜索便发现了memory-profiler(以下简称mp)项目,作者koute是前Nokia工程师。接着才有了后面的内存塔。本节主要阐述mp如何结合Rust实现内存Profile的相关原理和功能。

2.1.1 Hook实现

通常对Native内存性能分析使用的方案是Hook malloc 和 free 等内存调用请求。mp的原理也是如此,利用LD_PRELOAD 预加载自定义库实现对内存操作函数的Hook。这种方案最大的问题是容易引发循环malloc调用。如下图,Hook了程序内存请求后,Hook业务自身的内存请求也会触发内存请求,从而造成了malloc循环调用,引发栈崩溃。

 

(编辑:孝感站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读