linux性能知识点总结

操作系统缓存和缓冲

操作系统缓存和缓冲主要包括:cache(缓存)、buffer(缓冲)、swap等,通过free -m命令可以查看。

  • cache
    Cache(缓存)则是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。
    cache主要针对读缓存设计,主要目的:调高CPU和内存之间数据交换速度,具体来说,热点数据,期望可以在内存cache中命中。
  • buffer
    Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。
    通俗讲,buffer主要针对写缓存设计,主要目的:调高内存和硬盘之间数据交换速度,具体来说,IO操作,数据写入buffer即可返回,降低IO操作时延,同时,buffer数据聚合为一定大小后,再执行一次下盘,减少磁盘IO次数和网络开销(云盘)。
  • swap
    类似于win下的虚拟内存,当物理内存空间不够时,会拿出部分磁盘空间,作为SWAP分区(虚拟成内存),来解决内存容量不足情况。
    当程序向OS请求内存资源时,OS发现内存不足,则会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。当程序又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN。

刷盘操作字

前台下发write操作字,如果buffer还未写满,那么内核就不会把它放入输出队列。
当buffer写满或者内核想重用buffer时,才会将其排入输出队列,等它到达队列的首部,才会进行刷盘,如下图所示:
image

正式由于上述延迟写机制,在操作系统crash或者reboot时,buffer中未下盘的数据可能会丢失,因此,linux提供了以下系统调用,保证buffer中的数据及时刷盘:

  • sync
    将所有修改过的缓冲区排入写队列,然后就返回了,它并不等实际的写磁盘的操作结束。所以它的返回并不能保证数据的安全性。通常会有一个update系统守护进程每隔30s调用一次sync。
  • fsync
    与sync的区别,fysnc只对一个文件生效,因此,需要一个入参:文件fd,fsync会确保一直到写磁盘操作结束才会返回。所以,fsync适合数据库这类应用。
  • fdatasync
    与fsync的区别,只刷盘文件的数据部分,不刷盘元数据。
posted @ 2022-10-23 11:50  Mr.van_Gogh  阅读(33)  评论(0编辑  收藏  举报