LWN:关于readahead的讨论!

银河麒麟系统完美安装EasyConnect Kylin V10桌面版完美安装EasyConnect 阅读详情

关注了就能看到更多这么棒的文章哦~

A discussion on readahead

By Jake Edge
June 15, 2022
LSFMM
DeepL assisted translation
https://lwn.net/Articles/897786/

Readahead 是一种 I/O 优化,让系统读取的数据要比应用程序所要求的更多,因为相信这些额外的数据很快会被用上。在 2022 年 Linux 存储、文件系统、内存管理和 BPF 峰会(LSFMM)上,Matthew Wilcox 在 Steve French 和 David Howells 的协助下,主持了一次讨论 Readahead 的会议,特别是与网络文件系统有关的内容。底层存储设备的 latency 需要被考虑到预先多读取多少数据的计算过程中,但如何做到这一点,尚未完全确定。

Wilcox 首先介绍了一下 readahead。如果用户空间正在一个字节一个字节地读取一个文件,那么 Linux 实际上并不会这么做;相反,它发出更大块(bigger chunk)的读取,比如说每笔 64KB,这些数据被存储在 page cache 里。从对存储设备发起一个 page 的 read,一直到它真的出现在 page cache 中,是有一定的 latency 的;这个延迟在 Linux 支持的各种存储类型中各不相同。同样是网络存储,可以是本地存储在千兆以太网上的数据,也可以是存储在地球另一端的明显较慢的链接上的数据。同样,对于本地存储来说,既可能是每秒 5GB 的 NVMe 固态硬盘,也可能是一些 "在贸易展上从供应商处获得的蹩脚的 U 盘"。这里有 "很多不同情况需要处理"。

c5cf0535df26d1e93f7de76573fd9f63.png

[Matthew Wilcox]

根据他的经验,block-layer 开发人员倾向于使用 direct I/O 来进行所有测试;他们认为 "page cache 很讨厌",所以他们在测试中避免使用它。James Bottomley 说,他们经常需要在测试中排除 page cache 的影响,以消除他们控制之外的那些变量。Wilcox 说,这其实不太好,因为用户所看到的性能表现,是包括了 page cache 在内的情况;如果能在用户之前就发现那些由于有太多的或太少的 readahead 导致性能变差的问题,那就再好不过了。

他说,他有一个 KernelNewbies 的 wiki 页面,正在收集记录他对 readahead 和 page cache 的整体的想法。page cache "在某些方面很厉害,在其他方面则很糟糕",但如果能解决它的问题就好了。安卓开发者遇到了 readahead 的问题,但 "他们以最糟糕的方式解决了这个问题"。他介绍说,他们改变了 readahead 的设置,将其从 256KB 改为了几百兆,以便能从应用程序的启动时间中减少那么 "几分之一秒"。当然,这也会有其他的影响;当他们试图向上游打 patch 时,内存管理开发者直接会拒绝。

Howells 建议,安卓开发者应该使用 fadvise()(他补充说或者是 madvise())来表示文件应该有更积极的 readahead。但 Willcox 并不同意。"我们能不能不要再假设用户空间知道自己在做什么?" Bottomley 说,安卓是一个特殊的环境;它使用了一个日志结构的文件系统,所以他们的这个方法可能真是合理的。Wilcox 对这一点表示了一些怀疑。

总的来说,有一堆 readahead 问题需要解决。"我想说 'f' 那个词了,也就是 folio,其实在其中起了一点作用。" 目前,使用较大的 folio 的场景主要是由 readahead 所引发的,readahead 数据越大,容纳它的 folio 页面就越大。这对测试是很有好处的。支持更大 folio 的文件系统,目前只有 XFS 这一个(尽管 AFS 和 v9fs 的 patch 正在排队等待合入),它会分配四个 page (所谓的 order-2)folio。

Wilcox 说,French 让他知道了 Windows 在 CIFS 上为 readahead 进行的读取是非常大的。French 同意这一点,他指出,由于预期会有网络延迟,Windows 可以将 readahead 提高到 16MB,尽管这似乎降低了性能。他用了一些各种不同大小(256KB、512KB、1MB、4MB)的场景进行了测试,发现每一种都有更好的性能,最亮眼的数据是使用 512KB 时。在 Azure 云上,该值被设置为 1MB,因为一些 workload 在 4MB 时会有性能下降。

