C1000K
阅读霸爷关于C1000K的slides后,收获颇丰,在这里摘录总结。
http://blog.yufeng.info/archives/tag/erts
内存
内存NUMA
tcmalloc cgroup cat /proc/123955/numa_maps
内存page
largepage HugeTLBfs oprofile
网卡负载均衡
网卡bonding
中断平衡
dstat
硬中断
cat /proc/interrupts irqbalance 智能均衡硬件中断 echo ff > /proc/irq/19/smp_affinity
软中断
cat /proc/softirqs
SMP IRQ affinity
RPS: Receive Packet Steering 软件模拟的方式,实现了多队列网卡,分散多CPU上数据接收的负载。 RFS: Receive Flow Steering 把接收的数据包送达应用所在的CPU上,提高cache命中率。
TCP协议栈
微调
IPX, Appletalk 注意观察dmesg有关TCP的抱怨 net.ipv4.tcp_fin_timeout = 32 net.ipv4.keeplive_time = 1200 ...
initcwnd调优(google)
提高初始拥塞窗口的大小(默认是3),大大减少短连接的响应时间。 TCP latency: 3 -> 490ms 6 -> 475 10 -> 170 16 -> 465
IO
文件系统
磁盘的选择 文件系统 IO调度算法 pagecache的设置
FIO工具
异步IO
libaic: Linux native aio,用eventfd做事件通知
记住常用 的延迟数字
CPU L1 cache 0.5 ns CPU Branch mispredict 5 ns CPU L2 cache 7 ns Mutex lock/unlock 25 ns Main memory reference 100 ns Send 2K bytes over 1Gbps 20,000 ns Read 1MB sequentially from memory 250,000 ns Round trip within same datacenter 500,000 ns Disk seek (7200rpm) 10,000,000 ns Read 1MB sequentially from disk 20,000,000 ns Send packet US->NL->US 150,000,000 ns
多核心架构下性能问题
CPU空闲
limited by slow data accessess to memory and disks
Blocking technique
Intel Xeon 7400 CPU: 96 KB L1 cache 16MB of L3 如何利用cache和空余的CPU计算力??? C = A <oper> B 实际上读取了一个block的A,一个block的B
数据压缩
主存的访问速度: 8G/s
L1的速度: 300G/s
Lzo 解压速度接近memcpy, 压缩率50%,压缩比解压慢2-3倍,适合读多于写(如squid)