【linux】page cache 和VM Perl 线程和C++性能优化
上一篇 / 下一篇 2010-03-24 11:35:27 / 个人分类:Linux/unix
r)F%bP
|cdM
U0调节Page Cache
]LlpyL0在Linux的内核中,对文件的读写提供一个页面缓冲的机制(Page Cache)。Page Cache存在于内存中,当要读取一个磁盘文件的内容时,内核首先在Page Cache中进行查找,如果要读取的内容已经存在Page Cache中,则无需在对磁盘发起实际的读操作。同样在需要写文件时,写操作也只是将内容存放于Page Cache中,而Page Cache中的更改内容由内核进程pdflush周期性的写回磁盘。在默认情况下,pdflush进程每5秒钟醒来一次,进行数据写回操作。这个写回时间值定义在参数/proc/sys/vm/dirty_writeback_centisecs中。如果在这5秒钟之间,发生电源故障或者系统崩溃,可能会引起数据丢失。如果用户的电源供应比较可靠,或者丢数据丢失的风险不是非常在意,可以适当的提高这个数据写回时间。使用如下命令查看系统当前的写回时间值:
)zwK#K`"E0cat /proc/sys/vm/dirty_writeback_centisecs 500 |
此时间值的单位为1/100秒。使用如下命令可以更改此值:
echo 2000 > /proc/sys/vm/dirty_writeback_centisecs |
这样,就可以使pdflush进程20秒才醒来一次,从而减少对磁盘的访问频率。
还有一个参数/proc/sys/vm/dirty_expire_centisecs控制一个更改过的页面经过多长时间后被认为是过期的、必须被写回的页面,其默认值是3000(单位也是1/100秒)。用户也可以适当的增加此值,使页面更长时间的驻留在内存中。如下命令:
echo 4000 > /proc/sys/vm/dirty_expire_centisecs |
pdflush进程处理的另一种情况是当可用内存量降低的时候,会将一些缓冲页面写回磁盘,释放内存。这个行为是受/proc/sys/vm/dirty_background_ratio参数控制的,此参数的默认值为10,意思是当所有被更改页面总大小占工作内存超过10%时,pdflush会开始写回工作。用户可以增加这个比例,以增加页面驻留在内存的时间。此参数的更改方法同上面两个参数。
Swap分区或文件
在 默认情况下,Linux内核并不是只有在物理内存不够用的时候才进行交换,而是为了保证尽量大的磁盘缓冲以及其他一些原因,会尽可能的将非活动的进程及内存页面交换出内存,放在磁盘上的交换分区中。这种默认行为使得在还有大量内存可用的情况下,就会发生交换操作,而释放出的物理内存并没有被利用起来,显然这些交换操作是不必要 的。为了减少因交换引起的磁盘读写,在用户内存足够大的时候,可以考虑禁用swap分区。
显示作业和进程信息
ian@attic4:~$jobs -l [1]- 3878 Running xclock -d -update 1 & [2]+ 4320 Running xclock -bg wheat -update 1 & |
线程与进程之间既有联系,又完全不同。简单地说,一个线程必然属于某一个进程,而一个进程包含至少一个或者多个线程。51Testing软件测试网/|0c j](Yo [1gu
- 在Perl程序中,我们也可以通过使用Config模块来动态获取Perl线程模型的相关信息,例如
n+\:zi&ph x0Perl程序中动态获取当前Perl线程模型
#!/usr/bin/perl # use Config; if( $Config{useithreads} ) { printf("Hello ithreads\n") } elsif( $Config{use5005threads} ) { printf("Hello 5005threads\n"); } else { printf("Can not support thread in your perl environment\n"); exit( 1 ); } |
创建线程
Perl里创建一个新的线程非常简单,主要有两种方法,他们分别是:
- 使用threads包的create()方法,例如
51Testing软件测试网yte5kk%ok.m
1)通过create()方法创建线程
use threads; |