01 最佳线程数计算
1.1 cpu密集型
n+1
当因为页缺失或其它故障而导致某一线程暂停时,额外的线程可以保证cpu的时钟周期不被浪费
1.2 Io密集型
2*n 这个是不准的,因为正常业务都是IO密集型的。
真正使用时应以下方为准
1.3 同步最佳线程数目
(线程等待时间/线程消耗CPU时间 + 1)* cpu核数cpu利用率
线程数=cpu核数cpu使用率*(1+wait time/cpu time)
W/C: 等待时间与计算时间的比值
1.4 单线程QPS
1000/(cpu time + wait time)
1.5 异步最佳线程数
wait time主要是阻塞于IO上的时间,改成异步后wait tme趋于0了,
线程数~=cpu核数 * cpu利用率
此时退化成cpu密集型了
02 QPS计算
2.1 rpc同步调用
最佳线程数 * 单线程的QPS
(1000/cpu time)*cpu核数 * cpu利用率
2.2 rpc异步调用
异步最佳线程数 * 单线程QPS
因为wait time已经趋于0了,所以此处的单线程QPS要远大于同步时的QPS;
03 总结
客户端RT=服务端RT+网络开锁
服务端RT=thread cup time(cpu消耗时间 CT) + thread wait time(cpu等待时间 WT)
单线程QPS:1000/RT
最佳线程数=(RT/CPU TIME)CPU核数cpu使用率
QPS=最佳线程数单线程的QPS
=((CT+WT)/CT)CPU核数cpu使用率 * 1000/(WT+CT)
=(1000/CT)cpu核数*cpu利用率 (没有考虑线程的上下文切换)
cpu time 是所有环境上消耗的cpu时间之和,取决于数据结构和算法;
cpu的利用率受 io 连接池 内存 编程模型等影响;
amdahl定律:当增加计算资源的时候(如cpu 内存 宽带),吞吐量能够进行相应的改进,其加速比:
speedup <= 1/(F+(1-F)/N)
F表示必须串行执行的比重
N 处理器个数
如CPU核数从1到4,只要F>0,最大加速比就不会翻4倍;
gustafson定律,对amdahl的补充:S= N-a(N-1)
N是处理器个数,a是串行时间占总执行时间的比例;
①物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id)
cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l
②cpu核数:单块CPU上面能处理数据的芯片组的数量,如双核、四核等 (cpu cores)
cat /proc/cpuinfo| grep “cpu cores”| uniq
③逻辑cpu数:简单来说,它可使处理器中的1颗内核,如2颗内核那样在操作系统中发挥作用。
cat /proc/cpuinfo| grep “processor”| wc -l
④查看cpu信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
xxxx@ubuntu:~$ free -m
total used free shared buff/cache available
Mem: 64391 12022 1280 20 51087 51664
Swap: 15258 510 14748
xxxx@ubuntu:~$ cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l
2
xxxx@ubuntu:~$ cat /proc/cpuinfo | grep “cpu cores” | uniq
cpu cores : 10
xxxx@ubuntu:~$ cat /proc/cpuinfo | grep “processor” | wc -l
40
xxxx@ubuntu:~$ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
40 Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
总核数 = 物理CPU个数 × 每颗物理CPU的核数;
总逻辑CPU数 = 物理CPU个数 ×每颗物理CPU的核数 × 超线程数。
cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l
2
cat /proc/cpuinfo| grep “cpu cores”| uniq
cpu cores : 12
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
48 Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz