標籤:
7.6 多媒體檔案系統泛型
多媒體系統和傳統的檔案系統有很大的不同,採用的是類似VCR工作方式一樣的拉取型伺服器(pull server):
使用者進程發出start系統調用,指定要讀取的檔案和其他各種參數,然後使用者進程以幀進來的速率對他們進行處理。直到使用者發出stop停止命令停止資料退給使用者。
7.6.1 VCR控制功能
視頻服務通常也需要實現VCR控制功能,包括暫停、快進和倒帶。
暫停:使用者發送一個訊息給視頻伺服器,告訴他停止,然後視頻伺服器記住當前幀就可以了。
但是這中間有一個問題是,為了保證服務的品質,伺服器應該為每個流出的資料保留諸如磁碟頻寬和記憶體緩衝區等資源。如何判斷合適需要丟棄資源合適保留資源是一個問題
快進和快退:
通常來說如果不存在壓縮的情況下只要以每10幀顯示一幀的方式來實現快進或者倒退就可以了。但是由於壓縮的問題,每一幀的大小是不不同的,無法進行隨機訪問。通常只能建立索引。
但是通常來說可以採用另一種方案在伺服器端儲存另一檔案。它以10幀為一幀對映像進行抽樣,這樣只要播放這個檔案看起來就好像是以10畫面播放速率在前進一樣。
這種方案是一種更為通用的方案。但是還需要注意幾個問題:
1. 需要額外的磁碟塊來存放額外的檔案。
2. 快進和倒退只能以固定速率進行
3. 在常規檔案和快進快退檔案之間需要額外的演算法。
7.6.2 近似點播
ApsaraVideo for VOD遇到的問題是使用者可能在任意時刻點播電影,因此即使有很多使用者同時觀看一部電影,但是由於起始的時間不同,可能需要為每個使用者提供一個專門的進程服務這大大提高了伺服器的壓力。
一個常用的方法是對電影進行分流。比如每5分鐘送出去一個流,這樣就可以重用資料流。而代價是稍微的調整了使用者接受服務的時間,原理類似於公交車的運行情況。
7.6.3 具有VCR功能的近似ApsaraVideo for VOD
與近似點播的服務相同,但是需要增加一些內容:
要求每個客戶機在本地緩衝前ΔT時間已經即將來臨的ΔT時間的內容。當然緩衝前ΔT時間的內容是容易的,只有將顯示之後的內容儲存下來即可,但是緩衝即將來臨的ΔT時間的內容就比較麻煩了。但是如果客戶機又一次讀取兩個資料流的能力也可以實現(這句話沒有理解清楚)
比如現在的播放點(play point)70到80分鐘內的內部被緩衝。如果快進或者快退的內容在這個範圍內則只有播放這個範圍內的內容,然後將這個根據播放點緩衝新的內容就可以了。
如果新的播放點超出了緩衝的內容,則需要開啟一個私人的進程從新的播放點緩衝資料,並且同樣根據新的緩衝點來開啟新的緩衝區,在實際中可以對播放速率稍加調整使得播放的時間逐漸遷移到最近的資料流中,以減小資料率。
7.7 檔案存放
多媒體檔案非常龐大,通常唯寫一次且讀取多次,並且傾向於被順序訪問。它們的回訪還必須滿足嚴格的服務品質標準。
7.7.1 在單個磁碟上存放檔案
- 將檔案單獨順序存放
- 將同一幀的視頻音軌和文本都放在一起。
需要說明的是在具有多個並發的視頻伺服器上。將檔案連續的放在一起就失去了它原本的意義,因為需要同時發送多個視頻的資料流,因此仍然需要不停的切換軌道。
7.7.2 兩個代替的檔案組織策略
小塊模型
- 磁碟塊的大小比幀的大小要小的多。每部電影給一個索引,這是一個資料結構,每一幀有一個幀索引項目,指向幀的開始。每一幀本身是一串聯續的塊,包含該幀的所有視頻、音頻和文本。
- 每次操作讀取一幀,使用簡單的雙緩衝就可以工作的很好。
- 對於磁碟效能,單獨讀入小的幀效率是很低的,而且很難將單獨的幀分解儲存在多個磁碟機上。
- 也稱為恒定時間長度(constant time length)
- 可以通過只顯示I幀實現快進。即使是通過額外的檔案實現10被抽樣後實現快速抽樣,小塊方式也更便於1倍幀和10倍幀的檔案的映射。
大塊模型(剩餘空閑)
- 磁碟塊的大小遠遠大於塊,並且在每一塊中放入多個幀,當下一幀填不滿塊的時候,保留空餘。這樣產生了很多空閑空間,但是達到了最大的效能。然後建立一個塊索引。可能還有額外的資訊需要包含,比如哪一幀屬於哪一塊。
- 塊的所有比幀索引小的多
- 每個緩衝區必須足夠大已裝得下最大可能的I幀。雖然雙緩衝區也可以用於大塊情形,但是通常不這樣做而是使用一個迴圈傳輸緩衝區,當緩衝區內容小於一定閾值時讀入一個新的幀。
- 對於磁碟效能,大塊方式可以全速的運轉磁碟,這一點很重要,另外也可以將塊分解裝到多個磁碟機上。
- 也稱為很定資料長度(constant data length)
大塊模型(填充空閑)
- 磁碟塊的大小遠遠大於塊,並且在每一塊中放入多個幀,當下一幀填不滿塊的時候,依然用幀填充塊然後將幀分裂開使其跨磁碟塊。這樣做降低了效能但是提高了使用空間率。然後建立一個塊索引。可能還有額外的資訊需要包含,比如哪一幀屬於哪一塊。
- 其餘同上
如何權衡:
- 幀索引:電影在播放時使用大量RAM,磁碟浪費小
- 塊索引(剩餘空間):RAM用量低,磁碟浪費大
- 塊索引(填充空閑):RAM用量低,無磁碟浪費,需要額外尋道
7.7.3 近似ApsaraVideo for VOD的檔案存放
根據近似ApsaraVideo for VOD的播放方式這樣的不同的磁碟檔案存放方式也有不同的效果。將每個視頻流的檔案按照順序依次排列可以依次讀取得到全部的需要發送的全部資料流。這樣的方式顯然是理想的
簡單的緩衝策略就是雙緩衝,唯一需要靠的是雙緩衝的大小。
要求緩衝區大於資料流數量*最大I幀大小顯然是過量的,通常可以要求緩衝區足夠裝下第二大磁軌可能更為明智。同時存在的資料流越多統計意義也更強。
7.7.4 在單個磁碟上存放多個檔案
之前考慮的是單個電影的情況。如果考慮多個電影的情況。通常來說多部電影的命中率存在一定規律。通常對於N部電影,第n部電影的命中率通常是C/N其中N是n,C是一個常數。滿足
C/1+C/2+C/3+...+C/N=1
這樣的條件。
通常來說視頻伺服器上的檔案存放因此滿足管風琴分布。這樣在實際中可以保留將磁頭保持在磁碟的中央,以減小移動的時間。
7.7.5 在多個磁碟上存放檔案
當然可以採用RAIDD的方式。但是這樣RAID控制器有時會成為高速處理的瓶頸。關於RAID的方式需要額外的討論
- 無條帶方式:每個檔案單獨放在一個磁碟上。順序存放
- 所有檔案採用相同的條帶模式:每一部電影在多塊次上成條帶。因為每個磁碟都從第一個磁碟開始,負載不均衡
- 交錯的條帶模式,如c所示。隨機的條帶模式,如d所示。平衡了負載。
當然以上都是針對幀是相同大小的,實際上真是不同的。解決這一問題有兩個方案
- 按幀分條帶
- 按塊分條帶
最後一個問題是在多少磁碟上分條帶
- 寬條帶:如果在極大的範圍內分條帶,雖然可以得到很好地Server Load Balancer,但是如果一個磁碟壞了則導致無法播放。
- 窄條帶:有相反的情況。通常可能會遭遇到熱點問題。
因此需要一定的平衡機制。
讀書筆記-現代作業系統-7多媒體作業系統-7.6多媒體檔案系統泛型7.7檔案存放