通过本文,我们可以了解如下知识:
- linux系统调用posix_fadvise
- Java JNI相关概念
- HDFS如何通过native方法来实现预读的
一、前置知识
1.1 posix_fadvise
HDFS预读其实最终是通过调用这个系统调用来实现的。
posix_fadvise是linux下的一个系统调用,目的是对文件数据的访问模式进行一个提前声明。
通俗点解释就是:我会传递一些模式告诉内核,我一会儿要以什么方式读某个文件,也就是给内核一些建议,让内核进行一些合适的优化。
用 man posix_fadvise
命令查看一下此系统调用的man手册,有详细介绍。
这里我们对这些模式进行一些说明:
- POSIX_FADV_NORMAL
应用程序没有给出接下来访问文件模式的一些建议 - POSIX_FADV_SEQUENTIAL
应用程序期望按顺序地访问特定数据(从offset低的位置读到offset高的位置) - POSIX_FADV_RANDOM
应用程序以随机的顺序访问数据 - POSIX_FADV_NOREUSE
应用程序只会访问指定数据一次 <