他说,根据他的测试结果,Linux CIFS 服务器的默认值是 4MB。很明显,任何小于 1MB 的读取都会带来性能问题,除非它的网络速度非常快。他所看到的问题是如果合理地设置这个值,对它进行调小来限流,或者适当提高。有时 page cache 其实比文件系统知道的信息更加多,或者有时又更加少,并且还需要考虑 network layer 的影响。他不清楚这一切该如何解决。

Wilcox 说,有一种机制可以将这种信息从文件系统传递给虚拟文件系统(VFS)层和使用 BDI(struct backing_dev_info)的 page cache。他说这就是 VFS 利用来了解底层存储的性能特征的地方,目前它可能没有所有那些最合适的信息,但这是放置这类信息的位置。

当用户空间正在一个字节一个字节地读取文件时,就会发出 64KB 的读取;一个 "这个 readahead 是否有用 " 的标记被放置在了 buffer 中的 20KB 位置左右,当达到这个标记时,就会发出另一个 64KB 单位的读取操作。其目的是在用户空间使用完所剩下的 44KB 之前就完成第二次读取,但文件系统不知道读取的延迟是多少。他说,人们可以拍脑袋说去测量一下进行读取所需的时间,并将其与用户空间的消耗率进行比较,以更好地确定何时来安排下一次 read,但这并没有实现出来。

第二个 64KB 的读取操作,就会把 mark 标记放在 buffer 开头;当达到这个 mark 时,它决定增加 readahead buffer 并再读取 128KB。它还会再增加一次(也就是到 256KB),但不会再进一步了,尽管它可能其实应该继续增加。256KB 的限制已经存在了 20 年,"在这段时间里,I/O 几乎没有任何变化",Wilcox 讲了一句反话。目前距离当初增加这个限制的时候已经过去了很多年了。Josef Bacik 读了 Jan Kara 的聊天区评论,其中说 SUSE 多年来一直在使用 512KB 的限制。考虑到这个情况,Wilcox 认为应该立即将最大限值改为 1MB。

但是,与其直接增加读取的 size,Wilcox 更愿意发出多个 256KB 的紧挨着的 read 操作,因为这将有助于 page cache 来跟踪前面所读取的数据是否真的被使用了。French 说,这对 CIFS 来说是比较友好的,因为多个较小的 read 在性能上表现更好。Jeff Layton 通过 Zoom 插进来说,他认为单个较大的 read 对 NFS 来说更好,而听到较小的 read 在 CIFS 看来更加好,他表示很惊讶。

Howells 说,哪个选项更好,完全取决于文件系统。Ted Ts'o 说,这也将会跟底层存储设备有关;在内存受限的设备上增加 readahead 大小可能也会有问题。不会有一个 "神奇的 readahead 公式" 可以在所有情况下都适用。他建议使用 BPF 来实验不同的算法,这样的话,安排一位研究生就可以很容易地尝试各种不同的想法,看看哪种方法最有效。Wilcox 说,他本来想反驳这个想法,但后来决定他要赞同这个主意,因为这样一来就会是别人的问题了,现场哄堂大笑。

Chuck Lever 认为在讨论中,关于 readahead 的情况被大大简化了。在一个程序每次读取一个字节的原始例子中,没有理由增加到 64KB 以上,因为这就足够跟上程序运行的速度了。如果请求太多的数据,来用实际上不会被读取到的 page 填充了 page cache,这不是正确的做法。

还有一个问题,例如在网络文件系统上排队进行 1MB 的读取,在读取过程中会耽误其他较小的 request,比如 metadata 的更新。他同意需要进行实验,并认为测试应该要比立即增加内核的 readahead size 要优先完成。有必要对许多不同的 workload、文件系统所进行的测试,以确定这种改动的整体系统性影响是什么样的。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

cd271ae1bda6a73ae6b33eaad0605702.png

