作为jser,在性能优化的时候遇到:fast-path code和slow-path code是什么意思?两者之前是什么关系。
在网络上搜索了下,并没有得到很好的阐述。
现在得到的阐述为: 为了进行某些操作,调用一些C函数来处理。这些C函数被称为slow path 。
这个....阐述忒模糊了..
作为jser,在性能优化的时候遇到:fast-path code和slow-path code是什么意思?两者之前是什么关系。
在网络上搜索了下,并没有得到很好的阐述。
现在得到的阐述为: 为了进行某些操作,调用一些C函数来处理。这些C函数被称为slow path 。
这个....阐述忒模糊了..
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.7k 阅读✓ 已解决
在网络设备里面区分不同的路径是一个很自然的选择,因为网络设备的首要任务是转发网络包,不同的网络包,在设备里面的处理路径不同。fast path就是那些可以依据已有状态转发的路径,在这些路径上,网关,二层地址等都已经准备好了,不需要缓存数据包,而是可以直接转发。slow path是那些需要额外信息的包,比如查找路由,解析MAC地址等。
first path是设备收到流上第一个包所走过的路径,比如tcp里面的syn包,有些实现把三次握手都放到first path里面处理,而有些只需处理syn包,其他包就进入fast path的处理路径。
在NP或者ASIC里面也需要区分slow path和fast path,fast path上的包都放在SRAM里面,而slow path的包放在DRAM里面。不过这也非绝对。决定处理路径的是对于速度的考虑。处理器的速度,内存的速度等。访问内存的速度由速度和带宽两个因素决定。因此,把SRAM放到fast path上,也是很自然的选择。
fast path: Frontend -> simple code generator -> assembler
slow path: Frontend -> IR optimizer (sometimes more than one level of IR) -> code-generator -> assembler