123

Posted five100miles

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了123相关的知识,希望对你有一定的参考价值。

1. 优化方向

1.1 减少数据拷贝
1.1.1 尽量减少数据拷贝次数,采用指针而非实际数据传参
1.1.2 内核与用户态间数据拷贝注意使用cache,与不带cache的性能可相差10倍(具体参见内存山图)
i.e. 鱼眼特性拷贝用户态5400kb的YUV只需6ms,从海思解码帧存(内核态分配地址)拷贝需30ms,采用带cache的帧存后与用户态拷贝耗时一致

1.2 cache命中优化
1.2.1 空间局部性: cache采用cache line传输,将相邻数据放在一起可提升cache命中;减少全局变量与静态变量的使用(一般与代码相距较远);使用section宏让相关代码在内存里紧密排列
1.2.2 时间局部性: 同一段数据采用函数回调方式层层处理(类似linux网络协议栈处理)以提升cache命中率,相反如果两个线程一个线程处理完通知另一线程处理,等另一线程调度时cache可能已经发生变化

1.3 锁优化
1.3.1 减少锁的使用
1.3.2 根据场景不同使用不同的锁(自旋锁,读写锁,顺序锁...)
1.3.3 实现无锁代码(CAS...)

1.4 减少调度
1.4.1 设置CPU亲和性

 

2. 性能调试工具

2.1 perf
2.1.1 编译perf
perf为linux自带工具,在内核目录/tools/perf下直接make即可,可能会出现以下两个问题
gcc threat warning as error: 交叉编译perf需执行参数,具体参见Makefile首部注释说明很清楚 i.e. make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- WERROR=0
can‘t find liblk.a: 注意编译perf依赖liblk.a,如果是交叉编译的perf需先删除默认路径下liblk.a(基于x86的库)并交叉编译生成对应的库

2.1.2 使用perf查看热点函数
perf top -G > result.txt

 















以上是关于123的主要内容,如果未能解决你的问题,请参考以下文章

字符串格式数字千位123K、百万位123M、十亿位123B

计算 90% 并用 R 中的组中位数替换它

Django 抛出“[123L, 123L] is not JSON serializable”

2022-10-04:以下go语言代码输出什么?A:{123} main.T{x:123} B:{123} T{x:123} C:boo boo D:boo main.T{x:123}。 packag

我想用javascript 实现字母大小写转换 如:把字符串 abc123 转换为 Abc123、ABc123、ABC123、aBC123...

防火墙地址转换设置无效如何解决