I/O系统和性能——漫谈数据路径
|
|
2003-01-20·
·雪里弄剑··天极商务应用
|
1 2 3 4 下一页 |
这篇专稿准备探讨以前从未涉及的存储和输入输出系统相关领域的内容。我一直相信,万丈高楼平地起。因此,这次,我们将从应用的角度初看一下输入输出系统工作方式的端倪。
多数的人都会认为,要了解输入输出系统的工作方式必须从硬件开始。我的看法则恰恰相反,这是因为存储硬件只是获取并存储应用、操作系统、文件系统和容量管理器提供的信息的一种工具。我相信,如果你希望了解硬件系统在软件系统指挥下从事的工作,那么你首先需要知道完整的数据路径(这是我惯用的说法)。这一数据路径包括:
- 应用
- 操作系统和可调节器(tunables)
- 文件系统和(或)容量管理器(volume manager)
- 存储硬件(即I/O设备)
如果你对应用发出输入输出请求的方式以及输入输出请求向操作系统及其底层传送的各类信息没有一个清楚的认识,那么要想掌握硬件层级的输入输出请求工作方式几乎是不可能的。原因是你根本不知道系统硬件为什么会以目前的这种方式运作,也不知道输入输出请求方式为什么是这个样子。考虑到这些问题,接下来的几个月,我们将围绕硬件的输入输出路径展开探讨,随后,我们还会对硬件自身进行研究。当这一部分完结之后,我们的视野将会转向与存储相关的领域(包括相关软硬件的评估和性能等问题)。
I/O路径
应用程序通常会采用一种POSIX标准调用方式发出创建文件的请求。POSIX标准调用方式至少有以下两种:
1、采用open(2)指令的系统调用来创建或打开文件。对系统的输入输出控制是直接通过采用read(2)、write(2)、pread(2)、pwrite(2) 指令与(或)POSIX标准异步输入输出程序aio_read(3RT)、aio_write(3RT)、lio_listio(3RT),调用原始设备、容量管理器与/或文件系统来实现的。
2、用fopen(3)指令创建或打开文件。输入输出控制是经由POSIX标准的C语言函数库包(包括fread、fwrite、fprint指令)来实现的。如果一个文件是用fopen(3)指令打开的,那么这时贯穿系统的初始路径与用open(2)指令的系统调用打开文件时是不一样的。通常来说,由于相较采取直接系统调用来说,限制更少,因而这种创建和打开文件的方式得到了更广泛的应用。
由于POSIX标准得到了UNIX、Windows、Linux,甚至是大型机系统的支持,因此,这两种方式都被应用到了上述系统之上。
使用C函数库
使用fopen(3)指令,要调用C函数库包(在UNIX和Linux系统上为libc.a),此时,对每一打开的文件来说,数据将从用户的数据区迁移到库缓冲器(library buffer)。C函数库通常被人们看作标准的输入输出方式。库缓冲器字节数的默认值见下表:
| 操作系统 |
库缓冲器字节数 |
| Windows |
4096 (支持的取值范围从2 到32768 byte不等) |
| Linux |
8192 |
| Solaris |
8192 |
| AIX |
4096 |
| SGI |
4096 | 表1. 标准输入输出系统的缓冲器字节数
|
1 2 3 4 下一页 |
|
|
感谢
访问天极网,如果您觉得该文章涉及版权问题,请看这里!
|