多名稱空間結合cgroup保障儲存QoS
6月, Step Ahead 向前一步——Memblaze 新品釋出會在北京召開,Memblaze在釋出會現場圍繞PBlaze5 910/916及510/516兩大系列NVMe SSD的能源效率、Trim保障雲業務、多名稱空間與cgroup結合保障儲存QoS等主題做了演示方案。這些方案全面展示了Memblaze新一代NVMe SSD產品的優勢,而且對於企業使用者部署和使用NVMe SSD,構建高速、高效的儲存系統同樣具有借鑑意義。
在此我們將對這些關鍵的技術細節通過系列文章解讀,本文主要介紹的是多名稱空間結合cgroup保障儲存QoS的方案。
關於多名稱空間和cgroup
多名稱空間(為方便解釋相關操作及原理,後文名稱空間會寫成namespace)是PBlaze5系列NVMe SSD的一項關鍵特性,使用者空間被多個namespace劃開。 在PBlaze5系列產品中,可以將邏輯塊按需劃分為最多32個namespace,每個namespace擁有獨立邏輯地址和NSID,獨立格式化和訪問。Controller 就是通過 NSID 來引用特定的 namespace 。
劃分了32個namespace的PBlaze5
每個namespace 都可以單獨配置硬碟的引數,如配置不同的物理扇區大小、執行trim指令、資料保護、加密等。需要指出的是多名命空間在NVMe SSD的實現原理在NVMe標準協議中有明確的定義,但是不同廠商對其有不同的解釋。
這就是多名稱空間,他為上層的資源排程機制提供了一個基礎平臺。結合cgroup就可以控制儲存的QoS。(關於多名稱空間更多細節,參見文章《實錘,PBlaze5實力演繹multiplenamespaces 功能(上)》和《實錘,PBlaze5實力演繹multiplenamespaces 功能(下)》)。
cgroup(control group)是Linux核心提供的一種可以限制、記錄、隔離程式組(process groups)所使用的物理資源(如:CPU, Memory, IO等)的機制。最初由Google的工程師提出,2007 年進入 Linux 2.6.24 核心。cgroup 也是 LXC/Docker 為實現虛擬化所使用的資源管理手段。可見cgroup對於Linux的資源管理和容器的實現都具有重要的意義,並且這是一項較為成熟的技術。
cgroup分v1和v2兩個版本,v1實現較早但是應用較為廣泛;v2則是重新設計之後的版本,該版本從Linux 4.5核心開始可以用於生產環境,並且v1和v2可以混合使用。由於當下cgroup v1版更加成熟,本文也使用v1版進行介紹。
使用cgroup之前需要介紹幾個比較重要的概念:
• 任務(task)。在 cgroup 中,任務就是系統的一個程式;
• 控制組(control group)。控制組就是一組按照某種標準劃分的程式。cgroup 中的資源控制都是以控制組為單位實現。一個程式可以加入到某個控制組,也從一個程式組遷移到另一個控制組。一個程式組的程式可以使用 cgroup 以控制組為單位分配的資源,同時受到 cgroup 以控制組為單位設定的限制;
• 層級(hierarchy)。控制組可以組織成 hierarchical 的形式,既一顆控制組樹。控制組樹上的子節點控制組是父節點控制組的孩子,繼承父控制組的特定的屬性;
• 子系統(subsystem)。一個子系統就是一個資源控制器,本文介紹的方案使用的就是blkio子系統,其他的還有memory、cpu、cpuset等等子系統。子系統必須附加(attach)到一個層級上才能起作用,一個子系統附加到某個層級以後,這個層級上的所有控制族群都受到這個子系統的控制。
關於cgoup的相關資訊和使用方法都可以在其官方文件中找到,這裡不多贅述,只對blkio子系統使用進行一個介紹。blkio子系統主要功能是控制磁碟等塊裝置的效能等引數,掛載cgroup root目錄以及blkio子系統如下所示:
echo "259:0 102400" > blkio.throttle.read_bps_device
echo "259:0 10" > blkio.throttle.read_iops_device
在對應的子系統目錄下通過mkdir建立資源組,rmdir可將對應資源組刪除。實際操作中,以讀的IOPS和頻寬為例,可以分別設定兩個引數的上限,如下所示:
mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir /sys/fs/cgroup/blkio
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
第一條命令將259:0裝置(這裡的裝置可以是namespace,下同)的讀頻寬限定在100KB/s,第二條命令將259:0裝置讀iops限定在10。使用者可以依照上面的命令格式對讀和寫的IOPS和頻寬分別進行設定,cgroup會依據多個閾值對裝置(這裡可以是多個1到多個namespace)的效能進行精準的控制,如此一來,即便是讀寫混合、多種I/O size混合的應用場景,NVMe SSD的QoS仍然有保障。
測試結果展示
多名稱空間結合cgroup保障儲存QoS的方案能夠實現的效果在日前Step Ahead 向前一步——Memblaze 新品釋出會上進行了詳細的展示,這裡我們對進行再次解讀。
測試條件
Server: PowerEdge R730xd
cpu:Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
Memory:64GB
Storage:PBlaze5 910 U.2 3.84T NVMe SSD
測試軟體:fio-3.2
實驗介紹
在戴爾的R730xd上裝一塊3.84TB的PBlaze5 910 NVMe SSD,建立8個相同容量的namespace。使用fio進行測試,並對讀IOPS的控制效果,事實上使用者可以依據自身需求對寫IOPS,寫頻寬以及讀頻寬依照這個思路進行操作。
3.2 測試步驟
1) 建立8個相同容量namespace
2) 初始化處理,確保裝置進入穩態
3) 進行IO測試1
前4個namespace讀iops限制為3萬
後4個namespace讀iops限制為1萬
4KB 100%隨機讀,fio queue depth=1,300秒
4) 進行IO測試2
前4個namespace讀iops限制為6萬
後4個namespace讀iops限制為1萬
4KB 100%隨機讀,fio queue depth=16,300秒
測試結果展示
多名稱空間將NVMe SSD的使用者空間劃分為多個區域,不同的區域可以獨立進行Trim、格式化等操作。並且上層的一些高階功能的實現構建了一個基礎平臺,cgroup就是這樣高階功能中的代表。cgroup誕生於谷歌,並在Linux生態中實踐多年,是一項對底層硬體資源管控的成熟技術。多名稱空間與cgroup的結合是IT系統中一個軟硬體結合並充分發揮各自優勢的方案,各類虛擬化、容器、雲端計算、雲端儲存等應用場景都可以藉助這一方案保障儲存系統的QoS。
相關閱讀:
cgroup v1官方文件https://www.kernel.org/doc/Documentation/cgroup-v1/cgroup.txt
cgroup v1中塊裝置控制文件https://www.kernel.org/doc/Documentation/cgroup-v1/blkio-controller.txt
Cgroup與LXC簡介http://blog.51cto.com/speakingbaicai/1359825
CGroup 介紹、應用例項及原理描述
https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html
測試結果視訊
https://www.bilibili.com/video/av26458755/
相關文章
- innodb表空間儲存結構
- PostgreSQL儲存智慧-空間聚集儲存SQL
- 【儲存管理】表空間概念
- PG的物理儲存結構、版本控制、空間回收
- 禪道 - 儲存空間釋放
- 【儲存管理】建立永久表空間
- 遷移表結構時儲存空間過大問題
- oracle 修改表空間儲存路徑Oracle
- dbms_space 評估儲存空間
- 名稱空間
- JAXB名稱空間及名稱空間字首處理
- Synology群暉NAS儲存正確建立儲存池和儲存空間的方法
- 掃描儲存上的新加空間
- set unused 是否會釋放儲存空間
- C語言中識別符號的作用域、名稱空間、連結屬性、生命週期、儲存型別C語言符號型別
- PHP 名稱空間PHP
- PHP名稱空間PHP
- vuex名稱空間Vue
- jQuery 名稱空間jQuery
- JavaScript 名稱空間JavaScript
- [DB2]表空間之DMS、自動儲存的DMS表空間DB2
- win10保留的儲存空間怎麼檢視_win10保留的儲存空間的檢視方法Win10
- 鐵威馬NAS建立儲存空間的方法
- UniCloud空間雲端儲存圖床原始碼Cloud圖床原始碼
- 表在表空間中的儲存情況
- 給資料庫新增儲存空間的案例資料庫
- IBM DS8700儲存維護和管理二:儲存空間劃分IBM
- 三層儲存技術保障雲服務的儲存安全
- python名稱空間Python
- C++名稱空間C++
- 更改模型名稱空間模型
- 全域性名稱空間
- C++ 名稱空間C++
- Python 名稱空間Python
- 11. 名稱空間
- ts---名稱空間
- webservice修改名稱空間Web
- 如何刪除 Mac 儲存空間的其他選項?Mac