linux下資料同步 回寫機制分析

2021-07-14 04:12:14 字數 1233 閱讀 3452

一、前言

在linux2.6.32之前,linux下資料同步是基於pdflush執行緒機制來實現的,在linux2.6.32以上的版本,核心徹底刪掉了pdflush機制,改為了基於per-bdi執行緒來實現資料同步,與pdflush執行緒相比,在per-bdi執行緒機制中,每個後備儲存器擁有自己唯一的回寫執行緒,資料同步時需要更少的執行緒、也不會有多個pdflush對同乙個後備儲存器進行回寫的競態問題,回寫的效率更高。

二、初始化預設的後備儲存器

default_backing_dev_info

static

int __init default_bdi_init(

void

) sync_supers_timer_fn函式喚醒超級塊資料同步執行緒,然後重設定時器。

static

void sync_supers_timer_fn(unsigned long unused)

bdi_arm_supers_timer函式重設定時器

void bdi_arm_supers_timer(

void)

三、bdi_register()函式分析

bdi_register函式用於註冊後備儲存器到全域性鍊錶

bdi_list

上,並且判斷如果是預設的

後備儲存器

default_backing_dev_info

則建立bdi-default

執行緒,用於管理建立或銷毀所

有後備儲存器相關的同步回寫執行緒

。int bdi_register(

struct backing_dev_info *bdi,

struct device *parent,

const

char

*fmt,..

.)bdi_debug_register(bdi, dev_name(dev));

set_bit(bdi_registered,

&bdi-

>state)

;spin_lock_bh(

&bdi_lock)

;list_add_tail_rcu(

&bdi-

>bdi_list,

&bdi_list)

;spin_unlock_bh(

&bdi_lock)

;trace_writeback_bdi_register(bdi)

;return 0;

}

Linux 下的同步機制

2017 03 10 回想下最初的計算機設計,在單個cpu的情況下,同一時刻只能由乙個執行緒 在linux下為程序 占用cpu,且2.6之前的linux核心並不支援核心搶占,當程序在系統位址執行時,能打斷當前操作的只有中斷,而中斷處理完成後發現之前的狀態是在核心,就不觸發地排程,只有在返回使用者空間...

linux的IO排程演算法和回寫機制

塊裝置i o子系統最核心的任務也就是提高塊裝置的整體效能,為此linux實現了四種 io排程演算法,演算法基本思想就是通過合併和排序io請求佇列中的請求大大降低所需的磁碟尋道時間,從而提供整體io效能。2.6核心實現了四種 io排程演算法,分別為預期 anticipatory 演算法 最後期限 de...

Linux下C的執行緒同步機制

c裡提供了保證執行緒安全性的三種方法 新增標頭檔案 include,pthread 庫不是 linux 系統預設的庫,連線時需要使用靜態庫 libpthread.a,在編譯中要加 lpthread引數 通過鎖的機制實現執行緒間的互斥,同一時刻只有乙個執行緒可以鎖定它,當乙個鎖被某個執行緒鎖定的時候,...