DatenLord|重新思考Rust Async如何实现高性能IO

作者: 王璞


长期以来,计算机系统IO的速度一直没能跟上CPU速度的提升,相比而言IO往往成为系统的性能瓶颈,计算任务等待IO存取数据,成为高性能系统的一大性能瓶颈。本文先剖析IO性能瓶颈的根源,然后举例说明如何解决IO瓶颈,最后简要介绍我们在高性能IO方面的尝试。

目录

IO性能瓶颈

如何实现高性能IO

我们的尝试


IO性能瓶颈


当用户程序执行IO操作时,绝大多数情况下是调用操作系统内核提供的系统调用来执行IO操作,最常见的IO系统调用是read和write。在现代计算机体系结构和操作系统的架构下,导致程序IO性能瓶颈主要有三大因素:阻塞、上下文切换、内存拷贝。下面分别简述为什么这三个因素会导致程序性能下降。

阻塞

阻塞比较好理解,比如用户程序调用read系统调用来读取数据,如果要读取的数据没有准备好(没有命中缓存),那用户程序就会被阻塞,导致用户程序休眠。等要读的数据加载到系统态的内存之后,内核再唤醒用户程序来读取数据。

阻塞对用户程序性能最大的影响在于,用户程序会被强制休眠,而且用户程序什么时候被唤醒也无法控制,程序休眠期间什么都不能做。于是阻塞带来了大量的休眠等待时间。如果程序把大量时间花在阻塞等待IO上,自然IO效率低下,进而导致程序性能受影响。

上下文切换

上下文切换是操作系统的基本概念。内核运行在系统态,用户程序运行在用户态,这么做主要是处于安全的考虑,限制用户程序的权限。用户程序调用系统调用执行IO操作,会发生上下文切换,比如用户程序调用read系统调用来读取数据,用户程序的上下文被保存起来,然后切换到内核态执行read系统调用,当read系统调用执行完毕,再切换回用户程序。

上下文切换的代价不小,一方面内核要保存上下文现场,另一方面CPU的流水线也会被上下文切换打断,需要重新加载指令。上下文切换等同一次中断操作,于是系统调用也被称软中断。频繁的上下文操作对计算机系统带来很大的开销,导致程序执行效率大大降低,进而极大影响程序的性能。

此外,阻塞的时候,一定会发生上下文切换。还是沿用read操作的例子,用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达坦科技DatenLord

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值