熟悉NVMe的朋友知道,NVMe里面有namespace的概念,就是把SSD物理空間劃分成若干個(gè)邏輯地址空間。在UFS的世界里,它也有這個(gè)特性。UFS設(shè)備的物理存儲(chǔ)空間可以有若干個(gè)獨(dú)立的邏輯地址空間,我們把邏輯地址空間叫做LU,即Logical Unit,俗稱(chēng)“擼”。前面看到,在每個(gè)UPIU的Header中,有個(gè)LUN(Logical Unit Number)的域,就是標(biāo)識(shí)該UPIU關(guān)聯(lián)的命令或者請(qǐng)求的目標(biāo)邏輯單元。每個(gè)LU的地址空間是獨(dú)立的,主機(jī)在發(fā)命令或者請(qǐng)求給設(shè)備的時(shí)候,須通過(guò)LUN指定目標(biāo)邏輯單元。
如上圖所示,UFS設(shè)備有若干個(gè)LU,每個(gè)LU接收主機(jī)發(fā)過(guò)來(lái)的命令或者請(qǐng)求,這些命令或者請(qǐng)求可來(lái)自應(yīng)用層的SCSI模塊、設(shè)備管理器或者任務(wù)管理器。每個(gè)LU都是獨(dú)立的,“獨(dú)立”表現(xiàn)在下面幾個(gè)方面:
邏輯地址空間是獨(dú)立的,都是從LBA 0開(kāi)始;
邏輯塊大小可以不同,可以為4KB,..;
可以有不同的安全屬性,比如可以設(shè)置不同的寫(xiě)保護(hù)屬性;
每個(gè)LU可以有自己的命令隊(duì)列;
不同的LU可以存儲(chǔ)不同的數(shù)據(jù),比如有的LU存儲(chǔ)系統(tǒng)啟動(dòng)代碼,有的LU存儲(chǔ)普通的應(yīng)用數(shù)據(jù),有的LU存儲(chǔ)用戶(hù)特殊數(shù)據(jù)...
。。。
UFS2.1中可以有最多32個(gè)普通LU和“四大名擼”(四個(gè)Well known LU,眾所周知的LU)。
普通LU的邏輯塊大小至少是4KB,但RPMB LU邏輯塊大小為256B。至于什么是RPMB LU,后面再講。
普通LU我覺(jué)得沒(méi)有什么好講的,就是分別用來(lái)存儲(chǔ)用戶(hù)數(shù)據(jù)的。我們主要來(lái)講講“四大名擼”。
Report LUNS LU
Report LUNS主要用來(lái)代表設(shè)備向主機(jī)匯報(bào)設(shè)備LU清單。主機(jī)想知道設(shè)備LU的支持情況,就需要發(fā)命令或者請(qǐng)求給該LU。UFS其中有個(gè)命令“Report LUNS” (和該LU名字一樣)用來(lái)訪(fǎng)問(wèn)Report LUNS。
UFS Device LU
UFS設(shè)備的法人。當(dāng)UFS主機(jī)不針對(duì)某個(gè)具體LU,而是對(duì)整個(gè)UFS設(shè)備發(fā)命令的時(shí)候,UFS Device LU就成為該命令接收的對(duì)象,比如格式化UFS設(shè)備(FORMAT UNIT命令)、切換UFS設(shè)備的功耗模式(START STOP UNIT命令)等等。
BOOT LU
顧名思義,就是用來(lái)存儲(chǔ)啟動(dòng)代碼的LU。不過(guò),BOOT LU本身是不存儲(chǔ)啟動(dòng)代碼的,它只是個(gè)虛擬的LU,啟動(dòng)代碼物理上是存儲(chǔ)在普通LU上的。
有兩個(gè)Boot LU,LU A和LU B,可以用來(lái)存儲(chǔ)不同啟動(dòng)代碼(比如一個(gè)新,一個(gè)舊),但在啟動(dòng)過(guò)程中,只有一個(gè)是活躍的(Active)的。32個(gè)普通LU中的任意一個(gè)可以配成Boot LU A或者Boot LU B。
舉例說(shuō)明:
在上例中,LU 1 充當(dāng)Boot LU A,LU 4 充當(dāng)Boot LU B。由于有兩份啟動(dòng)代碼,分別保存在LU 1和LU 4,那啟動(dòng)的時(shí)候讀取哪一份呢?
主機(jī)啟動(dòng)時(shí),首先應(yīng)該通過(guò)設(shè)備管理器,發(fā)送Query 請(qǐng)求給設(shè)備,獲取一個(gè)叫做“bBootLunEn ”的屬性,該屬性標(biāo)識(shí)當(dāng)前活躍(Active)的Boot LU。
在上例中,bBootLunEn = 01,說(shuō)明Boot LU A是當(dāng)前活躍的Boot LU,因此主機(jī)會(huì)從LU 1上讀取啟動(dòng)代碼完成系統(tǒng)的啟動(dòng)。
值得一提的是,Boot LU不是必須的。如果系統(tǒng)的啟動(dòng)代碼不是存儲(chǔ)在UFS設(shè)備上,那么Boot LU就不需要,因此bBootLunEn = 0。
RPMB LU
在UFS里,有這么一個(gè)LU,主機(jī)往該LU寫(xiě)數(shù)據(jù)時(shí),UFS設(shè)備會(huì)校驗(yàn)數(shù)據(jù)的合法性,只有特定的主機(jī)才能寫(xiě)入;同時(shí),主機(jī)在讀取數(shù)據(jù)時(shí),也提供了校驗(yàn)機(jī)制,保證了主機(jī)讀取到的數(shù)據(jù)是從該LU上讀的數(shù)據(jù),而不是攻擊者偽造的數(shù)據(jù)。這個(gè)LU就是RPMB LU。
關(guān)于RPMB,后面有專(zhuān)門(mén)章節(jié)介紹,這里不多說(shuō)。
“四大名擼” 每個(gè)LU分工明確,分別執(zhí)行不同的任務(wù)。下面把 “四大名擼” 能接收的命令列一下:
他們能接收一些通用的命令(如上圖綠色命令),還有只有該LU能執(zhí)行的命令(如紅色命令),具體命令可查看Spec。
需要注意的是,寫(xiě)B(tài)oot LU和RPMB LU時(shí),它是不支持cache操作的,就是說(shuō),數(shù)據(jù)必須寫(xiě)到閃存中以后,這筆寫(xiě)命令才算完成。而對(duì)一般LU的寫(xiě),一般都是cache操作的,即主機(jī)數(shù)據(jù)到設(shè)備的內(nèi)部buffer,設(shè)備就會(huì)回命令完成狀態(tài)給主機(jī).
-
存儲(chǔ)系統(tǒng)
+關(guān)注
關(guān)注
2文章
396瀏覽量
40788 -
邏輯
+關(guān)注
關(guān)注
2文章
831瀏覽量
29387 -
UFS
+關(guān)注
關(guān)注
6文章
103瀏覽量
23710
原文標(biāo)題:蛋蛋讀UFS之五:邏輯單元(LU)
文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論