適用於 Solaris 2.6 的 Solaris Resource Manager 1.0 系統管理指南(SPARC 平台版)

第 2章 一般操作

本章旨在介紹 Solaris Resource Manager 的操作原則及其主要概念。此外並舉例以強調文中闡述的理論,說明某些常見的 Solaris Resource Manager 使用方法。

Lnode 概觀

Solaris Resource Manager 係圍繞 Solaris kernel 而建構的一個基本附件,稱為 lnode(限制節點)。lnode 與 UNIX UID 對應,而且可以代表個別的使用者、使用者群組、應用程式以及特別要求。lnode 係以 UID 定位,而且被用來記錄資源配置策略以及使用者、使用者群組及/或應用程式層級處理的資源使用量的累計資料。

階層式結構

Solaris Resource Manager 管理模式會將 lnode 組織為一種階層式的結構,稱為排程樹。排程樹是利用 UID 來組織的﹕每個 lnode 都參考 lnode 在樹中的雙親的 UID。每個排程樹的子樹都稱為一個排程群組,而在一個排程群組 root 的使用者則稱為群組的 header。Root 使用者是整個排程樹的群組 header。一個群組 header 可以被授權管理群組內資源策略的功能。lnode 最初是藉由剖析 UID 檔以建立。一個 lnode 管理指令 (limadm(1MSRM)) 在安裝 Solaris Resource Manager 之後會建立額外的 lnode,並且將 lnode 指派給雙親。排程樹資料儲存在一個平面檔案資料庫中,可以在必要時加以修正。

雖然 lnode 所用的 UID 不需要對應至一個系統帳號,不過既然系統密碼映射中會加入登錄,我們還是建議您為每一個 lnode 的 UID 建立一個系統帳號。若是非葉片(節點)的 lnode(其階層下附有 lnode),與該 lnode 有關的帳號也許完全是管理性的,無人得以登入。但是它也有可能是一個真正的使用者 lnode,此使用者的確登入並執行附加至此非葉片 lnode 之上的處理。

請注意,Solaris Resource Manager 排程群組及群組 header 與 /etc/group 資料庫中所定義的系統群組毫不相關。每個排程樹的節點,包括群組 header,都以一個獨特的 UID 對應至一個真正的系統使用者。

階層式限制

如果將一個階層式限制指派給一個 lnode 樹(排程群組)中的群組 header,那麼此限制會應用至該使用者的使用量,以及排程群組的所有成員的總使用量。這樣便將限制施於整個群組及個別的成員之上。資源被配置給群組 header,它們再將資源配置給屬於同一個群組的使用者或使用者群組。

處理

每個處理都附加在一個 lnode 之上。 init 處理總是附加至 root lnode。以 fork(2) 系統呼叫建立處理時,這些處理會被附加至與其雙親相同的 lnode 之上。處理會使用一個 Solaris Resource Manager 系統呼叫,以重新附加至任何 lnode,不過要有足夠的權限。權限是由 root 或使用者利用正確的管理權限來設定的。

資源控制

Solaris Resource Manager 提供下列各系統資源的控制功能﹕CPU(處理機速率)使用量、虛擬記憶體、處理計數、登入計數以及終端機連結時間。

Solaris Resource Manager 會記錄每位使用者對每種資源的使用狀況。除了 CPU 使用量以外的所有資源,使用者對資源的使用可能會被附加上硬限制。如果使用者讓使用量達到限制的話,硬限制會使資源佔用的嘗試失效。硬限制都是以 kernel 或是負責管理各個資源的軟體來直接強制執行。一個零的限制值表示沒有任何限制。所有 root lnode 的限制屬性都應該保留零的設定。

Solaris Resource Manager 漸進式地消減過去的使用量(愈減愈多),以使得最近的使用量較大。系統管理員設定一個用來控制消減速率的半減期(減到原來的一半時)參數。均衡的使用量適合長的半減期,常見於較長的批次工作;然而短半減期則偏好互動性的使用者。

一般而言,所有的系統資源都可以分為兩種類別之一﹕固定(或不可更新)資源以及可更新資源。Solaris Resource Manager 分別以不同的方式來管理這兩種類型的資源。

固定資源

