欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

cgroup?blkio子系統(tǒng)對容器的讀寫限速詳解

 更新時間:2023年08月20日 11:27:06   作者:a朋  
這篇文章主要為大家介紹了cgroup?blkio子系統(tǒng)對容器的讀寫限速詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

如果多個容器同時read/write節(jié)點上的一塊磁盤,如何對每個容器的read/write操作限速,以防止其相互干擾、相互競爭。

cgroup v1的blkio子系統(tǒng),可以限制磁盤的I/O。

一. 磁盤讀寫的指標

衡量磁盤讀寫的常見指標:

  • IOPS(Input/Output Operations per Second): 每秒讀寫磁盤的次數(shù);
  • Throughput(吞吐量): 每秒讀寫磁盤的數(shù)據(jù)量,也稱為帶寬(BandWidth);

Throughput = 數(shù)據(jù)塊大小 * IOPS

在IOPS固定的情況下,讀寫的數(shù)據(jù)塊越大,吞吐量也越大。

二. cgroup v1的blkio子系統(tǒng)

blkio cgroup的虛擬文件系統(tǒng)掛載點/sys/fs/cgroup/blkio/,包含以下參數(shù):

  • blkio.throttle.read_iops_device:讀IOPS限制;
  • blkio.throttle.read_bps_device:讀吞吐量限制;
  • blkio.throttle.write_iops.device:寫IOPS限制;
  • blkio.throttle.write_bps_device:寫吞吐量限制;

比如,限制容器對磁盤/dev/vdb的吞吐量 <= 10MB/s:

## 1.首先拿到/dev/vdb的主次設(shè)備號
# 其中 252:16是/dev/vdb的主次設(shè)備號
# ls -l /dev/vdb -l
brw-rw---- 1 root disk 252, 16 Nov  2 08:02 /dev/vdb

## 2.然后寫cgroup
echo "252:16 10485760" &gt; $CGROUP_CONTAINER_PATH/blkio.throttle.write_bps_device

可以使用fio工具,在容器中進行驗證:

docker exec fio_test1 fio -direct=1 -rw=write -ioengine=libaio -bs=4k -size=100MB -numjobs=1 -name=/tmp/fio_test1.log

值得注意的是

Cgroupv1 blkio只能對Direct I/O進行限速,不能對Buffered I/O進行限制。

三. Direct I/O 與 Buffered I/O

Direct I/O和Buffered I/O發(fā)生在用戶  磁盤文件時。

  • Direct I/O:

    • 通過Linux內(nèi)核的filesystem --> block layer --> disk driver --> disk hardware;
  • Buffered I/O:

    • 用戶進程將數(shù)據(jù)寫入Page cache后就返回了;
    • Linux內(nèi)核線程把內(nèi)存中的數(shù)據(jù)flush到磁盤;

在Linux中,基于性能考慮,絕大多數(shù)的應(yīng)用都使用Buffered I/O模式。

四. 為什么cgroup v1 blkio不能限制Buffered I/O

對下圖中的進程 pid_y 的cgroup進行限制,它分別屬于memory cgroup 和 blkio cgroup:

在blkio cgroup對 pid_y 做磁盤I/O限制的時候,blkio不會關(guān)心:

  • pid_y 用了哪些內(nèi)存,哪些屬于Page cache,何時flush到磁盤;
  • pid_y 中的Page cache被flush到磁盤時,由于是內(nèi)核線程執(zhí)行flush,產(chǎn)生的磁盤I/O不被計算到進程 pid_y上;

也就是說:

cgroup v1 blkio獨立與memory子系統(tǒng),它無法統(tǒng)計由Page cache刷入磁盤的I/O;

即 cgroup v1 blkio不能對Buffered I/O進行限速;

五. cgroup v2解決這一問題

cgroup v2解決了不能對Buffered I/O進行限速的問題。

在cgroup v2中:

  • 一個進程屬于一個控制組;
  • 每個控制組可以定義多個子系統(tǒng);

上圖中,pid_y 屬于控制組group2,而group2同時配置了io和memory子系統(tǒng);
在此情況下,cgroup對 pid_y 的磁盤讀寫進行限速的時候,就可以知道 pid_y 寫入Page Cache的數(shù)據(jù)量,這樣Buffered I/O的磁盤限速就實現(xiàn)了。

也就是說,在cgroup v2中:

內(nèi)核將Page cache flush到磁盤產(chǎn)生的I/O也會被計算到進程的I/O中;

對磁盤限速時,可以同時限制Directed I/O和Buffered I/O;

值得注意的是,目前runC、containerd和kubernetes剛開始支持cgroup v2,生產(chǎn)環(huán)境上cgroup v1遷移到cgroup v2還需要一個過程。

參考 blkio的文檔

https://www.kernel.org/doc/Documentation/cgroup-v1/blkio-controller.txt

以上就是cgroup blkio子系統(tǒng)對容器的讀寫限速詳解的詳細內(nèi)容,更多關(guān)于cgroup blkio容器讀寫限速的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 簡述Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關(guān)操作

    簡述Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關(guān)操作

    influxDB是一個分布式時間序列數(shù)據(jù)庫。這篇文章主要介紹了Docker 安裝influxDB分布式時間序列數(shù)據(jù)庫及相關(guān)操作,需要的朋友可以參考下
    2019-10-10
  • 利用docker搭建web服務(wù)環(huán)境的方法步驟

    利用docker搭建web服務(wù)環(huán)境的方法步驟

    這篇文章主要給大家介紹了關(guān)于利用docker搭建web服務(wù)環(huán)境的方法步驟,文中通過是示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • docker安裝gitea教程(本地部署gitea倉庫)

    docker安裝gitea教程(本地部署gitea倉庫)

    這篇文章主要介紹了docker安裝gitea教程(本地部署gitea倉庫),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • docker離線安裝并導(dǎo)入鏡像過程

    docker離線安裝并導(dǎo)入鏡像過程

    這篇文章主要介紹了docker離線安裝并導(dǎo)入鏡像過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用docker部署grafana+prometheus配置

    使用docker部署grafana+prometheus配置

    這篇文章主要介紹了docker部署grafana+prometheus配置,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Jenkins+docker發(fā)布Springbot服務(wù)的實現(xiàn)

    Jenkins+docker發(fā)布Springbot服務(wù)的實現(xiàn)

    本文主要介紹了Jenkins+docker發(fā)布Springbot服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 詳解使用docker搭建kafka環(huán)境

    詳解使用docker搭建kafka環(huán)境

    本篇文章主要介紹了詳解使用docker搭建kafka環(huán)境 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Docker Swarm實現(xiàn)服務(wù)的滾動更新的示例代碼

    Docker Swarm實現(xiàn)服務(wù)的滾動更新的示例代碼

    這篇文章主要介紹了Docker Swarm實現(xiàn)服務(wù)的滾動更新的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • excel導(dǎo)出在docker環(huán)境中總是失敗的問題

    excel導(dǎo)出在docker環(huán)境中總是失敗的問題

    這篇文章主要介紹了excel導(dǎo)出在docker環(huán)境中總是失敗的問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,
    2020-09-09
  • Docker中運行nginx并掛載本地目錄到鏡像中的方法

    Docker中運行nginx并掛載本地目錄到鏡像中的方法

    這篇文章主要介紹了Docker中運行nginx并掛載本地目錄到鏡像中的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論