freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)設(shè)計(jì)-存儲編碼高效算法的實(shí)現(xiàn)-資料下載頁

2025-01-13 18:30本頁面
  

【正文】 結(jié)構(gòu)的實(shí)例。zio 將記錄的數(shù)據(jù)條紋化引用方式傳遞給此 raidz_map 對象。然后,對條紋中數(shù)據(jù)部分(而非校驗(yàn)盤數(shù)據(jù))進(jìn)行修改。如果是寫操作,將調(diào)用處理陣列編碼的函數(shù),將校驗(yàn)單元寫請求發(fā)送給子設(shè)備。如果是讀操作,則從對應(yīng)數(shù)據(jù)單元所在 leaf 虛設(shè)備進(jìn)行讀取。I/O 完成( vdev_raidz_io_done)接口:該接口根據(jù)當(dāng)前狀態(tài)決定重構(gòu)的策略:如果僅僅是校驗(yàn)盤損壞,調(diào)用編碼函數(shù)重新編碼即可;否則需要調(diào)用解碼函數(shù),對于雙容錯(cuò)陣列,分為三種情況,即依靠 P 盤解碼(Q 和一個(gè)數(shù)據(jù)盤損壞的情況) 、依靠 Q 盤解碼(P 和一個(gè)數(shù)據(jù)盤損壞的情況) 、依靠 P/Q 盤解碼(兩個(gè)數(shù)據(jù)盤損壞的情況) 。如果任何方法均無法完成重構(gòu),將返回錯(cuò)誤信息。如果收到的請求是寫操作,或者發(fā)現(xiàn)需要重構(gòu),那么就調(diào)用底層函數(shù),將條紋單元中的數(shù)據(jù)實(shí)際寫入對應(yīng)的 leaf 虛設(shè)備上。 實(shí)現(xiàn)中需要注意的問題 問題由來傳統(tǒng)磁盤陣列對小數(shù)據(jù)寫的處理方式為“讀-修改-寫”策略(ReadModifyWrite,RMW) ,即首先讀取要更新的數(shù)據(jù)單元的舊有內(nèi)容和校驗(yàn)單元19的舊有內(nèi)容,然后結(jié)合更新數(shù)據(jù)計(jì)算出校驗(yàn)單元的新內(nèi)容,最后將更新數(shù)據(jù)和校驗(yàn)單元的新內(nèi)容寫入磁盤。對于小數(shù)據(jù),RMW 策略明顯優(yōu)于重構(gòu)寫策略(Reconstruct Write,讀取不更新的數(shù)據(jù)單元來和更新數(shù)據(jù)一起計(jì)算出校驗(yàn)單元的新內(nèi)容) ,但仍然需要 4 次磁盤操作才能完成一次寫請求。而且當(dāng)寫操作過程中發(fā)生系統(tǒng)崩潰,就有可能造成同一條紋中數(shù)據(jù)單元和校驗(yàn)單元的不一致。針對傳統(tǒng)磁盤陣列的這些缺點(diǎn),ZFS 采用了寫請求聚合策略。即推遲寫請求的處理,將多個(gè)寫請求組合在一起,形成整條紋寫入磁盤,這樣即可解決小寫性能缺陷。但這一策略需要解決兩個(gè)問題。首先,傳統(tǒng)的用戶地址到磁盤陣列地址的映射為固定映射方式,數(shù)據(jù)更新應(yīng)覆蓋固定地址的舊數(shù)據(jù)。這樣,多個(gè)寫請求的覆蓋地址可能是不連續(xù)的,則無法組合為整條紋。為此,ZFS 采取了追加寫方式。即新數(shù)據(jù)并不覆蓋舊數(shù)據(jù),而是寫入新分配的磁盤空間中,而舊數(shù)據(jù)占用的空間會適時(shí)回收。這樣,只要將多個(gè)寫請求分配到同一條紋的地址中,即可實(shí)現(xiàn)整條紋寫。此外,追加寫還可有效解決寫操作中系統(tǒng)崩潰造成的不一致問題。另一個(gè)問題是,若系統(tǒng)負(fù)載較輕,可能較長時(shí)間也無法組合出足夠大小的寫數(shù)據(jù)量。為此,ZFS 采用了可變條紋設(shè)計(jì)。即條紋長度(條紋單元數(shù))與條紋單元大小均是可變的,根據(jù)寫請求聚合情況動態(tài)確定。ZFS 在請求聚合之后,形成的條紋大小(沒算上校驗(yàn)字條紋)為磁盤扇區(qū)大小(512B )的整數(shù)倍,在 512B~128KB 之間,并不一定能夠被存放數(shù)據(jù)字的虛設(shè)備個(gè)數(shù)整除。于是,ZFS 進(jìn)行了如下的處理。/* 數(shù)據(jù)以 1unit_shift 為單位大小分成單元進(jìn)行散布*//* dcols:所屬 top 節(jié)點(diǎn)下面的 leaf 虛設(shè)備的個(gè)數(shù) */s = zioio_size unit_shift。 /* I/O 數(shù)據(jù)的大小(單位 1unit_shift)*/ q = s / (dcols nparity)。 r = s q * (dcols nparity)。bc = (r == 0 ? 0 : r + nparity)。 /* 較大條紋單元個(gè)數(shù) */acols = (q == 0 ? bc : dcols)。 /* 條紋單元個(gè)數(shù) */for (c = 0。 c acols。 c++) {……rmrm_col[c].rc_size = (q + (c bc)) unit_shift。20……}一種很可能的分布如圖 33。部分條紋單元是較大的條紋,其他是較小的條紋,圖 33 中將較小的條紋的不足的部分用陰影區(qū)域補(bǔ)足。上面的源碼中沒有標(biāo)記含義的變量在圖 33 中均已標(biāo)出??梢钥吹?,這個(gè)策略盡量均勻分布數(shù)據(jù),未將全部“不足”部分分布在最后一個(gè)數(shù)據(jù)盤,這樣可以使不同數(shù)據(jù)盤的讀寫負(fù)載更為均衡。對于校驗(yàn)盤而言,顯然應(yīng)該是完整條紋單元大小。由上述的分析可以看出,ZFS 很可能無法滿足 EVENODD 和 RDP 陣列碼對條紋單元大小的需求。為了滿足上述處理策略的需求,需要在標(biāo)準(zhǔn) EVENODD和 RDP 編碼結(jié)構(gòu)的基礎(chǔ)上加以變化。P a r i t y P P a r i t y QD a t a 0 D a t a 1 D a t a 2D a t a 3D a t a . . .q u n i t _ s h i f t1 u n i t _ s h i f trb ca c o l s圖 33: ZFS 中 條 紋 數(shù) 據(jù) 分 布 情 況 示 意 圖 解決方案首先,這兩種陣列碼要求條紋單元大小為控制參數(shù)減 1 的整數(shù)倍(其中控制參數(shù)為素?cái)?shù)) ,而且每個(gè)條紋單元大小均相同。對此的解決辦法是,在編碼/解碼運(yùn)算中,陰影區(qū)域視為全 0,因?yàn)?0 對異或運(yùn)算的結(jié)果不會有任何影響。然后,另一個(gè)需要解決的問題是,標(biāo)準(zhǔn) EVENODD 編碼結(jié)構(gòu)要求條紋長度為 p+2,標(biāo)準(zhǔn) RDP 編碼結(jié)構(gòu)要求條紋長度為 p+1,p 為素?cái)?shù)。而系統(tǒng)實(shí)際配置中,構(gòu)成一個(gè)磁盤陣列 top 節(jié)點(diǎn)的 leaf 節(jié)點(diǎn)數(shù)可能不是這樣的規(guī)模。而且, ZFS采用寫請求聚合整條紋寫的策略,實(shí)際條紋長度還可能小于 leaf 節(jié)點(diǎn)數(shù)。我們可以采取“編碼縮減”技術(shù),來使這兩種陣列碼適應(yīng)變化的、非素?cái)?shù)的條紋長21度。即,預(yù)先選定一個(gè)較大的控制參數(shù) p,使 p+2(EVENODD)或p+1(RDP)大于可能出現(xiàn)的實(shí)際條紋長度。對于 ZFS 確定的實(shí)際條紋長度g(EVENODD :g=p+2;RDP:g=p+1) ,刪除多出的數(shù)據(jù)單元(假定為全 0) ,顯然,這樣不會影響編碼的容錯(cuò)能力和編碼/解碼算法。第三,由于編碼上下文的實(shí)現(xiàn)要求,第一校驗(yàn)盤需要作為整個(gè)條紋的第一個(gè)條紋單元,第二校驗(yàn)盤需要作為整個(gè)條紋的第二個(gè)條紋單元。因此實(shí)現(xiàn)的時(shí)候,也需要在這方面對標(biāo)準(zhǔn)的 EVENODD、RDP 碼編碼、解碼方式進(jìn)行相應(yīng)的調(diào)整。綜合考慮到本小節(jié)提到的實(shí)現(xiàn)中需要注意的若干問題,以及第二章第五節(jié)提到的編碼實(shí)現(xiàn)的技巧,本文將在本章的第四節(jié)和第五節(jié)給出在 ZFS 上EVENODD 和 RDP 兩種陣列碼(編碼和解碼)的具體實(shí)現(xiàn)。對于解碼計(jì)算,由于只有一個(gè)數(shù)據(jù)盤數(shù)據(jù)丟失、只有校驗(yàn)盤數(shù)據(jù)丟失、一個(gè)數(shù)據(jù)盤和對角線校驗(yàn)盤數(shù)據(jù)丟失這三種情況的解碼實(shí)現(xiàn)非常簡單,把類似 RAID5 的解碼和相應(yīng)的RAID6 編碼過程進(jìn)行組合即可完成。因此解碼的部分,本文只具體給出一個(gè)數(shù)據(jù)盤行校驗(yàn)盤數(shù)據(jù)丟失、兩個(gè)數(shù)據(jù)盤數(shù)據(jù)丟失這兩種情況的實(shí)現(xiàn)。 EVENODD 碼在 ZFS 中的實(shí)現(xiàn) 編碼對圖 21 所示的編碼方案,結(jié)合 ZFS 條紋情況,采用如下的實(shí)現(xiàn)策略。圖 33 中每列數(shù)據(jù)從上到下分為三個(gè)部分:第一部分(參與標(biāo)記為 x ~ p2的校驗(yàn)組)需要計(jì)算到行校驗(yàn)列和對角線校驗(yàn)列中,第二部分(參與標(biāo)記為 p1 的校驗(yàn)組)需要計(jì)算到行校驗(yàn)列和 S 中,第三部分(該列的剩余部分)需要計(jì)算到行校驗(yàn)列和對角線校驗(yàn)列中。并且,陰影區(qū)域不參加計(jì)算。最終,再將 S 計(jì)算到對角線校驗(yàn)列中。編碼完畢。整個(gè)過程用偽代碼表示如下:/* 算法 31: EVENODD 編碼算法 */packet_size ? 數(shù)據(jù)塊大小 rcount ? dcount ?校驗(yàn)列條紋單元大小r ? 行校驗(yàn)列的數(shù)據(jù)首地址22d ? 對角線校驗(yàn)列的數(shù)據(jù)首地址 ccount ? 第一塊數(shù)據(jù)列的條紋單元大小src? 第一塊數(shù)據(jù)列的數(shù)據(jù)首地址r [0..ccount] ? d[0..ccount] ?src[0..ccount]For c In 3 to 條紋單元個(gè)數(shù)1 Do doffset ? (c 2) * packet_sizeccount ? 當(dāng)前條紋單元大小src ? 當(dāng)前條紋單元數(shù)據(jù)首地址i ? 0 j ? doffsetWhile i ccount And j dcount Do r[i] ? r[i] Xor src[i]d[j] ? d[j] Xor src[i]i ? i + 1 j? j + 1j ? 0While i ccount And j packet_sizeDo r[i] ? r[i] Xor src[i]S[j] ? S[j] Xor src[i]i ? i + 1 j ? j + 1j ? 0While i ccountDo r[i] ? r[i] Xor src[i]d[j] ? d[j] Xor src[i]i ?0 While i dcount Do For j In 0 to packet_size – 1Do d[i] ? d[i] Xor S[j]i ? i + 1 解碼23 數(shù)據(jù)列 x 和水平校驗(yàn)列失效/* 算法 32: EVENODD 解碼算法一(數(shù)據(jù)列 x 和水平校驗(yàn)列失效) */If x 2 Then使用每個(gè)條紋單元,校驗(yàn)組為 x 3 的數(shù)據(jù)塊計(jì)算 SElse 按照編碼的方法直接計(jì)算 SEnd if將 S 復(fù)制到 x 上每個(gè)數(shù)據(jù)塊 ,水平校驗(yàn)列清零將其他數(shù)據(jù)列,按照相同對角線校驗(yàn)組,Xor 到 x 上和水平校驗(yàn)列上將對角線校驗(yàn)列,按照相同對角線校驗(yàn)組,Xor 到 x 上將 x 列水平的 Xor 到水平校驗(yàn)列上 數(shù)據(jù)列 x 和數(shù)據(jù)列 y 失效/* 算法 33: EVENODD 解碼算法二(數(shù)據(jù)列 x 和數(shù)據(jù)列 y 失效) */將水平校驗(yàn)列和對角線校驗(yàn)列的所有數(shù)據(jù)塊 Xor,計(jì)算出 Sxdata[0..xcount] ? r[0..xcount],將 x 和 y 以外的數(shù)據(jù)列 Xor 到 x 上將 S 復(fù)制到 y 上每個(gè)數(shù)據(jù)塊,將 x 和 y 以外的數(shù)據(jù)列、對角線校驗(yàn)列,按照相同對角線校驗(yàn)組,Xor 到 y 上s ? (x – y 1) mod pWhile s != p 1Do 將 x 上第(s + y – x) mod p 個(gè)數(shù)據(jù)塊 Xor 到 y 上第 s 個(gè)數(shù)據(jù)塊將 y 上第 s 個(gè)數(shù)據(jù)塊 Xor 到 x 上第 s 個(gè)數(shù)據(jù)塊s ? (s + y – x) mod p RDP 碼在 ZFS 中的實(shí)現(xiàn) 編碼由于 RDP 編碼的水平校驗(yàn)列參與編碼,所以水平校驗(yàn)列數(shù)據(jù)塊以怎樣的順序參與對角線校驗(yàn)列的計(jì)算十分重要。為了表示明確,這里給出結(jié)合了 ZFS 條24紋情況和圖 22 所示編碼方案,重新設(shè)計(jì)的數(shù)據(jù)塊校驗(yàn)組的分布方法。Row Parity Diag. Parity Data Disk 0 Data Disk 1 Data Disk 2 Data Disk 34 0 0 1 2 30 1 1 2 3 41 2 2 3 4 02 3 3 4 0 1圖 34 校 驗(yàn) 盤 在 前 的 RDP 編 碼 示 意 圖 ( p=5)圖 33 中每列數(shù)據(jù)從上到下同樣分為三個(gè)部分:第一部分(參與標(biāo)記為 x ~ p 2 的校驗(yàn)組)需要計(jì)算到行校驗(yàn)列和對角線校驗(yàn)列中,第二部分(參與標(biāo)記為 p 1 的校驗(yàn)組)只需要計(jì)算到行校驗(yàn)列,第三部分(該列的剩余部分)需要計(jì)算到行校驗(yàn)列和對角線校驗(yàn)列中。并且,陰影區(qū)域不參加計(jì)算。最終,將水平校驗(yàn)列計(jì)算到對角線校驗(yàn)列中,編碼完畢。整個(gè)編碼過程用偽代碼表示如下:/* 算法 34: RDP 編碼算法 */packet_size ? 數(shù)據(jù)塊大小 rcount ? dcount ?校驗(yàn)列條紋單元大小r ? 行校驗(yàn)列的數(shù)據(jù)首地址d ? 對角線校驗(yàn)列的數(shù)據(jù)首地址 ccount ? 第一塊數(shù)據(jù)列的條紋單元大小src? 第一塊數(shù)據(jù)列的數(shù)據(jù)首地址r [0..ccount] ? d[0..ccount] ?src[0..ccount]For c In 3 to 條紋單元個(gè)數(shù)1 Do doffset ? (c 2) * packet_sizeccount ? 當(dāng)前條紋單元大小src ? 當(dāng)前條紋單元數(shù)據(jù)首地址i ? 0 j ? doffsetWhile i ccount And j dcount Do r[i] ? r[i] Xor src[i]d[j] ? d[j] Xor src[i]i ? i + 1 j? j + 125j ? 0While i ccount And j packet_sizeDo r[i] ? r[i] Xor src[i]i ? i + 1 j ? j + 1j ? 0While i ccountDo r[i] ? r[i] Xor src[i]d[j] ? d[j] Xor src[i]For i In 0 to rcount – packet_sized[i] ? d[i] Xor r[i + packet_size] 解碼 數(shù)據(jù)列 x 和水平校驗(yàn)列失效/* 算法 35: RDP 解碼算法一(數(shù)據(jù)列和水平校驗(yàn)列失效) */row_disk ? p + 1 diag_disk ? xgr ? p – 2 gx ? (x 3) mod prow_data ? rdata diag_data ? xdatag ? grSTART: If g == p – 1 ThenIf gr == (row_disk 3) mod p Thenrow_disk ? x。diag_disk ? p + 1。row_data ? xd
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1