## 1. CPU与Memory
> CPU就像一个高速公路,不停的Memory中加载数据,计算数据,再写回Memory,数据读取和写回的速度,是制约系统的一个关键因素

- **左边从上到下**
1. CPU
2. Cache(高速缓冲存储器)
3. Memory(内存)
4. SCM(非记忆存储)
5. SSD(固态硬盘)
6. HDD(硬盘)
- **右边从上到下**
> 对左边的总结
## 2. 处理器的性能和功能墙
> 随着CPU的发展功率也在不断的上升

- **为什么发展到后期功率一直徘徊在那里?**
> 随着芯片上晶体管的密度越来越高,制程工艺越来越小,晶体管中的绝缘层也将越来越薄,导致漏电增加,功耗上升。

- 红色:绝缘层
- 弥补漏电办法:增加电压,产生更大功率
- 功率上升,热量变大,提升更好的散热。
**原因**
1. 散热技术
2. 技术问题
## 3. 从单核到SMP
> SMP(Symmetric multiprocessing system)对处理器系统中,所有的核均通过总内存。每一个进程都可以被分配到任何一个核上运行,达到很好的负载均衡。

## 4. 从SMP到NUMA
> 在SMP系统中,核数的扩展受到内存总线的限制。非同一内存访问架构(Non-uniform memory access)很好的解决了这以问题
促进升级的原因:无法大型的扩张

### 4.1 NUMA架构的特点
> 内存在物理上是分布式的,不同的核访问不同内存的时间不同,因此有了Node和Distance

### 4.2 CPU亲和性
> 让进程在给定的Core上尽可能长时间的运行,而不被迁移到其他的倾向性

### 4.3 NUMA资源规划

### 4.4 NUMA配置方法

**例:Nginx绑核优化**

## 5. 新的挑战-锁
### 5.1 锁的模型

#### 锁性能优化(一)
- **无锁编程**

- **大锁变小锁**

#### 锁性能的优化(二)
- **使用GCC自带的原子操作**

- **使用再带内存屏蔽的指令**

#### 锁性能优化(三)
- **调整现成数达到最佳并发效果**

- **避免Cache line伪共享**

## **小结**
1. NUMA是非同一的内存访问架构,不同NUMA节点间的内存访问时间不同。
2. 减少跨NUMA内存copy将大幅提升性能,不要忘记网卡中断的内存copy。
3. 减少锁的使用、减少锁的互斥范围,提升系统中的并行比例,可以充分利用多核的并发。
4. 使用GCC自带原子操作、使用自带内存屏障的指令也会对性能有很大帮助。
5. 适当并发数,让系统在并发和线程切换开销找到很好的平衡点。
6. 主义锁数据结构的“伪共享”,避免伪共享带来的性能下降。
