如果这个问题过于面向程序员,请告诉我。我想知道是否有人熟悉Linux 2.6上open()系统调用的O_DIRECT标志?Linus 贬低它的使用,但高性能文件写入似乎表明它的使用。我想知道任何现实世界的经验和建议。
更多信息:我正在使用的应用程序确实维护着自己的缓存,这样做的速度平均提高了 5 倍或更多。写入文件时,缓存的内容必须写出到文件系统缓存,这似乎是多余的,而且是一个性能问题。
我希望我说对了:文件inode
包含数据,例如 inode 编号、上次修改时间、所有权等 – 以及条目:»删除时间«。这让我感到好奇:
删除文件意味着删除它的 inode number,从而将链接到它的存储空间标记为可用。有一些工具可以恢复(意外)删除的文件(例如从日志中,如果可用)。我知道stat
命令。
日志中的“已删除文件”条目是什么样的?
我的猜测是一个非常不起眼的输出,例如发出stat
命令。
我知道删除文件并尝试恢复它会是一种亲身体验,但是我现在还没有在没有外部帮助的情况下可以做到这一点,我想确切地了解我在做什么。目前进入数据复活对我来说是一种偏题,因为我试图牢牢掌握基本的东西......我不懒惰,这不是家庭作业,这是私人学习。
我想隐藏一些文件,这样甚至ls -a
找不到它。我不是在谈论添加“。” 在文件名前面。我在想是否可以创建单独的系统调用来访问这些文件 实际需要的是对用户隐藏一些日志文件。我正在存储一些文件的 MAC 数据,不希望用户看到这些日志文件。目前我只知道一种隐藏数据的方法,即通过添加 '.' 在文件名前面。但是用户可以通过简单的调用来查看该文件ls -a
。所以我想知道是否有其他方法可以隐藏这些日志数据?
原始设备 (/dev/raw/rawN) 是 O_DIRECT I/O 的特例。这些设备可以在不指定 O_DIRECT 的情况下打开,但仍提供直接 I/O 语义。因此,所有相同的规则都适用于适用于使用 O_DIRECT 打开的文件(或设备)的原始设备。
这是否指的是今天/dev/sda
和其他少数人?
我目前正在为 Ubuntu 开发 PCI 设备驱动程序。我有一些关于 PCI 驱动程序的示例代码,但我很难理解 ioremap 和 file_operation.mmap。
文件操作mmap说明:
内存映射是现代 Unix 系统最有趣的特性之一。就驱动程序而言,可以实现内存映射,为用户程序提供对设备内存的直接访问。映射设备意味着将一系列用户空间地址关联到设备内存。每当程序在分配的地址范围内读取或写入时,它实际上是在访问设备。
ioremap 的描述:
在许多系统上,根本无法通过这种方式直接访问 I/O 内存。所以必须先建立映射。这就是ioremap函数的作用。该函数是专门为I/O内存区域分配虚拟地址而设计的。
以上描述均来自“makelinux”。但我仍然不确定我是否正确理解了这两个函数之间的区别。现在,我的理解是这样的fops.mmap
:(文件操作 mmap)将一系列用户空间地址与设备内存相关联。这意味着对于 pci 设备,我们BAR
使用fops.mmap
. 使用ioremap
,我们为这些从fops.mmap
.
如果我错了,有人能告诉我吗?谢谢~
附注。我也在 Ubuntu 社区发布了这个,希望我没有违反任何规则。
对我来说,找出内核中 I/O 调度程序的最佳选择是一个挑战。首先我了解到这是主观的,然后它取决于您使用的文件系统。
我知道您No-op
肯定应该使用固态硬盘 (SSD)。
我想知道的是包含 Ext4 和 NTFS 文件系统(MBR 风格)的普通(旋转)HDD 的最佳选择。
GPT 或 MBR 对我的选择有什么影响吗?
filesystems ×3
io ×2
linux ×2
linux-kernel ×2
atime ×1
devices ×1
files ×1
fuse ×1
hard-disk ×1
inode ×1
journaling ×1
kernel ×1
memory ×1
pci ×1
performance ×1
programming ×1
scheduling ×1
udev ×1