在Ansys Simplorer中设计三相逆变器,并与Maxwell FEA耦合,实现160kW PMSM 在这篇博文中,我们将探讨如何使用设计三相逆变器,并将其与Ansys Maxwell中的电磁有限元分析模型耦合,以获得准确的系统级结果。Ansys Electronics为多域仿真提供了强大的生态系统,可实现跨各种物理领域的无缝集成。Maxwell用于电磁有限元分析 (FEA),Simplorer(Twin Builder) 用于系统级逆变器和控制器设计,Icepak用于电子热仿真。例如,我们将使用 Simplorer 介绍160 kW、8 极永磁同步电机 (PMSM)的逆变器设计过程。让我们开始吧! 阅读详情

相关推荐

手把手教你用vLLM在昇腾910B上部署Qwen3-Embedding-8B模型(保姆级避坑指南)

本文详细介绍了如何在昇腾910B芯片上使用vLLM推理引擎部署Qwen3-Embedding-8B模型的全流程,包括环境准备、vLLM-ascend定制化安装、模型获取与校验、环境变量配置、服务启动参数优化、性能压测及生产级部署建议。特别针对昇腾生态的开发者,提供了保姆级的避坑指南和实用技巧,帮助实现高效稳定的模型部署。

weixin_28726671的博客 463

LWN:改进page-fault的可扩展性!

关注了就能看到更多这么棒的文章哦~Improving page-fault scalabilityBy Jonathan CorbetMay 29, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932298/某些话题总是每年都要回到开发会议上来讨论一次,通常是因为开发人员仍在努力针对某个特定的问题寻找一个可行的解决...

Linux News搬运工 1164

UG NX二次开发(C++)-NX2406系列二次开发编程模板配置

前面已经写了有关UG NX二次开发编程模板配置的文章,但是由于NX2406/2412系列的版本中,在UGOpen文件夹中没有了vs_files文件夹了,而是采用了VSIX Project的方式配置(其适用于VS2019),在VS2022中不能正确的配置。我结合以前配置模板的经验和现在的配置方式讲一下NX2406系列二次开发编程模板的配置。我把相应的编程模板放在资源文件UG NX二次开发编程模板(基于NX2406版本制作)中,方便大家下载使用。

GimiGimmy 2640

LWN:利用page folio来明确内存操作!

关注了就能看到更多这么棒的文章哦~Clarifying memory management with page foliosBy Jonathan CorbetMarch 18, 2021...

Linux News搬运工 2790

使用Simulink对固定翼无人机的自动起飞与降落进行仿真

本文介绍了基于Simulink的固定翼无人机自动起飞与降落控制系统设计方法。系统包含飞行器动力学模型、控制系统、环境模拟等模块,通过简化动力学方程描述无人机运动特性。详细说明了从创建模型、设置动力学方程、设计PID控制器(包括自动起飞和降落控制策略)到添加环境模拟的完整仿真流程。重点阐述了升降舵和发动机推力的控制律设计,以及性能评估要点。本方法可有效验证控制系统设计,优化飞行稳定性和安全性参数,为无人机自主控制提供仿真支持。

amy_mhd的博客 223

[STM32F103C8T6]W5500+Modbus TCP(HAL库)

本章节是博主学习Modbus TCP所写的一篇文章Modbus TCP是Modbus的一个分支,主要用到网口通信的,在工业上也用的很频繁,我们公司最近的项目就是用的W5500+modbus TCP来和PC端的上位机通信和交互的。虽然这个项目不是我在写代码,但是我都学了Modbus RTU了,那我也抽空学习一下Modbus TCP吧。本次的Modbus TCP不是博主写的,是一个大佬开源的一个W5500写的一个Mobus TCP代码,我在这个基础上自己写了主机读从机多个数据,和主机写从机寄存器的函数。

sinat_58149788的博客 4086

LWN:9月份LPC上关于folio的一次讨论!

关注了就能看到更多这么棒的文章哦~A discussion on foliosBy Jake EdgeSeptember 22, 2021LPCDeepL assisted transla...

Linux News搬运工 599

YOLOv10改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤

本文记录的是。采用深度可分离卷积将标准卷积分解为深度卷积和1×1卷积。同时,引入来,避免非线性层导致的性能下降问题。本文将应用到YOLOv10中,借助其高效的结构和特性,在保持一定精度的前提下,显著降低YOLOv10的计算复杂度和内存占用。

