Linux資源管理-IO優先順序,linux-io優先順序

來源:互聯網
上載者:User

Linux資源管理-IO優先順序,linux-io優先順序

前一篇部落格介紹了利用 cgroup 來控制進程的 CPU和記憶體使用量情況, 這次補上使用 cgroup 來控制進程的IO優先順序的方法.

 

前提條件

如果想控制進程的IO優先順序, 需要核心的支援, 核心編譯時間需要開啟下面2個參數.

CONFIG_BLK_CGROUP=yCONFIG_CFQ_GROUP_IOSCHED=y

查看是否開啟這2個核心編譯選項的方法很簡單:

root@debian-113:~# grep -i 'blk_cgroup' /boot/config-`uname -r`root@debian-113:~# grep -i 'cfq_group' /boot/config-`uname -r`

如果這2個核心選項沒有開啟, 只能重新編譯核心後再來實驗下面的執行個體了.

 

再次通過 /proc/cgroups 來查看 blkio 是否已經啟用.

root@debian-113:~# cat /proc/cgroups #subsys_name    hierarchy    num_cgroups    enabledcpuset    0    1    1cpu    0    1    1cpuacct    0    1    1memory    0    1    1devices    0    1    1freezer    0    1    1net_cls    0    1    1blkio    0    1    1    <-- enabled = 1, 說明已經啟用perf_event    0    1    1

如果 blkio 沒有啟用, 可以通過grub設定啟動參數來啟用它.

類似的可以參考: Linux資源控制-CPU和記憶體  中 執行個體4 - cgroup 對使用的記憶體的控制 中啟用memory的方法。

 

除此之外, 還得查看是否能夠將 CFQ 作為IO發送器來使用.

root@debian-113:~# cat /sys/class/block/sda/queue/scheduler noop deadline [cfq]

上述結果表示支援cfq調度, []括住cfq 表示當前使用的就是 cfq調度.

如果 cat 的結果中沒有 cfq, 需要重新編譯核心, 使之能夠支援 cfq調度.

如果 cat 的結果中有 cfq, 但是 cfq 不是當前正在使用的發送器, 即 [] 沒有括在 cfq上, 那麼

cat cfq /sys/class/block/sda/queue/scheduler     <-- 將當前的IO發送器設定成 cfq

注: 上面的 sda 是我的測試的硬碟, 如果你的是 sdb 或者其它, 請對應修改.

 

執行個體 - 控制IO優先順序

 

實驗之前, 先製作測試指令碼. (簡單寫了一個如下)

#!/bin/bash##################################################################### 1. 創造2個測試檔案, 大小都是1G# 2. 將當前進程加入到指定 cgroup# 3. 執行 dd 操作# 4. 刪除 測試檔案# 5. 顯示log####################################################################function usage(){    echo "./blkio-test.sh <group1> <group2>"    exit 1}if [ $# != 2 ]; then    usagefigroup1_src=~/group1.srcgroup2_src=~/group2.srcgroup1_log=/tmp/group1.loggroup2_log=/tmp/group2.loggroup1=$1group2=$2echo "產生測試資料 $group1_src 和 $group2_src (大小都是1G)"dd if=/dev/zero of=$group1_src count=1024 bs=1Mdd if=/dev/zero of=$group2_src count=1024 bs=1Mecho "同時在 $group1 和 $group2 中開始 dd 測試"echo 3 > /proc/sys/vm/drop_cachesecho $$ >> $group1/tasks(date; dd if=$group1_src of=/dev/null; date;) > $group1_log 2>&1 &echo $$ >> $group2/tasks(date; dd if=$group2_src of=/dev/null; date;) > $group2_log 2>&1 &waitecho "測試完成!"echo "開始清除測試檔案"rm -rf $group1_src $group2_srcecho "測試檔案清除完成"echo "------------------------------------------"echo "顯示group1 的log"cat $group1_logecho "------------------------------------------"echo "顯示group2 的log"cat $group2_logecho "------------------------------------------"

 

開始實驗:

