Solaris Resource Manager 1.3 系統管理指南

新增一個計算批次應用程式使用者

本範例將對下列指令加以介紹:

srmkill

殺掉附加至一個 lnode 所有使用中的處理

財務部門擁有資料庫系統,但 Joe 是一位工程部的使用者,必須執行一個計算批次工作,而且想要在下班時間系統通常被閑置時,利用財務部的機器來工作。財務部認為 Joe 工作的重要性不如資料庫,因此同意只要他的工作不會干擾系統的主要工作就可以進行。要實施這個政策,必須新增一個群組 (batch) 至 lnode 資料庫,並且將 Joe 新增至伺服器 lnode 階層的新 batch 群組中:

# limadm set cpu.shares=20 databases
# limadm set cpu.shares=1 batch
# limadm set cpu.shares=1 joe
# limadm set sgroup=batch joe

圖 10-2 新增一個計算批次應用程式

圖表顯示將名為「批次」的新群組新增到資料庫與 lnode 伺服器階層,以及將使用者 Joe 新增到新批次群組。

此指令序列會變更配分的配置,使 databases 群組擁有 20 個配分,而 batch 群組則只有一個配分。這會指定 batch 群組的成員 (只有 Joe 一人) 會使用至少 1/21 的機器,這時 databases 群組必須正在使用中。 databases 群組收到 20/21 或百分之 95.2 ,遠比先前決定足夠處理資料庫工作的 60% + 20% = 80% 還多。如果 databases 不需要其完全的配置資源,Joe 就會收到較其百分之 4.8 的配置還多的資源。如果 databases 處於完全停用中的狀態,則 Joe 的配置可能會達到百分之 100。當配置給 databases 尚未使用的配分數目從 1 增為 20 時,沒有必要對 db1db2 配分的配置做任何變更。在 databases 群組之中,仍然有四個尚未使用的配分,依照 3:1 的比率配置。排程樹的不同層級彼此是互相獨立的,重要的是同層群組之間的配分比率。

儘管有了這些保證,財務部還是要進一步確保 Joe 無法在日間顛峰工作時間登入系統。要這麼做,就必須對 batch 群組加以某種登入控制。因為這些控制要視一天的時間而定,請執行一個只允許 batch 群組在特定時間登入的指令集。舉例來說,您可以採用 crontab 項目來實行這個限制,例如:

0 6 * * * /usr/srm/bin/limadm set flag.nologin=set batch 
0 18 * * * /usr/srm/bin/limadm set flag.nologin=clear batch

在早晨 6 時,batch 沒有登錄的許可,爾在 18 時(下午 6 時),限制被移除。

您也可以實行更為嚴厲的政策,請新增另一行至 crontab 項目中:

01 6 * * * /usr/srm/bin/srmkill joe

這會使用 srmkill(1MSRM) 指令在上午 6:01 時殺掉任何附加至 lnode Joe 的處理。如果工作所需的唯一資源都由 Solaris Resource Manager 所控制的話,就不需要這麼做。此動作只有在 Joe 的工作有可能會佔用其他資源因而影響到正常工作時才派得上用場。例如一項握有關鍵性資料庫鎖定或是掌控一個 I/O 管道的重要工作。

那麼現在 Joe 就只能在夜間登入並且執行他的工作。因為 Joe (和整個 batch 群組) 比其他應用程式所得的配分要少許多,他的應用程式將會以少於百分之 5 的機器資源來執行。同樣地,可以使用 nice(1) 來降低附加至此工作的處理優先順序,使它以低於其他擁有相等 Solaris Resource Manager 配分的工作之順序來執行。

這時財務部已經確保了其資料庫應用程式對此系統有足夠的存取權,並且不會互相影響到對方的工作。財務部同時也在滿足 Joe 的隔夜批次處理工作量的同時,確保了他的工作也不會干擾到與該部門任務息息相關的重要處理。