Limiiiing的博客 532

LWN:参与者共同记录page flags!

关注了就能看到更多这么棒的文章哦~Documenting page flags by committeeBy Jonathan CorbetMay 22, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/974515/对于系统中的每个内存页面(page),内核都会维护一组页面标志(page flag),描述页面的使...

Linux News搬运工 546

Python爬虫教程:抓取电商网站评论(以淘宝和京东为例)

通过本文的介绍,我们学会了如何使用Python编写爬虫,抓取淘宝和京东等电商平台的商品评论数据。我们介绍了如何使用电商平台提供的开放API以及如何通过模拟浏览器来抓取动态加载的数据。此外,我们还讨论了如何应对反爬虫技术,如何存储抓取的数据等。爬取电商平台的数据是一个强大的工具,能够为市场分析、消费者行为研究、产品优化等领域提供有力的支持。然而,在使用爬虫技术时,我们必须遵循法律法规,尊重平台的隐私政策,避免滥用数据。

2201_76125261的博客 1737

【Microchip】微芯 MPLAB® X IDE开发环境新建项目(点亮1颗LED灯)(常用右键菜单快捷键)

1.新建项目2. 选择芯片型号和调试器3.选择编译器4.项目命名和选择文件路径5.新建成功,给项目添加main.c7.将新建的mainXC16.c文件添加进项目6000000UL这三个就是。

Naiva的博客 448

LWN: folio 改动未能合入!

关注了就能看到更多这么棒的文章哦~The folio pull-request pushbackBy Jonathan CorbetSeptember 10, 2021DeepL assi...

Linux News搬运工 417

第02章:HSA-Runtime架构概览

摘要: 本章深入解析HSA Runtime的三层架构设计,包括公共API层(C语言接口)、核心实现层(C++业务逻辑)和驱动抽象层(硬件交互)。重点介绍了Runtime的核心组件(Agent、Queue、Signal、Memory)及其关系,以及初始化流程、配置选项和调试功能。通过学习,读者将掌握HSA Runtime的整体架构,为后续模块学习奠定基础。

图形/计算GPU的驱动与虚拟化技术分享园地 2916

LWN:我希望看到的关于readahead的文档!

关注了就能看到更多这么棒的文章哦~Readahead: the documentation I wanted to readApril 8, 2022This article was contributed by Neil BrownDeepL assisted translationhttps://lwn.net/Articles/888715/Linux 内核中的 r...

Linux News搬运工 717

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LWN:5.13合并窗口第一部分!

关注了就能看到更多这么棒的文章哦~The first half of the 5.13 merge windowBy Jonathan CorbetApril 30, 2021DeepL ...

Linux News搬运工 336

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深入解析Linux IO调用链与性能优化

IO操作是Linux系统编程的核心基础,涉及从用户空间到内核的多层调用链。理解C标准库缓冲区、系统调用接口和内核页缓存的工作原理,对于优化IO密集型应用至关重要。通过分析文件流缓冲策略、VFS抽象层和块设备调度机制,开发者可以掌握减少系统调用开销、提升数据吞吐量的关键技术。在实际场景中,合理选择mmap内存映射、AIO异步IO或O_DIRECT直接IO等方案,能够显著提升数据库、大数据处理等应用的性能表现。本文结合Linux内核参数调优和SSD特别优化等实践技巧,为系统级软件开发提供全面的IO性能优化指南。

weixin_34111790的博客 457

jffs2文件系统浅析----第二章从文件创建到flash固化存储

在第一章中我们讲述了jffs2文件系统如何通过文件ino信息找到flash中对应文件的数据实体,本章将与各位探讨下如何将文件固化到flash中存储。

牧羊人的博客 539

Linux内核源代码分析:文件系统的read操作全流程

本文详细解析了Linux 6.8内核中文件系统read操作的全流程,从用户态的read()系统调用开始,经过内核态的sys_read入口函数,转至VFS层的vfs_read通用接口,最终到达具体文件系统层如ext4的实现。核心过程涉及从页缓存中读取数据,若数据不在缓存中,则通过文件系统提供的方法(如ext4_read_folio)从块设备读取并加载到页缓存。整个流程展现了Linux内核如何高效地管理文件I/O操作,通过页缓存机制将磁盘I/O转换为快速的内存操作,从而提高文件读写的性能。

