亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種減少raid-6解碼i/o數(shù)據(jù)量的方程選擇方法

文檔序號:10470876閱讀:174來源:國知局
一種減少raid-6解碼i/o數(shù)據(jù)量的方程選擇方法
【專利摘要】本發(fā)明公開了一種減少RAID?6解碼I/O數(shù)據(jù)量的方程選擇方法:一次只選擇一個校驗方程,而且遵循每次都選擇具有最多可重用塊的校驗方程的原則,直到選定的校驗方程數(shù)量與條帶中丟失的數(shù)據(jù)塊數(shù)量一致為止;為了快速選出可重用塊數(shù)量最多的校驗方程,維持一個按可重用塊數(shù)量排序的校驗方程序列,每次從序列順序選擇校驗方程。使用本發(fā)明方法選擇校驗方程子集用于解碼時,解碼I/O的數(shù)據(jù)量要少于傳統(tǒng)解碼方法使用的數(shù)據(jù)量,這有助于減少解碼時從磁盤讀取數(shù)據(jù)的時間,從而提高解碼性能。
【專利說明】
一種減少RA ID-6解碼I /0數(shù)據(jù)量的方程選擇方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于磁盤陣列存儲技術(shù)領(lǐng)域,更具體地,涉及一種減少RAID-6解碼I/O數(shù)據(jù)量的方程選擇方法。
【背景技術(shù)】
[0002]磁盤陣列(RedundantArray of Independent Disks ,RAID)是一種把多個磁盤組合起來,把數(shù)據(jù)分散存儲在不同的磁盤中的技術(shù)。與單個磁盤相比,RAID可以達到提高讀寫速度或者增加容錯能力的目的。RAID被分為多個級別,其中RAID-6具有冗任意兩個磁盤失效的能力。
[0003]RAID-6使用糾刪碼對數(shù)據(jù)進行保護,依照糾刪碼在編解碼過程需要使用的運算操作可以把糾刪碼區(qū)分為兩大類:RS碼以及基于XOR的編碼。RS碼是基于伽羅華域(也稱有限域)運算的編碼,在其編解碼過程需要使用到伽羅華域乘法運算?;赬OR的編碼在校驗塊的計算和失效塊的恢復中都只需要使用異或運算。
[0004]目前在RAID-6系統(tǒng)在少于雙磁盤失效的恢復場景中,都會傾向于從剩余的磁盤中把所有未丟失數(shù)據(jù)讀出,然后實施解碼。但實際上,對于這些失效情況,可能并不需要把所有未丟失數(shù)據(jù)都讀出,而且雙磁盤失效發(fā)生的概率要遠低于非雙磁盤失效。由于磁盤讀出速率與處理器解碼速率相比要慢得多,所以避免在解碼過程讀出不必要的數(shù)據(jù)量可以有效地減少解碼時間開銷,提高解碼性能。

【發(fā)明內(nèi)容】