固定或不可更新資源有一定的限量,如虛擬記憶體、處理計數、登入計數以及連結時間。固定資源可以被取用(配置)或是釋出(解除配置),但是沒有其他任何實體可以在擁有者解除配置資源之前便使用這些資源。Solaris Resource Manager 會採用一種使用及限制模式來控制固定資源的使用量。使用量是指目前使用的資源,而限制則是 Solaris Resource Manager 所允許的最大使用量。

可更新資源

可更新資源指的是可不斷供應的資源,如 CPU 時間。可更新資源只能用掉,而且一旦使用之後便無法拿回。可更新資源在任何時間的供應都有所限制;而且當時不用的話,以後也沒有機會再用。(好比日光。任何一瞬間都只有一定量的日光照到地球上來,不過在未來的幾百萬年它還是會持續地照射。)因此可更新資源不需要重新配置便可重新指派給其他的使用者,以防止浪費。Solaris Resource Manager 採用一種使用量、限制及消減模式來控制一位使用者對可更新資源的佔用速率。使用量的定義是使用的全部資源總量,並限制其相對於其他使用者的使用比率。消減指的是減掉過去的使用量不算的一段時間。例如,下一個資源份量,如秒針走一格,會依據其配置的配分,以最低的總消減使用值配置給作用中的 lnode。消減的使用值是指﹕一段時間的使用量,減掉以半減期消減模式算出的過去使用量的某一部分。

CPU 資源是利用 Solaris Resource Manager SHR 排程器來加以控制。依據使用者所擁有的配分數目(好比一個公司的股份)來動態配置其 CPU 的使用時間,與其最近的使用量成反比。SHR 排程器的重要特點是當它管理個別線串的排程時(技術上而言,Solaris 中經過排程的實體是一種輕量型的處理 (LWP)),也會同時根據使用者的應得比例來分配 CPU 資源。

每位使用者同時也有一組旗標,是用來啟用或關閉特定系統權限的布林式變數;如登入。您可以分別設定每位使用者的旗標,或者可以由一個雙親 lnode 承繼其旗標。

任何使用者都可以讀取一個使用者的使用量、限制及旗標,但是只能由擁有管理權限的使用者來修改。

CPU 資源管理

可更新 CPU 服務的配置是利用一個公平分享排程器來加以控制。每一個 lnode 會被指派一個特定數量的 CPU 配分,就等於是公司的股份一樣。與每個 lnode 有關的處理所配置的 CPU 資源與可用的作用中配分總數成比例,其中的"作用中"表示 lnode 附加了執行中的處理。只有作用中的 lnode 會被視為資源配置,因為只有它們在執行作用中的處理,而且需要 CPU 時間。當一個處理佔用 CPU 循環時,其 lnode 的 CPU 使用量屬性會隨之增加。排程器會定期調整所有處理的優先順序,迫使 CPU 使用量的相對比率集中到所有作用中 lnode 在其個別層級的 CPU 配分相對比率。這樣一來,使用者可以至少在一段時間之後開始享有其 CPU 服務的權利,無論其他使用者的行為如何。排程器是階層式的,因為它也能確保群組收到其群組權利,無論成員的行為。Solaris Resource Manager 是一種長期性的排程器;它能確保所有的使用者及應用程式能在"排程器期限"的過程中接收到公平的配分。這表示當一位用量低的使用者開始要求 CPU 時,該使用者會比用量高的使用者收到較多的資源,直到其相對的使用量與其相對的"公平"配分配置差不多為止。您現在從權利中使用的愈多,以後收到的就愈少。此外,Solaris Resource Manager 有一個由系統管理員設定的消減期,會忘記過去的使用量。此消減模式是半減期消減之一,其中百分之 50 的資源在一個半減期之內被消減掉。這樣可以確保使用量穩定的使用者不至於被短期內要求高處理資源的使用者干擾。半減期消減期設定排程器的反應或"期限";內定值為 120 秒。愈短的時間值愈能造成整個系統的均衡反應,但其計算與維護整個系統的資源配置較不準確。無論管理設定值為何,排程器都會試圖防止困境(資源匱乏),並且確保即使在最極端的情況下也能達成合理的行為。