# 掛載 cgroup 檔案系統root@debian-113:~# mount -t cgroup -o blkio cgroup /mnt/cgroup/root@debian-113:~# mkdir /mnt/cgroup/{A,B}root@debian-113:~# ll /mnt/cgroup/total 0drwxr-xr-x 2 root root 0 Sep  5 13:23 Adrwxr-xr-x 2 root root 0 Sep  5 13:23 B-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.io_merged-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.io_queued-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.io_service_bytes-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.io_serviced-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.io_service_time-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.io_wait_time--w------- 1 root root 0 Sep  5 13:23 blkio.reset_stats-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.sectors-r--r--r-- 1 root root 0 Sep  5 13:23 blkio.time-rw-r--r-- 1 root root 0 Sep  5 13:23 blkio.weight   <-- 這個就是設定IO優先順序的檔案-rw-r--r-- 1 root root 0 Sep  5 13:23 blkio.weight_device-rw-r--r-- 1 root root 0 Sep  5 13:23 cgroup.clone_children--w--w--w- 1 root root 0 Sep  5 13:23 cgroup.event_control-rw-r--r-- 1 root root 0 Sep  5 13:23 cgroup.procs-rw-r--r-- 1 root root 0 Sep  5 13:23 notify_on_release-rw-r--r-- 1 root root 0 Sep  5 13:23 release_agent-rw-r--r-- 1 root root 0 Sep  5 13:23 tasks# 預設2個組內的IO優先順序都是500root@debian-113:~# cat /mnt/cgroup/A/blkio.weight500  <-- 這個值的範圍是 100 ~ 1000, 值越大優先順序越高root@debian-113:~# cat /mnt/cgroup/B/blkio.weight500# 預設情況下的測試結果如下: A和B耗時都是 20秒root@debian-113:~# ./blkio-test.sh /mnt/cgroup/A /mnt/cgroup/B產生測試資料 /root/group1.src 和 /root/group2.src (大小都是1G)1024+0 records in1024+0 records out1073741824 bytes (1.1 GB) copied, 6.01188 s, 179 MB/s1024+0 records in1024+0 records out1073741824 bytes (1.1 GB) copied, 9.4272 s, 114 MB/s同時在 /mnt/cgroup/A 和 /mnt/cgroup/B 中開始 dd 測試測試完成!開始清除測試檔案測試檔案清除完成------------------------------------------顯示group1 的logFri Sep  5 13:26:31 CST 20142097152+0 records in2097152+0 records out1073741824 bytes (1.1 GB) copied, 20.0504 s, 53.6 MB/sFri Sep  5 13:26:51 CST 2014------------------------------------------顯示group2 的logFri Sep  5 13:26:31 CST 20142097152+0 records in2097152+0 records out1073741824 bytes (1.1 GB) copied, 18.8583 s, 56.9 MB/sFri Sep  5 13:26:51 CST 2014------------------------------------------# 修改A的優先順序為100, B的優先順序為1000root@debian-113:~# echo 100 > /mnt/cgroup/A/blkio.weightroot@debian-113:~# echo 1000 > /mnt/cgroup/B/blkio.weightroot@debian-113:~# cat /mnt/cgroup/A/blkio.weight100root@debian-113:~# cat /mnt/cgroup/B/blkio.weight1000# 不同優先順序下的測試結果如下: A耗時 19秒; B耗時 11秒root@debian-113:~# ./blkio-test.sh /mnt/cgroup/A /mnt/cgroup/B產生測試資料 /root/group1.src 和 /root/group2.src (大小都是1G)1024+0 records in1024+0 records out1073741824 bytes (1.1 GB) copied, 6.52967 s, 164 MB/s1024+0 records in1024+0 records out1073741824 bytes (1.1 GB) copied, 8.01311 s, 134 MB/s同時在 /mnt/cgroup/A 和 /mnt/cgroup/B 中開始 dd 測試測試完成!開始清除測試檔案測試檔案清除完成------------------------------------------顯示group1 的logFri Sep  5 13:30:06 CST 20142097152+0 records in2097152+0 records out1073741824 bytes (1.1 GB) copied, 18.5598 s, 57.9 MB/sFri Sep  5 13:30:25 CST 2014------------------------------------------顯示group2 的logFri Sep  5 13:30:06 CST 20142097152+0 records in2097152+0 records out1073741824 bytes (1.1 GB) copied, 10.6127 s, 101 MB/sFri Sep  5 13:30:17 CST 2014------------------------------------------

 

