![Linux 交换,线性写入/读取](https://linux22.com/image/620674/Linux%20%E4%BA%A4%E6%8D%A2%EF%BC%8C%E7%BA%BF%E6%80%A7%E5%86%99%E5%85%A5%2F%E8%AF%BB%E5%8F%96.png)
我很困惑 Linux 是否按顺序在交换区上进行写入和读取。
现在我正在分析交换分区的压力,奇怪的是利用率接近 90%(iostat 中的 util 列),但 2xSAS RAID1 hdd 上的吞吐量只有 10MB/s。
谷歌无法提供帮助
答案1
一般而言,对交换空间的写入可以到达任何空闲的交换空间,因此写入操作往往是连续的。对交换空间的读取操作必须针对系统所需的特定数据,因此读取操作通常不是连续的。
答案2
除了随机性之外,交换读取也可能是序列化的。请记住,VM 系统正在创建真实 RAM 的假象,因此用户空间进程没有任何机会优化访问。从它的角度来看,它只是 RAM,因此它有在发生任何其他事情之前必须先阅读。
序列化随机读取的不好之处在于,它必须经过完整的往返(请求、磁头寻道、盘转动、读取、响应)之后才能发出下一个 IO 请求。
这意味着,在最坏的情况下,每个 IOP(每个线程)只有一个 4KB 页面。假设每个主轴 250 IOPS,您只能获得 500 IOPS,500/sx 4KB = 2MB/s。看来您仍然比硬件的最坏情况要好得多。可能一些预读页面集群对您有帮助。