Solaris Resource Manager 排程器比標準 Solaris 排程器好的最主要原因就是它可以排程使用者或應用程式,而不是個別的處理。每個與 lnode 有關的處理都受到一組限制的約束。簡單如一個使用者執行一個單一作用中的處理,等於是讓每個處理受控於對應的 lnode 中所列的限制。若有一個以上的處理附加在 lnode 之上,就如一個群組中的每個成員都執行多個處理的話,所有的處理都會一起受到列出限制的約束。這表示使用者或應用程式無法佔用比他們所被允許的權利還要多的 CPU,無論他們執行多少併行的處理。將一定數量的配分指派為權利的方法既簡單又易懂,而且也可以預測變更使用者配分的效果如何。

Solaris Resource Manager 絕對不會浪費 CPU 的資源。不論使用者的配置多低,只要沒有其他使用者,該使用者會取得所有可用的 CPU 資源。其中一點是使用者可能會注意到執行效能比平常要來得差一點。如果一位只有低有效配分的使用者正在執行一個互動式的處理,但同時沒有他人在使用資源,執行的速度會比較快。然而,一旦另一位有較高有效配分的使用者要求 CPU 時間時,則該使用者會被優先考慮,因此第一位使用者就會覺得工作的進行有明顯減慢的情形出現。不過 Solaris Resource Manager 會盡力確保合法使用者不至於資源匱乏而無法進行任何工作。由 Solaris Resource Manager 排程的所有的處理(除了擁有最大 nice 值的之外)會定期由排程器取得配置的 CPU 資源。此外另有邏輯可以防止一位才登入的新使用者獲得理論上"公平"但超大比例的 CPU 而危害現存的使用者。

虛擬記憶體(每位-使用者以及每個-處理限制)

虛擬記憶體是利用一個固定資源模式來管理的。虛擬記憶體限制也適用於附加至此 lnode 所有處理的記憶體大小總數。此外,這種每個-處理虛擬記憶體的限制,會限制處理的虛擬位址空間大小總數、包括所有內碼、資料、堆疊、檔案映射以及共用程式庫。這兩種限制都是階層式的。限制虛擬記憶體的使用可以有效地防止虛擬記憶體匱乏。例如 Solaris Resource Manager 會阻止一個外洩記憶體的應用程式佔用未保證的虛擬記憶體量而危害所有使用者。相反的,此類處理只會犧牲自己,或在最壞的情況下,犧牲其資源群組內部的其他成員。

處理計數

使用者可以同時執行的處理的計數是使用一個階層式限制的固定資源模式來控制。

終端機登入連結時間

系統管理員及群組 header 可以設定終端機的登入權限、登入計數以及連結時間限制,由 Solaris Resource Manager 依照其個別的階層來實施這些限制。當一個使用者接近連結時間限制是,會送出一個警告訊息至使用者的終端機。到達限制時,使用者會接到通知,然後在短暫的寬限期之後被迫登出。

使用者管理

系統管理員可以為任何 lnode 設定管理權限,包括選擇性地指派管理權限給某些使用者。一位擁有階層式管理權限的使用者稱為一位子管理員。一位子管理員可以在其本身作為群組 header 的子樹中,建立、移除與修正使用者的 lnode。

子管理員通常無法修改他們自己的限制或旗標,而且無法修改其群組內部的旗標或使用量,以規避自己的旗標或限制。

中央管理員(或超級使用者)可以修改任何使用者的限制、使用量及旗標,包括本身的。也設定一個旗標以賦予普通使用者這種權限。

使用量資料概觀

Solaris Resource Manager 系統維護資訊(主要是目前及累計的資源使用量),管理員可以利用此資訊來進行全面性的系統資源會計。Solaris Resource Manager 並沒有提供任何的會計程式,但其公用程式卻可以作為開發一個自訂資源會計系統的基礎。

欲知更多有關設定會計程序的資訊,請參閱第 8章, 使用量資料

實例

這一節的實例說明用來控制系統資源及配置,以及用來顯示資訊的 Solaris Resource Manager 功能。

伺服器整合實例

第一個實例說明以下這些指令﹕

liminfo

將一或多位使用者的密碼屬性及限制資訊列印至一個終端機視窗

limadm

變更一組使用者的限制屬性或刪除限制資料庫登錄

srmuser

顯示或設定操作模式及系統 Solaris Resource Manager 的可調式參數

srmstat

