DPDK的编程规范,用来指导如何写高性能程序,觉得挺有意思的,所以翻译过来。
内存
Memory Copy
不要在数据面上使用libc函数,例如memcpy和strcpy等,推荐用rte_memcpy
这样的优化实现,实际上就是SIMD的版本。
为了使用SIMD,需要保证地址不是虚拟地址,例如malloc等产生的是虚拟地址,那么在物理地址上可能是分散的,就做不了SIMD优化。
Memory Allocation
避免使用malloc等在堆上分配内存,毕竟维护堆还是比较麻烦的(CSAPP的Data Lab令我记忆犹新),并且也不容易做parallel allocation(【Q】这是啥)。
更为推荐的做法是对固定大小的对象构建内存池,例如librte_mempool
/rte_malloc
的实现。在这样的实现中需要考虑内存对齐,无锁访问,NUMA感知,批量读写,每个核心的Cache。