|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
研究 linux 内核 - 页高速缓存(cache)" D* p J% o# Q
' L6 R( v4 j+ }. |3 ~) Z/ }9 H
! U" E( `4 N0 z
, U+ ]1 v( t" F9 ?1,说在前面
! G5 h0 X; y3 k2 ^' h
3 w% S1 n# i. `1 |) l; s$ P$ v @7 c. }& W* v9 n/ I* }& t4 J
1》页高速缓存是内存的一部分,只是用途是用来缓存磁盘块的。
/ C7 t; I6 c# |2》页高速缓存存在基于两方面因素,访问内存的速度要远远高于访问磁盘,临时局部原理(tmporal locality); j) |( S% g% q5 J C
3》核心结构体:struct address_space。在<linux/fs.h>,可见跟文件系统关系紧密。8 v& o# F" d! J }$ J
& q4 d3 ~$ A3 ]9 `# I! u2 l
& Q1 R( r' u+ N
' C B9 G, O4 u9 S e2,页高速缓存的原理和过程& \/ L9 t" K2 a& V0 S2 y
$ Z( v6 i# g) a
+ w. K9 R& z9 d3 P9 t' B2 I
1》应用程序调用文件I/O函数,C库封装,系统调用,VFS,文件系统操作方法产生I/O请求,块设备I/O层给请求队列排序7 o& N( G; z# R$ r+ V3 U4 V
2》再加上页高速缓存,减少实际的磁盘访问量,提高I/O操作效率。来完成整个文件I/O过程。% B3 O) a" T* j9 r
3》如果I/O请求的块(文件系统的最小操作单位),在页高速缓存中,则直接操作页高速缓存。
7 `" u4 `: |. B- _4》如果高速缓存中没有,则访问磁盘。: J0 P1 J& F2 k# \$ y
4 j3 {7 s- e5 A7 J- w
# o) } c# B2 N8 z
6 N+ E& N/ O# E
) E$ h3 p: J$ V1 h3,如何检查I/O请求的块是否在页高速缓存中1 k3 `" F9 ~! g7 L1 H
, _8 ?5 W. \2 ~5 c. J/ R. m4 j% Z: I
* k: b2 L/ s8 O) S& @0 T) K m
1》基于“基树”的搜索方法$ o4 d7 n, E) A' D2 ? i
2》老的内核基于“页散列表”5 X, T" h! ]& p
$ m( a* }/ X% y2 o7 t U# K: m8 B
. S- q# F4 m, ], [* F: z7 b1 U3 [3 B' F- Y' N9 B
4 t+ C& P o6 l5 m- D* V) ~( J
4,页回写(pdflush线程组)
M+ m; a% a. O; o, O2 O& L8 w+ |
1 K; ^" F I4 q& `- P, ]2 h* |3 |9 ?) {/ O2 H, \: I
1》页回写,就是将页高速缓存的内容(脏页)写回磁盘(同步)3 h3 {- \& J) U& T+ a
2》由于不能一直直接操作页高速缓存,所以在一定条件下要页回写。; F# y. q: h3 d5 ?- e
3》有一个内核线程(pdflush)专门负责在适当时候执行页回写操作。
) L& Z/ x2 n- ~- Q& s4》适当时候就是,空闲内存小于阈值,脏页到一定时间。5 Y' v0 M& }! s z, w3 G4 ^
5》如果页回写任务过重(阻塞1秒),则再起一个pdflush。否则就减少一个pdflush。* M1 m b6 ]7 m1 N# K
* O! q( g2 x1 k' W$ t) ?. R% f
! e* h, ^* b7 O4 m! z0 ]5 ]2 P* ~& U
5 \9 x% @8 |/ b1 i/ n- n
6 N6 B- P- `8 R
7 i/ {2 r# a" {9 K' u; Q
" K0 e# ?7 ^ W2 e1 Z3 Q0 g0 @' {/ h! |* Z Q" L/ E' a) K- G1 a
) s! C* \) q; E T
0 _) X6 B" a. y |
|