Intel 为了更好的卖他们家的cpu,花了不少力气参与分布计算社区的开发,比如spark。如果真正用好这些芯片提供的特性,确实可以极大的提升分布式计算系统的性能。
SIMD
传统的计算指令输入是两个数,输出是一个数。SIMD指令的输入是两个数组,输出是也是数组。这就使得批量计算的效率大大提高了。Intel的CPU从最早的MMX指令,发展的SSE,以及现在的AVX,AVX2,这些指令都可以统称为SIMD指令。最初这些指令大部分是用于多媒体和图形处理领域,现在也有计算引擎和数据库系统开始利用这些SIMD指令进行加速。值得一提的是,显卡的GPU也是类似SIMD的方式来工作的,所以也有数据库开始利用GPU进行计算了。
这是一个利用了SIMD指令的数据库系统的架构图
DPDK
DPDK的作用就是利用Intel的高端网卡的特殊驱动,可以使得在用户态的普通程序绕过Linux内核,直接控制网卡收发IP包。如果利用 DPDK 在用户态实现了本来由Linux内核实现的TCP协议栈。那么就可以用来提高类似 Kafka 这样的纯转发的数据应用场景的网络性能。
ADR
Intel最近演示了利用他们家的ADR技术如何加速etcd数据库的写入性能
这项技术的专利说明在这里:https://www.google.com/patents/US20090089514
华为公司在这个基础上有一个新的专利:http://www.google.com/patents/CN103544080A?cl=zh
在专利说明里清晰地描述了 ADR 的工作机制
现今,为了保证存储系统中数据的可靠性,通常会在存储系统中增加备电单元,从而保证在电源异常和/或存储系统异常的情况下,使得内存数据不丢失,同时现今主流的备点单元是NVDIMM(Non-Volatile DIMM,非易失性内存条)。该NVDIMM在保护数据时通常是通过通用的DIMM(Dual Inline Memory Modules,双列直插式存储模块)接口与存储系统连接。因此,当存储系统电源发生异常时,CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)产生中断到PCH(Platform Controller Hub,集成南桥)芯片,在PCH中触发 ADR (Asynchronous Dram Refresh,异步内存刷新)流程,使得 CPU (Central ProcessingUnit,中央处理器)将cache缓存中的数据写入NVDIMM中的DRAM(Dynamic Random AccessMemory,动态随机存取存储器)然后再将NVDIMM置为self-refresh自刷新模式,从而使得NVDIMM完成备电切换,将DRAM数据拷贝到flash闪存中保存。
简单来说就是把一块 <100MB 的内存区域在断电的时候自动刷到 NVDIMM 中,而 NVDIMM 是一种在断电时内容不会丢失的内存(http://baike.baidu.com/item/NVDIMM)。这类技术可以统称为 Persistent Memory(http://pmem.io/)。
在过去数据库为了提供durability,标准的做法都是把用户的改动写入一个叫做 Write Ahead Log (WAL)的日志文件里。然后调用操作系统的 fsync() 函数确保这个文件的内容已经被持久化到了磁盘上。然后再返回给用户说写入已经成功。即便WAL文件的写入是顺序写,但是磁盘的fsync操作仍然是昂贵的。Persistent Memory技术可以在将来被用于改善WAL的性能。Intel对etcd的性能优化就是一个很好的榜样。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。