V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
bigtang
V2EX  ›  Linux

修改 Linux 交换页大小,以便实现 SSD 上更快的随机查询问题?

  •  
  •   bigtang · 2023-06-14 14:14:27 +08:00 · 1483 次点击
    这是一个创建于 537 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 linux 中,用 mmap 映射一个文件返回一个内存指针,从该指针中读取一个字节,Linux 会从磁盘上读取该字节所在的整页数据(一般是 4096 字节),这导致在磁盘上随机查询,比在内存中慢数千倍,因为 SSD 本来就比内存慢 100 倍,而读取几个字节可能就要读 4096 字节整页数据,又慢了几百倍。linux 的交换页大小 4096 字节是不能更改的,除非在编译 linux 系统前修改。如果不能更改交换页大小,如何能够在用 mmap 读取几个字节时,不要从磁盘读整页数据?我的最终目的是想在 SSD 磁盘中随机查找数据,速度可以是内存的 1/100 ,但不能更慢了。
    第 1 条附言  ·  2023-06-14 15:02:26 +08:00
    我目前的系统实测:如果在内存中查询,仅需几十毫秒,如果数据全在磁盘上( SSD ),就需要几秒甚至几十秒,如果只慢 100 倍,都是可以接受的,慢 2000 倍就接受不了了。
    10 条回复    2023-06-19 22:44:08 +08:00
    billlee
        1
    billlee  
       2023-06-14 14:17:58 +08:00 via Android   ❤️ 1
    但是磁盘读取也是一次至少读 4K 的啊
    oldsix2
        2
    oldsix2  
       2023-06-14 14:31:39 +08:00
    SSD 磁盘最小 IO 是 Block 限制的吧,这个 mount 之前应该可以修改的。
    改的太小,对于一次获取大量数据的情况,IO 次数会成倍增加。
    GrayXu
        3
    GrayXu  
       2023-06-14 14:37:03 +08:00
    如#1 ,SSD 不能不读整页数据,就像 DRAM 也得按 64B 来操作。
    codehz
        4
    codehz  
       2023-06-14 14:47:26 +08:00
    还有 page size 的问题,这个部分也不是说改代码就能解决的(
    lemonleo
        5
    lemonleo  
       2023-06-14 14:52:54 +08:00
    从 SSD 向内存读取整页数据和读取几个字节数据相比,应该不会慢几百倍那么多。
    twl007
        6
    twl007  
       2023-06-14 14:56:47 +08:00
    整页读取就是为了解决按字节读取太慢的问题 如果真的按照按字节去读取 速度那是真的慢

    另外 SSD 本身底层的逻辑也是随机读写 跟 HDD 不一样
    x1596357
        7
    x1596357  
       2023-06-14 14:58:35 +08:00
    从读取几个字节跟读取 4k 速度几乎可以说没有多大差别。因为 ssd 的设计,一读就是一个 flash 的行。你可以尝试使用 vmtouch 之类的工具,先把文件预读到内存里。不要局限于一种思路。
    ho121
        8
    ho121  
       2023-06-14 15:04:49 +08:00
    1. 程序中只读取几个字节,操作系统不会真仅仅读取这几个字节的数据。第一次读取可能需要把页换到内存里,下一次读取同页的数据时,大概率是直接在内存中读取的。
    2. 硬盘读取数据也是按“块”来读取的,而不是一个字节一个字节的读取。哪怕操作系统真的读取 1 字节的数据,硬盘也会把整个块读取出来,然后返回这一个字节的数据。如果是读取连续几个字节的数据,且在同一个块内,硬盘只需要一次读操作。
    litguy
        9
    litguy  
       2023-06-14 15:15:49 +08:00   ❤️ 1
    字节读取 SSD 不支持,这是块存储
    你需要的是傲腾 memory
    MrKrabs
        10
    MrKrabs  
       2023-06-19 22:44:08 +08:00
    是不是你的 ssd 太拉了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5560 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:34 · PVG 16:34 · LAX 00:34 · JFK 03:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.