顯示 lnode 活動資訊

如果將兩個伺服器整合至一個單一機器之上,每個伺服器都執行一個資料庫應用程式。只要在單一機器上執行兩個應用程式便可形成一個工作系統;不需要 Solaris Resource Manager,Solaris 作業系統也能根據公平使用的基礎來為應用程式配置資源,但是無法保護應用程式不與其他應用程式爭取資源需求。相反地,Solaris Resource Manager 可以提供防止應用程式嚴重缺乏資源的一種機制,其方法是啟始每個附加至參考 databases、db1db2 的 lnode 資料庫,。為達此目的,必須建立三個新管理位置保留符號使用者。例如, databasesdb1以及 db2。這些使用者被新增至 lnode 資料庫。既然 lnode 對應 UNIX UID,它們也必須新增人 passwd 檔(或密碼映射,如果系統使用一個命名服務,如 NIS 或 NIS+)。假設 UID 被新增至 passwd 檔或密碼映射,位置保留符號使用者 db1db2 會被指派給 databases lnode 群組,其指令為﹕

%  limadm set sgroup=0 databases
%  limadm set sgroup=databases db1 db2

假設 /usr/srm/bin 位於使用者的路徑。

圖 2-1 伺服器整合

Graphic

因為沒有其他定義的群組,databases 群組目前可以使用整個機器。會執行與資料庫有關的兩個 lnode,而執行資料庫應用程式的處理會利用資料庫實例啟始指令集中的 srmuser 指令,附加至適當的 lnode 上。例如,

% srmuser db1 /usr/bin/database1/init.db1
% srmuser db2 /usr/bin/database2/init.db2

啟始db1db2 其中任何一個資料庫時,使用 srmuser 指令以確保資料庫附加至正確的 lnode,而且收費正確(srmuser 這麼做不會影響處理的所有權)。要執行上述指令,一位使用者必須擁有執行 init.db1 的 UNIX 權限以及管理權限,才能將處理附加至 lnode db1 之上。當使用者登入並使用 databases 時,databases 所執行的活動都被累計至 lnode db1db2

藉由使用每個 lnode 一個配分的內定配置,databases 群組的使用量經過一段時間之後會取得平均,以確保 databases、db1db2 都能接收到相等的機器配置。尤其是 databases 群組-有一個可用的-配分,而且 databases 擁有它。每一個 lnode db1db2 都被賦予一個配分的內定配置。在 databases 群組之內,有兩個可用的配分,因此 db1db2 可以取得 databases 資源的相等配置(在這個簡單例子中並無相爭的配置,所以 databases 可以存取整個系統)。

如果發現 Database1 上的活動需要百分之 60 的機器的 CPU 功率,而 Database2 需要百分之 20 的功率,那麼管理員可以增加配置給 db1cpu.shares 數來指定系統至少可以提供這麼多(假設應用程式需要)﹕

%  limadm set cpu.shares=3 db1

databases 群組中有四個可用的配分;db1 中有三個,而 db2 中有一個。這個變更在一執行上述指令之後便馬上受到影響。在這一段過渡期當中,lnode db1 (Database1) 實際上會收到比其有權使用的百分之 60 還要多的機器資源,因為 Solaris Resource Manager 要花一點時間來平均使用量。不過當然視消減全域參數而定,這段時間不會太長。

要隨時監控此活動,請在不同的視窗中使用 liminfosrmstat指令﹕

%  liminfo -c db1
       # limit information shows all the data and 
       # settings for the lnode db1.

請參閱 "一個典型的應用程式伺服器"

此外,srmstat 還提供一種定期更新的顯示﹕

%  srmstat -ac      # srmstat shows the server activity and the 
                     # flag -ac sets a screen default update period 
                     # of 4 seconds to display the results.

有一部執行兩個資料庫應用程式的機器,一個接收資源的百分之 75,另一個則接收百分之 25。請牢記,超級使用者 (root) 是最高層的群組 header 使用者。因此作為 root 的處理會在需要時擁有整個系統的存取權。那麼如果建立一些額外的 lnode 以執行備份、精靈及其他指令集的話,root 處理便無法像傳統的執行方式一樣佔用整個機器。

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

此例說明下列指令﹕

srmkill

