Skip to content

Commit a5240fd

Browse files
committed
fixed
1 parent 7f65330 commit a5240fd

File tree

127 files changed

+1659
-303
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

127 files changed

+1659
-303
lines changed
+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# C10K和C10M
2+
#### 并发请求问题
3+
* 怎样在一个线程内处理多个请求,也就是要在一个线程内响应多个网络 I/O
4+
* 怎么更节省资源地处理客户请求,也就是要用更少的线程来服务这些请求
5+
6+
#### 惊群问题
7+
* accept() 和 epoll_wait() 调用,还存在一个惊群的问题。换句话说,当网络 I/O 事件发生时,多个进程被同时唤醒,但实际上只有一个进程来响应这个事件,其他被唤醒的进程都会重新休眠。
8+
* EPOLLEXCLUSIVE
9+
10+
#### nginx解决惊群问题
11+
* Nginx 在每个 worker 进程中,都增加一个了全局锁(accept_mutex)。这些 worker 进程需要首先竞争到锁,只有竞争到锁的进程,才会加入到 epoll 中,这样就确保只有一个 worker 子进程被唤醒
12+
* 所有的进程都监听相同的接口,并且开启 SO_REUSEPORT 选项,由内核负责将请求负载均衡到这些监听进程中去。这一过程如下图所示。
13+
* ![90df0945f6ce5c910ae361bf2b135bbd](media/15498656013403/90df0945f6ce5c910ae361bf2b135bbd.png)
14+
* 由内核确保只有一个进程被唤醒
15+
16+
#### C1000K
17+
* 文件描述符的数量
18+
* 连接状态的跟踪(CONNTRACK)
19+
* 网络协议栈的缓存大小
20+
* 多队列网卡
21+
* 中断负载均衡
22+
* CPU 绑定
23+
* RPS/RFS(软中断负载均衡到多个 CPU 核上
24+
* 网络包的处理卸载(Offload)
25+
26+
#### C10M
27+
* DPDK
28+
* 是用户态网络的标准。它跳过内核协议栈,直接由用户态进程通过轮询的方式,来处理网络接收。
29+
![998fd2f52f0a48a910517ada9f2bb23a](media/15498656013403/998fd2f52f0a48a910517ada9f2bb23a.png)
30+
* 实际工作时间远远高于查询时间
31+
* 在 PPS 非常高的场景中,查询时间比实际工作时间少了很多,绝大部分时间都在处理网络包,而跳过内核协议栈后,就省去了繁杂的硬中断、软中断再到 Linux 网络协议栈逐层处理的过程,应用程序可以针对应用的实际场景,有针对性地优化网络包的处理逻辑,而不需要关注所有的细节。
32+
* 大页、CPU 绑定、内存对齐、流水线并发等多种机制
33+
34+
#### XDP
35+
* Linux 内核提供的一种高性能网络数据路径。它允许网络包,在进入内核协议栈之前,就进行处理,也可以带来更高的性能。XDP 底层跟我们之前用到的 bcc-tools 一样,都是基于 Linux 内核的 eBPF 机制实现的。
36+
*

Linux性能优化实战/CDN.md

-24
This file was deleted.
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# CPU优化套路
2+
3+
#### 应用程序优化
4+
* 编译器优化
5+
* 算法优化
6+
* 异步处理
7+
* 多线程代替多进程 多线程上下文切换并不切换进程地址空间,可以降低上文文切换的成本
8+
* 善用缓存
9+
10+
#### 系统进程优化
11+
* CPU绑定
12+
* CPU分组进行CPU独占
13+
* 优先级调整
14+
* 进程设置资源限制
15+
* NUMA优化 访问本地内存
16+
* 中断负载均衡 irqbalance和smp_affinity
17+
18+
#### wait区别
19+
* pidstat 中, %wait 表示进程等待 CPU 的时间百分比。
20+
* top 中 ,iowait% 则表示等待 I/O 的 CPU 时间百分比。
21+
22+
#### 指定容器文件系统的路径
23+
* bindfs
24+
*

0 commit comments

Comments
 (0)