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

2021-03-22 22:24:29 +08:00
 jiang1234321

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

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

无论是 A 进程还是 B 进程,都不能调度磁头。进程只能输出到文件,至于文件怎么写,写到哪里去,完全是操作系统在那里按着先来后到进行安排调度罢了。
zhgg0
2021-03-22 23:40:45 +08:00
不主动 fsync,进程写文件时,操作系统不一定真的写;并不是进程要求读多少文件内容,操作系统就读多少,可能多读一点。看下 pagecache 的相关文章能解决这个疑问不?
ch2
2021-03-23 00:36:09 +08:00
操作系统的意见也是很重要啊,你说转就转?
ragnaroks
2021-03-23 08:24:01 +08:00
按照我的理解,都是写到内存了(file.write),由操作系统来进行物理写入(file.flush)
yolee599
2021-03-23 08:29:42 +08:00
磁头不是操作系统调度的,也不是进程调度的,是硬盘上的 BIOS 调度的,它会处理这一切,你只需要告诉硬盘需要在哪写数据就行。数据先保存在硬盘的缓存,至于要不要转动,何时写入由硬盘自己决定
fuchaofather
2021-03-23 14:49:59 +08:00
我是这样理解的. 无论是追加还是随机写, **首次磁头寻道**的时间是**必须要做**的. 而追加写比随机写快是比较**寻道后的写速度**.
进程 A 顺序写, 进程 B 随机写, 同样的的时间片, A 写入的要远大于 B 写入数据, B 在运行期间会多次随机移动磁头速度, 即使有比较好的磁头调度还是避免不了再次寻道. 而 A 写入速度基本就是磁盘写入上限(转速)
DoctorCat
2021-03-23 14:50:52 +08:00
总结:文件系统没法决定磁盘转不转。假如持续 3ms 丫要是转不到,那数据也到写缓存里了等着写盘。
jiang1234321
2021-04-01 13:34:53 +08:00
@fuchaofather 很难做到进程 A 一直顺序写入吧,比如,在写入文件的时候,还有打印日志。磁盘又要转动磁头去写入日志文件。
fuchaofather
2021-04-02 16:52:23 +08:00
@jiang1234321 你理解错了, 吞吐量比的是同一段时间内的读写字节数. 比如说跑车比公交快, 你不能拿跑车不跑时候跟公交跑的时候比速度吧?
jiang1234321
2021-04-03 10:04:55 +08:00
@fuchaofather 没太理解这个比喻,意思是一个进程无法同时对多个文件进行追加写入吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764073

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX