修改 Linux 交换页大小,以便实现 SSD 上更快的随机查询问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
bigtang
V2EX    Linux

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

  •  
  •   bigtang 2023-06-14 14:14:27 +08:00 1867 次点击
    这是一个创建于 851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 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     Solana     5956 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 01:59 PVG 09:59 LAX 18:59 JFK 21:59
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86