取消所有附加至一個 lnode 的作用中處理

財務部門擁有資料庫系統,但是一位工程部的使用者 (Joe) 必須執行一項電腦計算工作,所以想要利用系統閑置的離峰時間來使用財務部的機器。但財務部認為 Joe 的工作不如 databases 來得重要,因此只同意讓他在不干擾系統主要任務的條件下使用機器。要實施這個規定,必須新增一個群組(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
 

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

Graphic

這個指令序列會變更配分的配置,而讓 databases 群組擁有 20 個配分,batch 群組卻只有 1 個。這說明了如果 databases 群組是啟動的話,batch 群組(只有 Joe)的成員最多可以使用機器的 1/21databases 群組接收 20/21 或百分之 95.2 的資源,比先前決定充份處理資料庫工作的 60% + 20% = 80% 還要來得多。如果 databases 不需要其總配置,Joe 將接收到超過他原本的百分之 4.8 的配置。如果databases 完全沒有作用,Joe 的資源配置可能會高達百分之百。當配置給 databases 的可用配分數 從 1 增加到 20 的時候,就沒有必要變更配置給 db1db2 的配分。在 databases 群組之內,仍然有四個可用的配分,依照 3:1 的比率來配置。排程樹的各個層級彼此不相干;有關係的是配分在同層群組之間的比率。

儘管有上述這些保證,財務部還是要進一步確定 Joe 無法在白天最忙碌的黃金時段登入。要做到這一點,就必須對 batch 群組進行一些登入控制。要想讓控制因一天當中的時段而不同,可以執行一個指令集,變更每天開始和結束時允許登入 batch 群組的計數。例如,可以利用 crontab 登錄來實施﹕

0 6 * * * /usr/srm/bin/limadm set logins=0 batch 
0 18 * * */usr/srm/bin/limadm set logins=100 batch

上午 6:00 的時候,batch 的登入限制被降至 0,而晚上 6 的時候,限制則會被提升到最多 100 次登入。

您也可以新增另一行至 crontab 登錄中以實施更嚴格的策略﹕

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

使用 srmkill 指令在上午 6:01 時取消附加至 lnode Joe 的任何處理。如果工作所需的唯一資源是由 Solaris Resource Manager 所控制的話,這個指令就沒有必要。如果 Joe 的工作會佔用其他干擾正常工作的資源,那麼這個動作就很有用。一個可以鎖定關鍵性資料庫,或是主控一個 I/O 管道的工作就是一例。

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

這時財務部已經完全確保了他們的資料庫應用程式擁有其系統充分的存取權,而且不會互相干擾。他們不但設法讓 Joe 能夠隔夜進行批次處理的工作,也同時確保了他的工作不會干擾與他們的任務息息相關的處理。

放置一個全球資訊網前端處理

假設您決定要在 Database1 上放置一個全球資訊網前端處理,但限制此應用程式一次只能接受 10 位使用者。這時請使用處理限制功能。

首先,建立一個稱為 ws1 的新 lnode。藉由啟始 ws1lnode 之下的 Webserver 應用程式,您可以控制可用的處理計數,以及作用中 http 階段作業的計數。

圖 2-3 新增一個全球資訊網前端處理

Graphic

因為 Webserver 是 Database1 應用程式的一部分,最好為它配分 db1 lnode 並使它與 Database1 互相爭取資源。配置百分之 60 的計算資源給 Webserver 以及百分之 40 給 Database1 應用程式本身﹕

#  limadm set cpu.shares=6 ws1
#  limadm set sgroup=db1 ws1
#  limadm set cpu.myshares=4 db1
#  srmuser ws1 /etc/bin/Webserver1/init.webserver 

最後一行文字會啟動 Webserver 並將應用程式變更為 ws1 lnode。請注意,Database1 的cpu.myshares 配置為 4,因而將 db1 與其子處理 Webserver 相爭的配分比率設定為 4:6。


註解 -

cpu.shares 顯示一個階層的同層層級資源配置比率,而 cpu.myshares 則顯示雙親積極執行應用程式時親子層級的資源配置比率。Solaris Resource Manager 會依照在其個別層級的所有作用中 lnode 的可用配分比率來進行資源的配置;其中"個別層級"包括群組雙親以及其所有子的 my.shares


要控制 Webserver 可以執行的處理計數,對 ws1 lnode 採用一個處理限制。此例使用 20,因為一個 Webserver 查詢通常會產生 2 個處理,因此實際上將作用中 Webserver 查詢的數目限制為 10﹕

# limadm set process.limit=20 ws1

現在已有另一個應用程式新增至排程樹中,作為一個作用中 lnode 之下的葉片節點。要在作用中的雙親和其子之間分配 CPU 資源,請使用 cpu.myshares 來將某部份的可用資源配置給雙親以及某些給子。採用處理限制以限制 lnode 上作用中作用階段的計數。

新增更多有特別記憶體需求的使用者

在此以實例說明資源控制機制,包括 CPU 分享、處理限制及登入控制;並說明可以用來列印 lnode 並且顯示作用中 lnode 的顯示工具。

srmadm

管理 Solaris Resource Manager

limreport

輸出有關選定使用者的資訊

limdaemon

在到達任何限制時要求精靈遞送訊息

另一位使用者,Sally,也要求晚間使用機器來執行她的應用程式。因為她的應用程式需要大量的 CPU,為了確保不影響到 Joe 的應用程式,就必須限制 Sally 對虛擬記憶體的使用,包括她的總使用量以及"每次處理"的使用量。

%  limadm set memory.limit=50M sally
%  limadm set memory.plimit=25M sally

圖 2-4 新增更多使用者

Graphic

如果當 Sally 的應用程式嘗試要超出其總虛擬記憶體的限制或是處理記憶體的限制,limdaemon 指令就會透過主控台來通知 Sally 和系統管理員,告知他們已經超出限制範圍。

使用 limreport(1MSRM) 指令來生成一份報告,說明誰在使用系統及其到目前為止的使用情況。最典型的 limreport 使用方法是隨時查看使用機器的人以及他們屬於使用者階層的何處。

% limreport 'flag.real' - uid sgroup lname cpu.shares cpu.usage |sort +1n +0n


註解 -

limreport 有數個參數。在此例中,"flag.real"(僅查詢"真正的"lnodes/UID)上會出現一個勾號,然後以一個破折號 (-) 來指出最可能使用的內定輸出格式,而清單"uid sgroup lname cpu.shares cpu.usage"表示 limreport 應輸出這五個參數給每個"flag.real"設定為 TRUE 的 lnode。輸出會被導入第二欄的 UNIX 主要排序以及第一欄的次要排序,作出一份簡單的報告,說明使用伺服器的人是誰。


任何擁有正確路徑及權限的人都可以使用 srmadm show 指令來隨時檢查Solaris Resource Manager 的狀態。這會輸出 Solaris Resource Manager 及其主要的設置參數目前操作狀態的一份格式化報告。可以用來檢查 Solaris Resource Manager 以及所有的控制參數是否都在作用。它也顯示全域參數的值,例如消減率及內存 Solaris Resource Manager 資料的位置。

您可以在不啟用限制以及 CPU 排程的情況下執行 Solaris Resource Manager ;這對於啟始、除錯以及 Solaris Resource Manager 的初始設置而言都很重要﹕

# srmadm set share=n:limits=n, -

跨部門開始一部機器

一個不同的開發群組想要購買這部機器的升級(更多處理機及記憶體),好在系統閑置時可以存取它。這樣一來兩個群組都會得到好處。要這麼做,請在 databases 和 batch 相同的層級上建立一個稱為 development 的新群組。development 配置機器的百分之 33,因為原始系統上已經新增了百分之 50 的 CPU 功能及記憶體﹕

圖 2-5 要分享一部機器,步驟 1

Graphic

開發群組擁有上百位使用者。為避免涉及其資源的分配,請使用管理 Solaris Resource Manager 的旗標功能,好讓開發系統管理員能夠配置其資源。您可以依照雙方的同意來設定操作及開發層級的限制,然後各自設法控制機器屬於您自己的部份。

要為階層新增新的層級,請將群組 operations 新增為一個新的 lnode,並且將 batch 及 databases 的雙親群組變更為operations

% limadm set sgroup=operations batch databases

要設定管理旗標﹕

% limadm set flag.admin=set operations development

在一般狀況之下,所有的伺服器都必須執行精靈及備份處理,它們應被新增至另一個高層的 lnode。


註解 -

不要使用 root,因為 root 沒有任何限制。


圖 2-6 要分享一部機器,步驟 2

Graphic

如例中所述,您可以使用 Solaris Resource Manager 來整合相同的機器上數種不同類型的使用者及應用程式。您可以明智地使用 CPU 配分控制、虛擬記憶體限制、處理限制及登入控制等功能,確保這些不同的應用程式只接收它們所需的資源。這些限制可以防止應用程式或使用者對任何其他的使用者或使用者群組的應用程式產生不良的影響。Solaris Resource Manager 支援某些簡單的報告製作工具,以讓使用者及系統管理員瞭解在任何一刻和一段時間之內所發生的實際狀況。報告生成的功能可以用來顯示應用程式及群組的資源分割利用,以達到功能規劃及收費目的。

一個典型的應用程式伺服器

這個輸出會在前一節範例最後 db1 的liminfo 列表中顯示出來。鍵入﹕

# liminfo -c db1

產生﹕

圖 2-7 liminfo 列表

Graphic

請參閱 liminfo(1SRM) 以便取得更多有關下面所述領域的資訊。

liminfo(1SRM) 指令輸出的前兩行與 lnode UID 及其在 lnode 樹中的位置有關。

登入名稱

登入名稱及初始 GID 來自與附加 lnode 的 UID 對應的密碼映射。每一個 lnode 都與一個系統 UID 有關。建議您為每個 lnode 的 UID 建立一個系統帳號。此實例使用一個位置保留符號 UID 給db1 的 Database1

請注意 Solaris Resource Manager 之下的內定 PAM 設置會為任何登入時沒有 lnode 的使用者建立一個 lnode。根據內定,由 root 或是一位 uselimadm 旗標為 set 的使用者所建立的 lnode,此使用者的 lnode 不為其雙親;或者如果它並不存在,則 root lnode 便為其雙親。管理旗標為 set 的使用者所建立的 lnode,該使用者是 lnode 的雙親。一個 lnode 的雙親可以利用一般變更 lnode 屬性的指令 limadm 來加以變更

Uid

附加至目前處理的 lnode UID 。一般而言,它應該和處理的真正 UID(登入的使用者)相同,不過在某些情況下(稍後會加以說明)可能會有所不同。

R,Euid 和 R,Egid

目前處理的真正和有效的 UID 和 GID。它和標準系統 id(1M) 指令所提供的資訊相同。並不是只與 Solaris Resource Manager 有關,在此為了方便起見將它顯示出來。如果liminfo(1SRM) 在顯示有關一個非內定(亦即以登入名稱或 UID 為一個引數而提供)使用者的資訊的話,便不會顯示這些欄位。

Sgroup (uid) [sgroup]

lnode 樹階層中雙親 lnode 的名稱及 UID。Root lnode 的此處會是空白。許多 Solaris Resource Manager 的功能都取決於 lnode 在樹階層中的位置,因此使用者最好利用接續的方式,一直上溯雙親 lnode 回到樹形的 root。

在空行之後,liminfo(1SRM) 顯示的下兩行文字即為與 CPU 排程有關的欄位。

Shares [cpu.shares]

這是配置給這個使用者 CPU 權利的配分數。它會直接與有同樣雙親 lnode 的其他使用者,以及雙親 lnode 本身的"Myshares"值來做比較。管理員通常可能會將一個特定排程群組之內的所有使用者設定為相同的數值(賦予那些使用者相等的權利)。此數值通常會大於 1,所以管理員有機會可以在適當的時機減少特定的使用者配分。

Myshares [cpu.myshares]

如果這位使用者擁有作用中(有附加的處理)的子 lnode(若有其他 lnode 擁有這個使用者的一個 sgroup 值)的話,才要使用這個值。這樣一來,此值便可賦予附加至此 lnode 的處理相對的 CPU 配分(與附加至其子 lnode 的 lnode 相較)。

Share

目前的使用者有權使用的計算式系統 CPU 資源百分比。當其他的使用者登入及登出時(或 lnode 成為作用中或未作用的),此值會跟著變更,因為計算只有包括作用中的使用者。目前使用者最近的使用量不包括在計算當中。

E-Share

這個使用者的有效配分(如果使用者和所有其他作用中的使用者都同時要求其配分時,此使用者會在短期間取得的系統 CPU 資源的實際百分比)。也可以比作 Solaris Resource Manager 目前將CPU 資源設置給該 lnode 的意願。此值會隨著使用者使用(或不使用)CPU 資源的時間而變更。作用中但閑置的 lnode (附加的處理處於睡眠狀態)使用量會比較低,因而擁有較高的有效配分值。相對地,積極地使用 CPU 的附加處理的使用者,其有效配分就可能非常地小。

Usage [cpu.usage]

用來決定排程優先順序的系統資源累積的使用量。一般而言,這表示最近的 CPU 使用量,不過也會同時考慮其他的參數。所用的混合參數可以利用 srmadm(1MSRM) 指令來查看。此值會隨著時間呈倍數消減,因此 Solaris Resource Manager 最終會完全將資源使用量完全"忘記"。消減率最能以其半減期來加以說明,srmadm(1MSRM) 指令可以用來查看半減期。

Accrued usage [cpu.accrue]

這個衡量數值和"Usage"的資源累積相同,只不過它是不會消減的。Solaris Resource Manager 並不直接使用它,但是可以被用來作為會計管理的目的。不像 usage,這個值代表群組內部所有 lnode 以及目前 lnode 的累計使用量總數。

在第二個空行之後,liminfo(1SRM) 所顯示的下四行文字即為與虛擬記憶體有關的四個欄位﹕

Mem usage [memory.usage][memory.myusage]

為附加至此 lnode 所有處理的合併記憶體使用量。

如果出現兩個以一個斜線 (/) 字元分開的數值,那麼此 lnode 便是一個群組 header,第一個值是整體排程群組的使用量,而第二個值則是目前的使用者使用量。

Mem limit [memory.limit]

附加至此 lnode 及其成員(如果有的話)的所有處理可得的最大記憶體使用量。也就是說,群組內所有處理,加上附加至群組 header 的處理的記憶體使用總合不得超出此數值。請注意此例中,一個"0"的值代表沒有任何限制。

Proc mem limit [memory.plimit]

每個-處理記憶體限制為附加至此 lnode 及其成員的任何單一處理最大記憶體使用量。

Mem accrue [memory.accrue]

記憶體累計數值是以每秒位元組為單位,而且可以指出一段時間內的整體記憶體資源情況為何。

在第三個空行之後,liminfo(1SRM)所顯示的下四行文字即為與使用者及處理有關的欄位。

Processes [process.usage][process.myusage]

附加至此 lnode 的處理數。請注意這是處理,不考慮一個處理中的線串。

如果出現兩個以斜線 (/) 字元分開的數值,那麼這個 lnode 便是一個群組 header,第一個值是整個排程群組的使用狀況,而第二個值則單單只是目前使用者的使用狀況。

Process limit [process.limit]

允許被附加至此 lnode 及其成員的最大處理數。

目前的登入[logins]

目前使用者以 Solaris Resource Manager 同時登入階段作業的數目。當一位使用者透過任何標準的系統登入機制(包括 login(1) rlogin(1) 等等)來登入,幾乎任何使用 PAM 進行辨證,並且建立一個 utmp(4) 登錄),此計數器會開始遞增。當階段作業結束時,計數便會遞減。

如果一個使用者的 flag.onelogin 旗標求值到 set,使用者只被允許一次單一的 Solaris Resource Manager 登入階段作業。

Last used [lastused]

此欄位顯示上一次作用中的 lnode。這通常也就是使用者上一次的登出。

目錄

使用者的首頁目錄(為了方便起見,在此顯示密碼映射中的項目而非 Solaris Resource Manager 項目)。

名稱

db1 (finger) 資訊,通常就是使用者姓名(為了方便起見,在此顯示密碼映射中的項目而非 Solaris Resource Manager 項目)。

Shell

使用者的初始登入 shell(為了方便起見,在此顯示密碼映射中的項目而非 Solaris Resource Manager 項目)。

旗標

此處顯示求值到 lnode 中的 set 或 group 的旗標。每個旗標後都接著字尾字元,指明數值以及旗標的設定方式(例如,是否是完全來自此 lnode (+) 或是 inherited (^,承繼的))。