缓存技术:从CPU Cache到AI KV Cache (二)Linux内核Cache

缓存技术:从CPU Cache到AI KV Cache (二)Linux内核Cache 三、软件缓存时代:操作系统和数据库也开始缓存上一节介绍了CPU 与内存之间的速度差及其解决方案,本节我们关注内存与磁盘之间的速度差,以及操作系统和数据库等软件如何通过缓存机制缓解这一瓶颈。(一)Linux内核的Buffer Cache和Page Cache1.BufferCacheBuffer Cache继承自Unix内核设计,Linux是类Unix系统,因此在Linux内核之初就存在这个方案。Buffer Cache是内核为了解决磁盘访问过慢而设计的、存在于内存里的块级缓存系统。内核虽然可以直接读写磁盘,但磁盘的传输速度很慢,这样系统的响应时间会很长,吞吐量会很差,性能会很糟糕。所以内核通过在内存中保留Buffer Cache区域来减少磁盘访问的频率。在Unix/Linux看来,disk由很多block组成,每个block里存放着512B、1KB、2KB等大小的数据。通过Buffer Cache的数据结构可以唯一确定一个disk block:struct buf{dev_t dev;//表示块设备int blockno;//标识块号char data[];//标识块中的数据...};Buffer Cache的每个块由 struct buf 结构体表示,内核通过双向循环链表的形式,将其组织成哈希队列和空闲链表,实现对其高效的查找和分配。对于文件系统上的常规文件访问,都必须经过Buffer Cache。(1)读取数据时,使用bread(dev, block)接口,如果缓存命中,直接返回buffer;如果没有命中,则通过getblk()接口分配缓存,并发起磁盘读取,等待完成后返回buffer。