Linux内核研究者 1879

Linux基础 -- 文件系统之 PageUptodate

Uptodate=这页里的数据是完整可信的。文件系统据此决定是否要先读满/补零,从而保证页缓存语义正确,避免把垃圾字节写回到底层存储。这是等写入前置逻辑做分支选择的关键标志。

sz66cm 学习随笔 311

madvise()函数的解析

是一个用于向操作系统提供内存使用建议的系统调用(主要在 Linux 和类 Unix 系统中),目的是优化内存管理策略,从而提升程序性能。它允许应用程序告知内核某块内存区域的预期访问模式,内核会根据这些建议调整预读、缓存、分页等行为。)是 Linux 特有,其他系统(如 BSD)可能支持不同选项。,可以在处理大内存、文件映射或实时性要求高的场景中显著优化性能。内核可能忽略建议,具体行为取决于实现。通常需要按页对齐,否则可能失败(

qq_55655082的博客 1071

Android性能优化——合理进行内存管理

原文链接 https://developer.android.com/topic/performance/memory-overview https://developer.android.com/topic/performance/memory 内存管理概述 Android运行时(ART)和Dalvik虚拟机使用分页和内存映射(映射)来管理内存。这意味着应用程序的任何内存操作(无论...

BridgeGeorge 2334

SSD硬盘配置最佳实践

本文原创作者杜霆,京东商城基础平台部MySQL DBA,经作者同意发表于本人博客,如需转载需经本人同意。一、测试背景服务器升级SSD后,速度和性能没有得到应有的提升,原因是没有正确使用SSD,主要是raid、linux、mysql数据库等相关参数没有正确的配置,本文对SSD的相关参数进行了对比性能测试,根据相关资料以及测试结果得出相关结论,了解实用场景以及对应优势。二、测试环境主机:172.20....

weixin_33981932的博客 918

[转]LWN:The 2022 Linux Storage, Filesystem, Memory-Management, and BPF Summit

The 2022 Linux Storage, Filesystem, Memory-Management, and BPF Summit By Jonathan Corbet May 4, 2022 DeepL assisted translation https://lwn.net/Articles/893733/ Linux Storage, Filesystem, Memory-Management, and BPF Summit(LSFMM)一直以来都是许多核心的内核开发者的重要聚会之一。不过,上

m0_51717456的博客 359

[转]LWN:回收未用的页表页的多种方法

Ways to reclaim unused page-table pages By Jonathan Corbet May 9, 2022 LSFMM DeepL assisted translation https://lwn.net/Articles/893726/ 内存管理子系统最重要的工作之一就是回收未使用(或很少使用)的内存,能够更好地利用内存。但是,如果涉及到内存管理的核心数据结构之一——页表(page table)的时候,这个子系统往往无法处理好。在 2022 年的 Linux 存储、文件系

m0_51717456的博客 267

madvise和fadvise的区别

madvise() and posix_fadvise() are not synonymous. madvise() tells the kernel (give advise) what to do with existing memory region while fadvise() tells the kernel what to do with cached (or future cac

珺珺去哪儿 4510

LWN:改进内存管理相关的文档!

关注了就能看到更多这么棒的文章哦~Improving memory-management documentationBy Jonathan CorbetMay 10, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/894374/如同内核的大部分内容一样,内存管理子系统的文档是不太够的,而且大部分现存...

Linux News搬运工 349

LWN:LSFMM 远程参会的体验!

关注了就能看到更多这么棒的文章哦~Remote participation at LSFMMBy Jake EdgeJune 15, 2022LSFMMDeepL assisted translationhttps://lwn.net/Articles/897915/和近期进行的许多其他会议一样,2022 年的 Linux 存储、文件系统、内存管理和 BPF 峰会(LSF...

Linux News搬运工 427
上一篇: LWN:运行fstests的最好方式!
下一篇: LWN:LSFMM 远程参会的体验!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值