查询模型
查询模型就是定义如何支持服务端多个并发服务,这里我们引入了worker的抽象概念,可以是线程也可以是进程,就是支持客户端请求并且返回结果的。
进程模型
进程池模型
不利于cache,并且进程之间的通信依赖于tcp,shared memory啥的,比较重。
线程模型
内存和cpu布局
一种是每个cpu通过systembus来访问内存的,这和cpu和内存区域的相对位置不影响速度。
更加现代的是下面这种
如果不是访问local的memory的话,要和别的cpu进行inter connected,然后copy到本地。这可能比本地的要慢50%。所以我们可以在要访问内存最近的cpu核上跑worker。可以用linux move pages, numactl
内存分配
是lazy的,就是先扩展进程的数据段,然后要用的时候,才到物理页,触发page fault.
第二个如果group放置的话,比os乱搞可以快大概30%。并且会随着核心的上升而越来越明显。
计划模型
hyper
可以找到空闲的cpu,然后steal,内存,缓存到本地。
hana
watchdog记录和更新的是全局信息
SQLOS
就是在内核态的os上建一个用户态的os,提供任务调度,IO调度,高级版的事务锁啥的。
超载
解决
Summary
track内存分布,就像分布式系统中的本地分片。
最后,向不良人6大结局致敬。