Linux 裸I/O

简介: 第一次听到这个词,当然也是一脸懵.

第一次听到这个词,当然也是一脸懵.


裸I/O 是什么东西呢?


裸I/O又称为直接I/O和非直接I/O相反,这不是“”废话“”么?


可是书上还真是这么写的。


究竟是什么呢?


直接 I/O(裸I/O),是指跳过操作系统的页缓存,直接跟文件系统交互来访问文件。

非直接 I/O 正好相反,文件读写时,先要经过系统的页缓存,然后再由内核或额外的系统调用,真正写入磁盘。


磁盘是一个存储设备(确切地说是块设备),可以被划分为不同的磁盘分区。而在磁盘或者磁盘分区上(lvm是直接可以基于磁盘直接做成lv的),还可以再创建文件系统,并挂载到系统的某个目录中。这样,系统就可以通过这个挂载目录,来读写文件。

换句话说,磁盘是存储数据的块设备,也是文件系统的载体。所以,文件系统确实还是要通过磁盘,来保证数据的持久化存储。


Linux 中一切皆文件,块设备、套接字、管道... 都是文件


通过相同的文件接口,来访问磁盘和文件(比如 open、read、write、close 等)


在读写普通文件时,I/O 请求会首先经过文件系统,然后由文件系统负责,来与磁盘进行交互。而在读写块设备文件时,会跳过文件系统,直接与磁盘交互,也就是所谓的“裸I/O


sda是一个物理磁盘属于块设备

 servers]# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                          7:0    0     5M  0 loop /mnt
sda                            8:0    0 558.9G  0 disk 
├─sda1                         8:1    0   500M  0 part /boot/efi
├─sda2                         8:2    0   500M  0 part /boot
└─sda3                         8:3    0 557.9G  0 part 
  ├─rootvg-rootlv (dm-0)     253:0    0     5G  0 lvm  /
  ├─rootvg-swaplv (dm-1)     253:1    0    16G  0 lvm  [SWAP]
  ├─rootvg-homelv (dm-2)     253:2    0    15G  0 lvm  /home
  ├─rootvg-varlv (dm-3)      253:3    0    80G  0 lvm  /var
  ├─rootvg-locallv (dm-4)    253:4    0     2G  0 lvm  /usr/local
  ├─rootvg-optlv (dm-5)      253:5    0    12G  0 lvm  /opt
  ├─rootvg-usrlv (dm-6)      253:6    0    10G  0 lvm  /usr
  ├─rootvg-tmplv (dm-7)      253:7    0    15G  0 lvm  /tmp
  └─rootvg-gpmasterlv (dm-8) 253:8    0   400G  0 lvm  /gpmaster
 servers]# ll /dev/sda
brw-rw---- 1 root disk 8, 0 Dec 12  2019 /dev/sda

lv 是一个链接文件,指向dm2

servers]# ll /dev/mapper/rootvg-homelv 
lrwxrwxrwx 1 root root 7 Mar 27 11:06 /dev/mapper/rootvg-homelv -> ../dm-2

dm2还是块设备。

 servers]# ll /dev/dm-2 
brw-rw---- 1 root disk 253, 2 Mar 27 11:06 /dev/dm-2

类似于这种就是裸I/O

dd if=/dev/sdb of=/dev/null bs=1M count=1024

如果if后面是一个有文件系统的目录则就是非直接I/O。先要经过系统的页缓存,然后再由内核或额外的系统调用,最后写入磁盘的。


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
7月前
|
Prometheus 运维 监控
linux磁盘I/O监控
【4月更文挑战第1天】在Linux中监控磁盘I/O性能至关重要,工具如iostat(-d显示磁盘统计)、iotop(进程级I/O查看)、vmstat、/proc/diskstats(详细统计信息)、Node Exporter(Prometheus集成)和Zabbix(动态监控与LLD)提供关键指标,如IOPS、吞吐量、利用率和服务时间,助力系统优化和故障排查。
218 4
linux磁盘I/O监控
|
7月前
|
存储 缓存 固态存储
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
109 0
|
7月前
|
缓存 网络协议 Unix
Linux(UNIX)五种网络I/O模型与IO多路复用
Linux(UNIX)五种网络I/O模型与IO多路复用
172 0
|
7月前
|
缓存 Ubuntu 网络协议
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
111 1
|
4月前
|
存储 Unix Linux
Linux I/O 重定向与管道
【8月更文挑战第17天】重定向在Linux中改变命令I/O流向,默认有">"覆盖输出至文件及">>"追加输出至文件末尾,便于保存结果;使用"<"从文件读取输入而非键盘,高效处理数据。文件描述符如0(stdin)、1(stdout)、2(stderr)标识I/O资源,支持读写操作。管道以"|"连接命令,使前一命令输出成为后一命令输入,如排序用户或找出CPU占用最高的进程,构建复杂数据处理流程。
49 9
|
4月前
|
监控 Linux
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?
|
4月前
|
Linux
Linux的I/O操作
Linux的I/O操作
|
4月前
|
存储 Unix Linux
Linux I/O 重定向与管道
【8月更文挑战第14天】输出重定向可将命令结果存入文件,如`>`覆盖写入或`>>`追加写入。输入重定向从文件读取数据,如`<`代替键盘输入。这些操作利用文件描述符(如0:stdin, 1:stdout, 2:stderr)管理I/O。管道`|`连接命令,使前一命令输出作为后一命令输入,便于数据处理,如排序用户`sort -t: -k3 -n /etc/passwd | head -3`或查找CPU占用高的进程`ps aux --sort=-%cpu | head -6`。
42 4
|
4月前
|
Unix Linux Shell
Linux I/O 重定向简介
Linux I/O 重定向简介
39 2
|
4月前
|
Linux 开发者
深入理解Linux I/O模型:同步、异步、阻塞与非阻塞
【8月更文挑战第1天】在探索操作系统的奥秘中,I/O模型作为影响性能的关键因素之一,常常让开发者们感到困惑。本文将通过浅显易懂的语言和实际代码示例,揭示Linux下同步与异步、阻塞与非阻塞的概念及其区别,并指导如何在实际应用中选择合适的I/O模型以优化程序性能。
145 1