[0005]針對現(xiàn)有技術(shù)的以上缺陷或改進需求,本發(fā)明提供一種減少基于XOR的RAID-6系統(tǒng)解碼過程I/O數(shù)據(jù)量的方程選擇方法,該方法能夠應(yīng)用于多種基于XOR的RAID-6碼的解碼過程前,通過選擇校驗方程組的一個子集用于解碼,減少在解碼時所需I/O的數(shù)據(jù)量。
[0006]本發(fā)明是一個通過減少解碼過程所需I/O數(shù)據(jù)量,從而減少讀取數(shù)據(jù)的時間開銷以提高解碼性能的方法。該方法選取與丟失數(shù)據(jù)塊數(shù)量一致的校驗方程。概括來說,該方法每次從校驗方程組中選出一個校驗方程,并反復實施該過程直到已被選擇的校驗方程數(shù)量等于丟失數(shù)據(jù)塊的數(shù)量。已經(jīng)被選定的校驗方程子集稱為“決定組”,相對的,未被選定的校驗方程子集稱為“未決定組” ο該方法每次從“未決定組中”選定一個校驗方程并放入“決定組”,而這個校驗方程的選擇基于其“可重用塊”的數(shù)量。
[0007]本發(fā)明提供了一種減少RAID-6解碼I/O數(shù)據(jù)量的方程選擇方法,包括:
[0008]步驟I將基于XOR的RAID-6編碼的校驗規(guī)則用校驗方程組表示,方程組中第j個方程記為Ep方程總數(shù)記為k;校驗方程組中的每一個方程Ej都使用一個數(shù)組EVj= {Pj,0,Pm表示,數(shù)組中每個元素代表該方程所涉及的一個數(shù)據(jù)塊的序號;將所有EVj記錄到數(shù)據(jù)結(jié)構(gòu)EVS中;
[0009]步驟2條帶中的每一個數(shù)據(jù)塊的狀態(tài)記錄為可用或者不可用;其中可用表示數(shù)據(jù)塊記錄的數(shù)據(jù)是完整的,而不可用表示數(shù)據(jù)塊記錄的數(shù)據(jù)不完整或者為空;使用一個數(shù)組BST記錄條帶中所有數(shù)據(jù)塊的狀態(tài),BST稱為數(shù)據(jù)塊狀態(tài)表;BST中的第i個元素對應(yīng)條帶第i個數(shù)據(jù)塊的狀態(tài),元素為I代表對應(yīng)的數(shù)據(jù)塊可用,而O則代表對應(yīng)的數(shù)據(jù)塊不可用;
[0010]步驟3把EVS和BST輸入到方程選擇算法EDA中;
[00?1 ] 步驟4EDA記錄BST中不可用數(shù)據(jù)塊的個數(shù)Numub ;
[0012]步驟5EDA通過使用BST和EVS,選定一個只包含有單個不可用數(shù)據(jù)塊的方程DE1,這個不可用數(shù)據(jù)塊標記為Ub1;
[0013]步驟6把方程DE1K對應(yīng)的EV從原EVS中移除,放入到一個新建的EVS結(jié)構(gòu)中,這個新EVS又稱為決定組,相對應(yīng)地,原EVS又稱為未決定組;把數(shù)據(jù)塊1^1在831'中對應(yīng)的狀態(tài)更改為可用;
[0014]步驟7兩個校驗方程中包含的同一個數(shù)據(jù)塊稱為交叉塊,而一個決定組中的方程與一個未決定組中的方程之間的交叉塊稱為可重用塊,計算并記錄未決定組中各方程的可重用塊數(shù)量;
[0015]步驟8依照可重用塊數(shù)量從大到小對未決定組中的方程進行排序;
[0016]步驟9依照已更新的BST,在已排序的未決定組方程中選出第一個只包含有單個不可用數(shù)據(jù)塊的方程DE1,這個不可用數(shù)據(jù)塊標記為Ub1;
[0017]步驟10把方程DEi從未決定組中移除并放入決定組,同時把數(shù)據(jù)塊Ubi在BST中對應(yīng)的狀態(tài)更改為可用;
[0018]步驟11更新未決定組中各方程的可重用塊數(shù)量,并重新排序;
[0019]步驟12如果決定組中EV的數(shù)量小于初始不可用數(shù)據(jù)塊數(shù)Numub,執(zhí)行步驟9,否則執(zhí)行步驟13;
[0020 ]步驟13把BST恢復為輸入EDA時的狀態(tài),輸出決定組中的EV。
[0021]在上述方法中,步驟9使用了貪婪算法的思想,每次都選擇具有最大可重用塊數(shù)量的方程,從而減少解碼過程最終所需要I/O的數(shù)據(jù)量。
[0022]總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下優(yōu)點:
[0023]使用本發(fā)明可以快速找到一個可用于解碼的校驗方程子集,使用這個校驗方程子集進行解碼時所需I/O的數(shù)據(jù)量要少于傳統(tǒng)方法所使用的校驗方程子集。同時該方法具有較高通用性,可以應(yīng)用于多種基于XOR的RAID-6碼的解碼過程中。使用本方法減少RAID-6碼解碼過程所需I/O數(shù)據(jù)量后,解碼時從硬盤讀出數(shù)據(jù)的時間開銷也被減少,從而可以有效提尚解碼性能。
【附圖說明】
[0024]圖1為本發(fā)明使用的條帶的示意圖;
[0025]圖2為本發(fā)明使用的兩種數(shù)據(jù)結(jié)構(gòu)的示意圖;
[0026]圖3為本發(fā)明實施方程選擇過程步驟的示意圖。
【具體實施方式】
[0027]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0028]本發(fā)明實施例中將會用到一些定義,其中的名詞解釋如下:
[0029]條帶(stripe):是本發(fā)明中應(yīng)用RAID-6編碼進行數(shù)據(jù)保護的基本單元。一個磁盤陣列被邏輯地劃分為多個條帶,每個條帶橫跨多個磁盤,在這些磁盤里占用相同的容量。條帶內(nèi)使用RAID-6編碼對數(shù)據(jù)進行保護。圖1是一個條帶的示意圖。
[0030]行(row):是本發(fā)明中一個對條帶進行劃分的方法。每個條帶被邏輯地劃分為多行,每一行都橫跨條帶中的所有磁盤,并且每一行的容量都相等。
[0031]子帶(strip):條帶在單個磁盤中所占的空間稱為一個子帶。
[0032]數(shù)據(jù)塊(datablock):是本發(fā)明中進行編解碼的數(shù)據(jù)的基本單位。把條帶中每個磁盤看做一列,那么整個條帶被行和列劃分為多個數(shù)據(jù)塊。本發(fā)明在編解碼過程中進行計算的基本單位是一個數(shù)據(jù)塊。依照數(shù)據(jù)塊所存放的數(shù)據(jù)可以把數(shù)據(jù)塊分為兩類,存放原始數(shù)據(jù)的稱為原始塊,而存放校驗數(shù)據(jù)的稱為校驗塊。在本發(fā)明中,數(shù)據(jù)塊有兩種狀態(tài),分別是“可用”和“不可用”,其中“可用”表示數(shù)據(jù)塊記錄的數(shù)據(jù)是完整的,而“不可用”表示數(shù)據(jù)塊記錄的數(shù)據(jù)不完整或者為空。每個數(shù)據(jù)塊被按順序編號,圖1表示了數(shù)據(jù)塊編號的方法。除此以外,當條帶遭遇到磁盤失效或者扇區(qū)故障時,變?yōu)椤安豢捎谩钡膲K特別地稱為“丟失±夬”,而依然“可用”的塊特別地稱為“存活塊”。
[0033]編碼過程(encoding):是在條帶中利用原始數(shù)據(jù)塊生成校驗數(shù)據(jù)塊的過程。
[0034]解碼過程(decoding):是在條帶中部分數(shù)據(jù)塊失效后用存活數(shù)據(jù)塊重構(gòu)丟失數(shù)據(jù)塊的過程。
[0035]編解碼(coding):是指編碼過程和解碼過程。
[0036]校驗規(guī)則(codingrule):是RAID-6編碼設(shè)定的校驗塊與原始塊之間的關(guān)系,它確定了從原始塊計算校驗塊的方法。
[0037]校驗方程(parity check):是由RAID-6編碼的校驗規(guī)則確定的方程,這些方程都是形如多個數(shù)據(jù)塊異或和等于零的方程。方程中包含的“不可用”數(shù)據(jù)塊是方程的未知量,相反,“可用”數(shù)據(jù)塊是方程的已知量。只包含有一個未知量的校驗方程稱為是可獨立求解的。
[0038]交叉塊:兩個校驗方程如果同時包含同一個數(shù)據(jù)塊,那么這個數(shù)據(jù)塊就稱為這兩個校驗方程的交叉塊。
[0039]決定組:本方法已經(jīng)選定的校驗方程子集稱為決定組。
[0040 ]未決定組:未被本方法選定的校驗方程子集稱為未決定組。
[0041]可重用塊:未決定組中的校驗方程與決定組中校驗方程的一個交叉塊又稱為一個可重用塊。
[0042]z-turn:是一個存在于部分RAID-6編碼中的性質(zhì)。對于具有z_turn性質(zhì)的編碼,只要失效情況在該編碼的容錯能力范圍內(nèi),那么在這個編碼的校驗方程組中,至少有一個校驗方程是可獨立求解的。
[0043]方程選擇算法(Equat1n Determining Algorithm,EDA):是本發(fā)明方法的名稱,本方法可以被應(yīng)用以實現(xiàn)具有z-turn性質(zhì)的RAID-6碼的解碼中。
[0044]—、EDA 的設(shè)計
[0045]如圖2所不,EDA以EVS(Equat1nVectorS)以及經(jīng)過初始化的BST(Block StatusTable)作為輸入,在讀取條帶數(shù)據(jù)到內(nèi)存之前運行。其中EVS由多個EV組成,每個EV都是一個數(shù)組并對應(yīng)一個校驗方程,數(shù)組中的元素是該校驗方程所涉及的數(shù)據(jù)塊的編號。對應(yīng)于一個RAID-6碼所定義的校驗方程組中的每一個方程,都有一個相應(yīng)的EV AST是一個數(shù)組,BST中的元素與條帶中的數(shù)據(jù)塊一一對應(yīng),BST[i]表示BST中的第i個元素,每個元素是“I”或者“O”,其中T代表其對應(yīng)的數(shù)據(jù)塊“可用”,而“O”代表其對應(yīng)的數(shù)據(jù)塊“不可用”』DA決定了在解碼時所需的EV以及數(shù)據(jù)塊。
[0046]具體來說,EDA從EVS中一個接一個地選擇EV。為了把已經(jīng)被選定的EV與未被選定的EV區(qū)別開來,EDA把已經(jīng)選定的EV放入到一個新的EVS結(jié)構(gòu)中,這個新的EVS稱為決定組,相對應(yīng)的,原始的EVS稱為未決定組。在最開始,所有EV都是未選定的。由于EDA被用于具有z-turn性質(zhì)的基于XOR的RAID-6碼中,所以EDA可以從未決定組中選定一個只包含有I個不可用塊的EV。如果未決定組中有多個EV符合上述條件,則隨機挑選其中的一個。這個被首先選定的EV記為DE1,同時它包含的那個不可用塊記為Ub1。顯然,在解碼階段,DE1可被用于解碼出Ub1。然后EDA把DE1放入到?jīng)Q定組中,為了避免在接下來選擇的EV中重復地選擇用于解碼Ub^EV,EDA把BST中記錄的Ub1的狀態(tài)更新為可用狀態(tài)。
[0047]這時候,EDA已經(jīng)選定了第一個EV,并且更新了 BST的狀態(tài),然后EDA選擇下一個EV,并且要求選定的EV滿足以下兩個條件:
[0048]1.這個EV只包含一個不可用塊;
[0049]2.與未決定組中的其他滿足條件I的EV相比,它具有最大的可重用塊數(shù)量。
[0050]這其中第I個條件保證選定的EV可以切實用于解碼出一個不可用塊,而第2個條件可以減少解碼階段使用的總數(shù)據(jù)塊數(shù)量,這是因為可重用塊被用于多個EV中。如果有多個EV滿足上述兩個條件,則只需要隨機選擇其中的一個。這個被選定的EV以及它包含的不可用塊分別記為DE^Ub2,然后EDA把DE2放入決定組,并把Ub2i BST中記錄的狀態(tài)更新為可用。
[0051]然后,EDA重復上述過程,繼續(xù)從未決定組中選定EV,知道決定組中EV的數(shù)量與初始時不可用塊數(shù)量一致為止。這樣就完成了 EV的選擇,也就是完成了解碼時校驗方程的選擇。
[0052]在選擇EV時,EDA每次都要從未決定組中選擇具有最大可重用塊數(shù)量的EV,每次選擇都要計算每個未決定組中EV的可重用塊數(shù)量并進行對比所需計算開銷很高。為提高EV選擇的性能,EDA在選擇EV的過程中持續(xù)對未決定組中EV按照可重用塊的數(shù)量排序,每當有一個未決定組中的EV被選入到?jīng)Q定組,EDA就對這個序列重新排序。這樣做以后,每次選擇EV都只需要從序列中順序選擇第I個滿足條件I的EV。
[0053]完成EV的選擇以后,EDA把BST恢復到初始輸入時的狀態(tài),并輸出決定組中的所有EV,至此,EDA結(jié)束運行。
[0054]二、使用EDA實施校驗方程選擇的步驟
[0055]如圖3所示,使用EDA實施基于XOR的RAID-6碼校驗方程選擇的過程主要包括以下的步驟:
[0056]步驟I將基于XOR的RAID-6編碼的校驗規(guī)則用校驗方程組表示,方程組中第j個方程記為Ep方程總數(shù)記為k;校驗方程組中的每一個方程^都使用一個數(shù)組EVj= {Pj,o,PU,…,Ρ^}表示,數(shù)組中每個元素代表該方程所涉及的一個數(shù)據(jù)塊的序號;將所有EVj記錄到數(shù)據(jù)結(jié)構(gòu)EVS中;
[0057]步驟2條帶中的每一個數(shù)據(jù)塊的狀態(tài)記錄為可用或者不可用;其中可用表示數(shù)據(jù)塊記錄的數(shù)據(jù)是完整的,而不可用表示數(shù)據(jù)塊記錄的數(shù)據(jù)不完整或者為空;使用一個數(shù)組BST記錄條帶中所有數(shù)據(jù)塊的狀態(tài),BST稱為數(shù)據(jù)塊狀態(tài)表;BST中的第i個元素對應(yīng)條帶第i個數(shù)據(jù)塊的狀態(tài),元素為I代表對應(yīng)的數(shù)據(jù)塊可用,而O則代表對應(yīng)的數(shù)據(jù)塊不可用;
[0058]步驟3把EVS和BST輸入到方程選擇算法EDA中;
[0059]步驟4EDA記錄BST中不可用數(shù)據(jù)塊的個數(shù)Numub ;
[0060]步驟5EDA通過使用BST和EVS,選定一個只包含有單個不可用數(shù)據(jù)塊的方程DE1,這個不可用數(shù)據(jù)塊標記為Ub1;
[0061 ]步驟6把方程DE1K對應(yīng)的EV從原EVS中移除,放入到一個新建的EVS結(jié)構(gòu)中,這個新EVS又稱為決定組,相對應(yīng)地,原EVS又稱為未決定組;把數(shù)據(jù)塊1^1在831'中對應(yīng)的狀態(tài)更改為可用;
[0062]步驟7兩個校驗方程中包含的同一個數(shù)據(jù)塊稱為交叉塊,而一個決定組中的方程與一個未決定組中的方程之間的交叉塊稱為可重用塊,計算并記錄未決定組中各方程的可重用塊數(shù)量;
[0063]步驟8依照可重用塊數(shù)量從大到小對未決定組中的方程進行排序;
[0064]步驟9依照已更新的BST,在已排序的未決定組方程中選出第一個只包含有單個不可用數(shù)據(jù)塊的方程DE1,這個不可用數(shù)據(jù)塊標記為Ub1;
[0065]步驟10把方程DEi從未決定組中移除并放入決定組,同時把數(shù)據(jù)塊Ubi在BST中對應(yīng)的狀態(tài)更改為可用;
[0066]步驟11更新未決定組中各方程的可重用塊數(shù)量,并重新排序;
[0067]步驟12如果決定組中EV的數(shù)量小于初始不可用數(shù)據(jù)塊數(shù)Numub,執(zhí)行步驟9,否則執(zhí)行步驟13;
[0068]步驟13把BST恢復為輸入EDA時的狀態(tài),輸出決定組中的EV。
[0069]三、使用EDA選擇校驗方程的特點
[0070]使用EDA實施校驗方程選擇時,一次只選擇一個校驗方程,而且遵循每次都選擇具有最多可重用塊的校驗方程的原則,直到選定的校驗方程數(shù)量與條帶中丟失的數(shù)據(jù)塊數(shù)量一致為止。同時,為了快速選出可重用塊數(shù)量最多的校驗方程,EDA維護著按可重用塊數(shù)量排序的校驗方程序列,每次從序列順序選擇校驗方程。使用EDA選擇校驗方程子集用于解碼時,解碼所需I/O的數(shù)據(jù)量要少于傳統(tǒng)方法使用的數(shù)據(jù)量,這有助于減少解碼時從磁盤讀取數(shù)據(jù)的時間,從而有效地提高解碼性能。
[0071]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【主權(quán)項】
1.一種減少RAID-6解碼I/O數(shù)據(jù)量的方程選擇方法,其特征在于,所述方法包括如下步驟: 步驟I將基于XOR的RAID-6編碼的校驗規(guī)則用校驗方程組表示,方程組中第j個方程記為Ep方程總數(shù)記為k;校驗方程組中的每一個方程^都使用一個數(shù)組EVj= {p^pu,...,Pj,i}表示,數(shù)組中每個元素代表該方程所涉及的一個數(shù)據(jù)塊的序號;將所有EVj記錄到數(shù)據(jù)結(jié)構(gòu)EVS中; 步驟2條帶中的每一個數(shù)據(jù)塊的狀態(tài)記錄為可用或者不可用;其中可用表示數(shù)據(jù)塊記錄的數(shù)據(jù)是完整的,而不可用表示數(shù)據(jù)塊記錄的數(shù)據(jù)不完整或者為空;使用一個數(shù)組BST記錄條帶中所有數(shù)據(jù)塊的狀態(tài),BST稱為數(shù)據(jù)塊狀態(tài)表;BST中的第i個元素對應(yīng)條帶第i個數(shù)據(jù)塊的狀態(tài),元素為I代表對應(yīng)的數(shù)據(jù)塊可用,而O則代表對應(yīng)的數(shù)據(jù)塊不可用; 步驟3把EVS和BST輸入到方程選擇算法EDA中; 步驟4EDA記錄BST中不可用數(shù)據(jù)塊的個數(shù)Numub ; 步驟5EDA通過使用BST和EVS,選定一個只包含有單個不可用數(shù)據(jù)塊的方程DE1,這個不可用數(shù)據(jù)塊標記為Ubi ; 步驟6把方程DE1K對應(yīng)的EV從原EVS中移除,放入到一個新建的EVS結(jié)構(gòu)中,這個新EVS又稱為決定組,相對應(yīng)地,原EVS又稱為未決定組;把數(shù)據(jù)塊1^1在831'中對應(yīng)的狀態(tài)更改為可用; 步驟7兩個校驗方程中包含的同一個數(shù)據(jù)塊稱為交叉塊,而一個決定組中的方程與一個未決定組中的方程之間的交叉塊稱為可重用塊,計算并記錄未決定組中各方程的可重用塊數(shù)量; 步驟8依照可重用塊數(shù)量從大到小對未決定組中的方程進行排序; 步驟9依照已更新的BST,在已排序的未決定組方程中選出第一個只包含有單個不可用數(shù)據(jù)塊的方程DE1,這個不可用數(shù)據(jù)塊標記為Ub1; 步驟10把方程DEi從未決定組中移除并放入決定組,同時把數(shù)據(jù)塊Ubi在BST中對應(yīng)的狀態(tài)更改為可用; 步驟11更新未決定組中各方程的可重用塊數(shù)量,并重新排序; 步驟12如果決定組中EV的數(shù)量小于初始不可用數(shù)據(jù)塊數(shù)Numub,執(zhí)行步驟9,否則執(zhí)行步驟13; 步驟13把BST恢復為輸入EDA時的狀態(tài),輸出決定組中的EV。2.如權(quán)利要求1所述的方法,其特征在于,所述步驟9使用貪婪算法的思想,每次都選擇具有最大可重用塊數(shù)量的方程,從而減少解碼過程最終所需要I/O的數(shù)據(jù)量。
【文檔編號】G06F11/10GK105824578SQ201610139298
【公開日】2016年8月3日
【申請日】2016年3月11日
【發(fā)明人】曹強, 張文輝, 萬勝剛, 黃建忠, 謝長生
【申請人】華中科技大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1