可以看出, IO優先順序調整之後, 確實優先順序高的cgroup中的進程能更快完成IO操作.

 

總結

其實 cgroup 除了能夠IO優先順序之外, 還可以控制進程的其它IO屬性, 具體參見掛載在 cgroup 的IO相關設定檔案.

各個檔案的具體含義, 請參考更詳細的 cgroup 相關文檔.


有哪種系統是進程優先順序數值大的優先順序高的? linux系統進程優先順序最高優先順序是-20,最低優先順序是19?

你所說的linux系統的優先順序數確實是這樣的。需要注意的是普通使用者只能在0~19之間調整應用程式的優先權值,只有超級使用者有權調整更高的優先權值(從-20~19)。linux系統屬於這種數值越小優先順序越高,數值越大優先順序越低的系統。windows屬於那種優先數值大的優先順序高的系統。其他的就不大清楚
 
linux資源是怎管理的? 要詳細點的快

資源管理員:為了確保分配給作業合適的資源,叢集資源管理需要維護一個資料庫。這個資料庫記錄了叢集系統中各種資源的屬性和狀態、所有使用者提交的請求和正在啟動並執行作業。策略管理器根據這些資料和指定的調度策略產生優先順序列表。資源管理員根據這個優先順序列表調度作業。資源管理員還應該具有資源預留能力。這樣不僅可以保留強大的資源給需要的作業,而且可以預留一定的冗餘資源以應付叢集中的結點失效和突發的計算。
作業調度策略管理器:策略管理器根據資源管理員得到各個結點上的資源狀況和系統的作業資訊產生一個優先順序列表。這個列表告訴資源管理員何時在哪些結點上運行哪個作業。策略管理器不僅要提供一個複雜的參數集合去定義計算環境和作業,而且要為這個定義提供簡捷靈活的表達方式以允許系統管理員實現策略驅動的資源調度。
2 Beowulf叢集中的作業管理軟體
有很多種選擇去管理叢集系統中的資源。其中PBS資源管理員和Maui作業調度器最適合叢集系統。

2.1 PBS
PBS(Portable Batch System)是由NASA開發的靈活的批處理系統。它被用於叢集系統、超級電腦和大規模並行系統。PBS主要有如下特徵:

易用性:為所有的資源提供統一的介面,易於配置以滿足不同系統的需求,靈活的作業調度器允許不同系統採用自己的調度策略。
移植性:符合POSIX 1003.2標準,可以用於shell和批處理等各種環境。
適配性:可以適配與各種管理原則,並提供可擴充的認證和安全模型。支援廣域網路上的負載的動態分發和建立在多個物理位置不同的實體上的虛擬組織。
靈活性:支援互動和批次工作。
OpenPBS( www.OpenPBS.org/)是PBS的Open Source的實現。商業版本的PBS可以參照: www.pbspro.com/。

2.2 Maui
Maui 是一個進階的作業調度器。它採用積極的調度策略最佳化資源的利用和減少作業的回應時間。Maui的資源和負載管理允許進階的參數配置:作業優先順序(Job Priority)、調度和分配(Scheduling and Allocation)、公平性和公平共用(Fairness and Fairshare)和預留策略(Reservation Policy)。Maui的QoS機制允許資源和服務的直接傳遞、策略解除(Policy Exemption)和指定特徵的受限訪問。Maui採用進階的資源預留架構可以保證精確控制資源何時、何地、被誰、怎樣使用。Maui的預留架構完全支援非入侵式的元調度。

Maui的設計得益於世界最大的高效能運算中心的經驗。Maui本身也提供測試載入器和模擬器用於估計和調節系統效能。

Maui需要資源管理員與其配合使用。我們可以把Maui想象為PBS中的一個插入組件。

更多Maui的資訊可以訪問: www.supercluster.org

3 叢集系統管理
從系統組成角度說,叢集系統是......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.