对数据存储设计中16KB的思考

早上在上班路途中突然思考到一个问题,为什么一些存储设计上都偏向于16KB这个大小,为什么不是32KB,8KB,64KB呢。比如MySQL在存储一页数据的时候是16KBKafkaProducer发送消息的时候存储到RecordAccumulator中的BufferPool的时候是16KB

根据讨论的结果,有人猜测是操作系统的页数据,我也去看了Linux查询的时候会有一个Page Cache,也就是常说的高速缓存,它是以页为单位,一页的默认大小是4KB。这是早期的缓存方案存储的大小,通过Google查询到IEEE(Institute of Electrical and Electronics Engineers)电器电子工程师学会上发表的一篇研究 → Using 4KB page size for Virtual Memory is obsolete

摘取结论为:

A 4 KB page size has been used for Virtual Memory since the sixties. In fact, today, the most common page size is still 4 KB. Choosing a page size is finding the middle ground between several factors. On the one hand, a smaller page will reduce fragmentation; thus saving memory space. On the other hand, a larger page will increase TLB coverage; thus eliminating the need to access memory resident page tables. During the years that the 4 KB page has been employed, memory size has increased from Megabytes to Gigabytes. We can sacrifice some space for higher performance. With the aim of obtaining the optimal page size, we simulated applications from the SPEC2000 suite. We measured TLB misses and memory usage of all page sizes that are powers of two, ranging from 4 KB to 256 KB. Based on our results, we show that the use of 16 KB size for the base page is the recommended selection. Another way of increasing page size and TLB coverage is using superpages. Many machines support several page sizes, which let the OS use several page sizes. In this paper we survey various ways of making the most of superpages. We adopt a simple solution of superpaging with two page sizes. Based on our results, we suggest a base page of 16 KB for code or small data segments and a larger page of 256 KB for large data segments.

自60年代以来,虚拟内存一直采用4KB的页面大小。事实上,今天,最常见的页面大小仍然是4 KB。选择页面大小是在几个因素中找到中间点。一方面,较小的页面可以减少碎片,从而节省内存空间。另一方面,较大的页面将增加TLB覆盖率;从而消除访问内存常驻页表的需要。在采用4 KB页的这些年里,内存大小已经从Megabytes增加到Gigabytes。我们可以牺牲一些空间来获得更高的性能。为了获得最佳的页面大小,我们模拟了SPEC2000套件的应用。我们测量了从4 KB到256 KB的所有页面大小的2次幂的TLB丢失和内存使用情况。根据我们的结果,我们表明,使用16 KB大小的基本页是推荐的选择。另一种增加页面大小和TLB覆盖率的方法是使用超级页面。许多机器支持多种页面大小,这让操作系统使用多种页面大小。在本文中,我们调查了各种充分利用超级页的方法。我们采用了一种简单的解决方案,即使用两种页面大小的超级分页。根据我们的结果,我们建议代码或小数据段采用16 KB的基本页,大数据段采用256 KB的大页。

TLB(Translation Lookaside Buffer) 转译后备缓冲器,也是CPU的一种缓存,介于CPU和高速缓存之间,或者CPU缓存与主内存之间,作用就是将虚拟地址和物理地址进行映射和转换。在对SPEC CPU2000(详细介绍可查看 SPEC CPU2000 )套件的模拟,在数据页4KB - 25KB之间的,16KBTLB丢失率和覆盖率最低,所以对这种设计类型的CPU标准,16KB才是缓存大小的最佳推荐。目前个人猜想是如此的,后期还会请教大佬解释再来更新。

牛逼:cow: