标签: vfs

Linux 缓存驱逐

查看我的 Linux 机器上 VFS 缓存的行为,我可以看到,即使在有效空闲时(crond 和大多数其他守护程序停止,接口关闭),可用内存量也会逐渐增加,这意味着项目正在从缓存中逐出。

我做了很多谷歌搜索,但找不到任何关于如何控制的参考(除非它是 vm_swappiness 的副作用)。任何人都可以让我走上正确的道路来理解为什么在不需要新内存分配的情况下会从缓存中逐出项目?

linux cache vfs

8
推荐指数
1
解决办法
2334
查看次数

如何在 Linux 中临时提取闪存驱动器或 HDD?

假设我以这种方式挂载了一个磁盘:

mount /dev/sdb /mnt/tmp
Run Code Online (Sandbox Code Playgroud)

我在这个文件系统上打开了一些文件,不想卸载它。但是我想暂时提取设备,然后再重新连接它。我希望对该文件系统的所有读取和写入仅在缓存中执行或挂起,直到我重新连接设备。

如果我想提前暂时分离,我会使用设备映射器:

# ls -lh /dev/sdb
brw-rw---- 1 root floppy 8, 16 Sep 12 17:38 /dev/sdb
# blockdev --getsize /dev/sdb
2211840
# dmsetup create sdb_detachable --table '0 2211840 linear 8:16 0'
# mount /dev/mapper/sdb_detachable /mnt/tmp
(start working with the filesystem)
(suddenly need to detach the device)
# dmsetup suspend sdb_detachable
# dmsetup load sdb_detachable --table '0 2211840 error'
# blockdev --flushbufs /dev/sdb
(eject the device)
(maybe even use the cached part of the filesystem)
(reattach the …
Run Code Online (Sandbox Code Playgroud)

linux external-hdd usb-drive vfs device-mapper

5
推荐指数
1
解决办法
290
查看次数

对 dd 写入速度和 VFS 页面缓存感到困惑

在阅读了一些关于 Linux VFS 页面缓存和可调参数的文章后,dirty_ratio我的印象是页面缓存将作为读写缓存层运行。

但是使用下面的简单测试可以很好地提高位于页面缓存中但似乎不适用于写入的文件的读取速度。

例如

清除缓存并写入文件。

# swapoff -a
# echo 3 > /proc/sys/vm/drop_caches

# dd if=/dev/zero of=/home/flo/test bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.182474 s, 172 MB/s
Run Code Online (Sandbox Code Playgroud)

检查文件实际上是否在页面缓存中

# vmtouch /home/flo/test 
           Files: 1
     Directories: 0
  Resident Pages: 7680/7680  30M/30M  100%
         Elapsed: 0.000673 seconds
Run Code Online (Sandbox Code Playgroud)

从文件中读取以确认实际上来自缓存。

# dd if=/home/flo/test of=/dev/null bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.00824169 s, 3.8 GB/s
Run Code Online (Sandbox Code Playgroud)

删除缓存并再次读取以证明速度差异。

# echo 3 …
Run Code Online (Sandbox Code Playgroud)

storage dd hard-disk benchmark vfs

5
推荐指数
1
解决办法
577
查看次数

文件创建是否完全有序?

在 Linux 上,openat系统调用可用于创建文件并测试它们的存在。就 C/C++ 内存模型而言,创建文件并验证其存在会创建同步关系。我需要知道的是这些同步是否都彼此顺序一致。(我当然希望如此,但我实际上并没有在任何地方看到这种记录。)

例如,给定进程 p1 和 p2,以及路径 A 和 B:

如果 p1 这样做:create(A),然后 create(B)

p2 这样做:尝试打开(B),然后尝试打开(A)

并且没有其他进程干扰A或B,是否有可能p2成功打开B但找不到A?

如果它有所不同,我们可以假设所有操作都在一个文件系统中。

filesystems synchronization concurrency vfs

5
推荐指数
0
解决办法
119
查看次数

如何运行用户模式的 linux 内核?

我按照这里的步骤在用户模式下成功编译了内核:https : //btrfs.wiki.kernel.org/index.php/Debugging_Btrfs_with_GDB

但是当我./linux以各种方式开始时,它总是给我一个非常相似的错误:

pc@linux-94q0:~/linux-4.11-rc4> ./linux root=/mnt
Core dump limits :
    soft - 0
    hard - NONE
Checking that ptrace can change system call numbers...OK
Checking syscall emulation patch for ptrace...OK
Checking advanced syscall emulation patch for ptrace...OK
Checking environment variables for a tempdir...none found
Checking if /dev/shm is on tmpfs...OK
Checking PROT_EXEC mmap in /dev/shm...OK
Adding 33251328 bytes to physical memory to account for exec-shield gap
Linux version 4.11.0-rc4 (pc@linux-94q0) (gcc version 4.8.5 (SUSE Linux) ) …
Run Code Online (Sandbox Code Playgroud)

btrfs linux-kernel vfs user-mode-linux

2
推荐指数
1
解决办法
700
查看次数

“cat”如何在没有文件描述符的情况下读取文件?

我正在学习 Linux procfs,它利用虚拟文件系统,其中openreadwrite、 和 等操作release由注册到其中的函数处理。

我错误地将openandrelease保留为空指针,当我尝试读取文件的内容时,使用如下 Python 代码:

with open("/proc/testfile", "r") as f:
    content = f.read()
Run Code Online (Sandbox Code Playgroud)

程序卡住了,我从内核 dmesg 中读取到空指针被取消引用的错误,这是预期的,因为它open指向 NULL。

然而,catGNU coreutils 的命令可以完成这项工作,给我输出如下

$ cat /proc/testfile
testoutput
Run Code Online (Sandbox Code Playgroud)

这意味着cat没有调用该open函数而是直接调用readwrite也可以这样做)。

根据我的理解,open()将返回一个文件描述符,该文件描述符进一步用于处理文件,并且read()需要文件描述符才能继续。

这在里面是怎么做到的cat

linux proc cat vfs

0
推荐指数
1
解决办法
703
查看次数