linux大内存拷贝优化,Linux 下基础设施及系统网络优化

基础设施优化

CPU 优化

多级缓存

充分利用 cache 是 CPU 调优的重要手段,由于是底层优化作用范围广。

性能分析利器——Perf 参数学习

提升 cache 命中率

缓存命中: CPU 要取的数据再一级缓存内,直接读取,称为 cache 命中率

使用 Perf 查看 Data[i][j] 和 Data[j][i] 性能对比。

对于一个二维数组,是先遍历后排序还是先排序后遍历性能更好。

提升多核 cache 命中率

若发生 CPU 切换,则之前 L1 和 L2 cache 会发生切换(L1 和 L2 每个CPU单独拥有, L3 多个 CPU 公用),优化会失效。

绑定到 CPU 比不绑定 CPU 性能更加。

小结:

数据 cache 命中率提升

命令 cache 命中率提升

CPU 绑定

内存优化

应用程序分配内存过程

业务代码-->应用层内存池-->C 库内存池--> 操作系统内存分配

linux 默认 C 库内存池 Ptmalloc2

cat /proc/${PID}/maps 查看内存分配

堆内存最小分配132k

堆内存最好尽早释放

Tcmalloc C 库内存池适合小内存分配,中大内存分配不如 Ptmalloc2

界限:0-256k 小 256k-1M 中 1M 以上 大

Tcmalloc: 多线程、256k 以下

Ptmalloc2: 通用性好,大内存

堆和栈内存

栈速度快,缺点:容量和声明周期

磁盘优化

磁盘常常是瓶颈所在

优化技术

零拷贝(缓存 IO 技术)

网卡支持 SG-DMA 还可以更快。

缺陷:大文件传输 PageCache 技术的缺陷。

直接 IO + 异步 IO

大文件传输可以使用此方法。

系统网络优化

TCP 握手优化

SYN 请求优化

服务端优化

SYN 半队列溢出

netstat -s 可以查看由队列满引起的连接失败次数

设置 syncookie ,可以在队列满后继续建立连接, 参数含义如下:

0:关闭

1:队列满开启

2:无条件开启

accept 队列溢出

linux 默认丢弃新连接,设置 tcp_abort_on_overflow 参数,可以发送 RST 给客户端。 参数含义如下:

0:丢弃

1:发 RST 给客户端

绕过三次握手发送数据

Goole 统计,三次握手在 http 请求时间中占了 10% ~ 30%。

TFO 实现过程:

正常三次握手

SYN 携带数据

设置系统参数 tcp_fastopen 来使用 TFO, 需要客户端和服务器同时支持。

TCP 挥手优化

Close 函数

Shutdown 函数

tcp_orphan_retries: 控制主动方重传 FIN 的次数,默认值为 0,表示 8 次

FIN_WAIT_1

tcp_max_orphans

tcp_fin_timeout

被动方参数优化

netstat 发现大量 close_wait

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值