问一个磁盘顺序写入的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
jiang1234321
V2EX    Linux

问一个磁盘顺序写入的问题

  •  
  •   jiang1234321
    jiangbo9510 2021-03-22 22:24:29 +08:00 2665 次点击
    这是一个创建于 1673 天前的主题,其中的信息可能已经有所发展或是发生改变。

    同时有两个进程 A 、B,每个进程都打开不同的文件。A 进程进行追加写入,这种情况下,调度到 B 进程后,B 读写 fd,需要转动磁盘。再次调度回到 A 进程,还是要再次转动磁盘,这不就是相当没有起到追加写的作用吗?

    13 条回复    2021-04-03 10:04:55 +08:00
    misaka19000
        1
    misaka19000  
       2021-03-22 22:40:30 +08:00
    不知道楼主在说什么,我猜可能是指 A 进程的追加写入没达到楼主的性能预期?
    abersheeran
        2
    abersheeran  
       2021-03-22 23:18:25 +08:00 via Android
    是的。楼主想法没错。所以一般这里会采取 mmap,让操作系统自己想办法整活,我们就别管了。
    hxndg
        3
    hxndg  
       2021-03-22 23:28:51 +08:00
    操作系统会维护页缓存不需要你来维护 dirty page,
    至于何时写入我记得是有策略吧。
    因此并不是你进程写了就立刻执行写入的。
    xuanbg
        4
    xuanbg  
       2021-03-22 23:30:18 +08:00   1
    你说调度磁头就调度磁头啊。

    无论是 A 进程还是 B 进程,都不能调度磁头。进程只能输出到文件,至于文件怎么写,写到哪里去,完全是操作系统在那里按着先来后到进行安排调度罢了。
    zhgg0
        5
    zhgg0  
       2021-03-22 23:40:45 +08:00
    不主动 fsync,进程写文件时,操作系统不一定真的写;并不是进程要求读多少文件内容,操作系统就读多少,可能多读一点。看下 pagecache 的相关文章能解决这个疑问不?
    ch2
        6
    ch2  
       2021-03-23 00:36:09 +08:00 via iPhone   3
    操作系统的意见也是很重要啊,你说转就转?
    ragnaroks
        7
    ragnaroks  
       2021-03-23 08:24:01 +08:00
    按照我的理解,都是写到内存了(file.write),由操作系统来进行物理写入(file.flush)
    yolee599
        8
    yolee599  
       2021-03-23 08:29:42 +08:00 via Android
    磁头不是操作系统调度的,也不是进程调度的,是硬盘上的 BIOS 调度的,它会处理这一切,你只需要告诉硬盘需要在哪写数据就行。数据先保存在硬盘的缓存,至于要不要转动,何时写入由硬盘自己决定
    fuchaofather
        9
    fuchaofather  
       2021-03-23 14:49:59 +08:00
    我是这样理解的. 无论是追加还是随机写, **首次磁头寻道**的时间是**必须要做**的. 而追加写比随机写快是比较**寻道后的写速度**.
    进程 A 顺序写, 进程 B 随机写, 同样的的时间片, A 写入的要远大于 B 写入数据, B 在运行期间会多次随机移动磁头速度, 即使有比较好的磁头调度还是避免不了再次寻道. 而 A 写入速度基本就是磁盘写入上限(转速)
    DoctorCat
        10
    DoctorCat  
       2021-03-23 14:50:52 +08:00
    总结:文件系统没法决定磁盘转不转。假如持续 3ms 丫要是转不到,那数据也到写缓存里了等着写盘。
    jiang1234321
        11
    jiang1234321  
    OP
       2021-04-01 13:34:53 +08:00
    @fuchaofather 很难做到进程 A 一直顺序写入吧,比如,在写入文件的时候,还有打印日志。磁盘又要转动磁头去写入日志文件。
    fuchaofather
        12
    fuchaofather  
       2021-04-02 16:52:23 +08:00
    @jiang1234321 你理解错了, 吞吐量比的是同一段时间内的读写字节数. 比如说跑车比公交快, 你不能拿跑车不跑时候跟公交跑的时候比速度吧?
    jiang1234321
        13
    jiang1234321  
    OP
       2021-04-03 10:04:55 +08:00
    @fuchaofather 没太理解这个比喻,意思是一个进程无法同时对多个文件进行追加写入吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3178 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 12:18 PVG 20:18 LAX 05:18 JFK 08:18
    Do have faith in what you're doing.
    ubao msn 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