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

第 3章 設置

Solaris Resource Manager 在中央管理員(如 root 使用者)的設置方面提供很大的彈性。本章將介紹下列各種設置﹕

Kernel 開機參數

Kernel 有某些 Solaris Resource Manager 參數,可由中央管理員在 kernel 開機時加以設定。Solaris 會在開機時讀取 /etc/system 檔,並且使用它來設置 kernel 模組(請參閱 系統(4) 中的詳細說明)。可以在 SHR 模組(全部都是 32- 位元整數)中設定以取代 Solaris Resource Manager 內定行為的參數如下﹕

SRMLnodes

要在 kernel 中快取的 lnode 數。在 Solaris 系統中,每個 kernel lnode 需要大約 3Kb。一個零的值(內定)表示 kernel 會自行決定其數值。所用試探法如下﹕

(nproc / SRMProcsPerUid ) + SRMLnodesExtra 

其中 nproc 是能在系統中同時進行的最大處理數。最小值 6 可以取代這個計算。而由 SRMMemoryMax 所指定的最大值也可以取代這個計算。

SRMProcsPerUid

每位使用者所使用的預定平均處理數。內定為 4。

SRMLnodesExtra

試探法中所用的偏差值以決定記憶體內 lnode 陣列的大小。內定為 20。

SRMNhash

用來將 UID 數值對映至 kernel 中 lnode 的散列表登錄數目。在 Solaris 之上,每個登錄都是 4 個位元組長。內定為零,表示要使用與 lnode 數相同的數值。

SRMMemoryMax

此數值的倒數是一個分數,可以指定 Solaris Resource Manager lnode 以及散列表一起使用的最大真正記憶體百分比。內定為 20,表示最多百分之 5 的真正記憶體會用於 Solaris Resource Manager 的資料結構。

SRMMemWarnFreq

警告單一 lnode"記憶體超過"通知的最小時間間隔,以秒為單位。內定值為 4。

舉例來說,在 /etc/system 檔案中,此行

set srmlim:SRMMemWarnFreq=10 

會確保不超過每 10 秒鐘將超出記憶體的訊息遞送給任何一位使用者。

也有某些不在 Solaris Resource Manager 中的參數,會影響 Solaris Resource Manager 的行為。其中包括﹕

initclass

init(1M) 處理所啟動的排程類別名稱。在 Solaris Resource Manager 之下,應提供字串"SHR"(包括雙引號字元)。內定 Solaris 值為"TS"。要使用 Solaris Resource Manager 來控制 CPU 資源,下一行字應包括在 /etc/system 檔中﹕

set initclass="SHR"

以取代內定值。

extraclass

這是一個可載入的排程類別模組名稱,不一定要用它來作為內定的排程類別。要僅以非 CPU 資源控制來使用 Solaris 資源管理,下一行字應包括在 /etc/system 檔中﹕

set extraclass="SHR"

要不載入 Solaris Resource Manager 而讓系統開機,請改用一個名為 /etc/system.noshrload 的代用 /etc/system。請參閱"不以 Solaris Resource Manager 開機"中有關此處理的指示說明。

多重使用者啟動設置

在一般的系統開機時,當系統由單一使用者模式變更為多重使用者,會執行一個 Solaris Resource Manager 初始指令集以設定各種 Solaris Resource Manager 參數。第 4章, 開機程序 中有此種指令集功能的詳細說明。

如果初始指令集本身 (/etc/init.d/init.srm)被修改,應將原始和修改過的版本分別存放。應用 Solaris Resource Manager 更新不能確保可以保存現有的初始指令集。

透過 srmadm 的全域 Solaris Resource Manager 參數

srmadm(1MSRM) 指令可讓一位管理員設定、修正或顯示全域 Solaris Resource Manager 參數。請參閱線上援助頁有關所有參數的詳細說明。

用來設定各種參數的srmadm(1MSRM) 指令呼叫次數沒有限制,也沒有必要將它們全部包括在單一引動中。這也表示srmadm(1MSRM) 可被用來瞬間變更一個執行中 Solaris Resource Manager 系統的操作參數,只不過在進行變更時要特別小心。

管理員要特別注意的是可以啟動或關閉 Solaris Resource Manager 主要功能的 srmadm(1MSRM) 選項。這些選項是﹕

fileopen[={y|n}]

內定的資料庫為 /var/srm/srmDB,而它可以利用 -f 選項加以取代。請注意在操作中關閉 Solaris Resource Manager 資料庫檔應被視為一種緊急動作。它可能會產生幾種不良的後果﹕所有處理會繼續在可能享有比較多特權的代理 root lnode 之上執行;CPU 排程器被關閉;Solaris Resource Manager 停止實施限制。啟動時,Solaris Resource Manager 目前沒有開啟任何限制資料庫,而且其快取記憶體只包含附加了全部處理的代理 root lnode。

share[={y|n}]

啟動此選項時,會使用 Solaris Resource Manager CPU 排程器,而且根據 Solaris Resource Manager 的動態使用及)演算法來排程 CPU 的資源。除非啟動 fileopen 模式,否則無法設定此模式。關閉時,Solaris Resource Manager CPU排程器的使用計算會被凍結,而處理)固定的相等優先順序輪流排程。

limits[={y|n}]

啟動此選項時,Solaris Resource Manager 會強制採行虛擬記憶體及處理的限制。除非啟動 fileopen 模式,否則無法設定此模式。關閉時,Solaris Resource Manager 會一直更新使用屬性,但不會強制實施限制。

adjgroups[={y|n}]

啟動此選項時,會採用 Solaris Resource Manager CPU 排程器的全域群組有效配分調整。建議您在大多數時間選擇啟動的狀態。在每個執行間隔,所有限制登錄的一般化使用都會重新計算。如果啟動了 adjgroups 排程模式,那麼執行一般化使用的額外處理方式如下。排程器將排程樹掃描一遍,比較每個群組最近接收的有效配分是否符合其權利。接收到比其群組權利還要少的群組在下一個執行間隔會優先接收較大的有效配分。這樣便可確保群組儘可能接收到其 CPU 服務的權利,無論其成員的行動為何。

limshare[={y|n}]

啟動此選項時,Solaris Resource Manager CPU 排程器應用其優先順序上限功能來限制所有使用者的有效配分,以防止使用量超低的使用者暫時取得幾乎百分之百的 CPU。因此建議您使用啟動的狀態。

一位使用者的 CPU 服務比例大約與使用者的使用量成比例。如果使用者經過很長一段時間沒有活動,那麼他們的使用會消減為接近零。那麼當這類使用者登入時(或是 lnode 以任何方式開始作用),在下一次執行間隔的期間,使用者的處理優先順序可能會提高到幾乎獨佔 CPU。

啟動 limshare 排程旗標會促使排程器評估 lnode 在下一個執行間隔之前接收的有效配分。如果結果超過使用者被指派的權利數倍(請參閱 maxushare),那麼使用者的一般化使用會被重新調整以防止這個問題。

srmadm(1MSRM) 有兩種選擇性的參數,對管理員而言也很有用。它們是﹕

下列為典型的 srmadm(1MSRM) 指令實例。

要開啟 Solaris Resource Manager,請啟動 CPU 排程器以及資源限制﹕

# srmadm set -f /var/srm/srmDB fileopen=y:share=y:limits=y 

要將 CPU 使用量消減率設定為 5 分鐘的半減期﹕

# srmadm set usagedecay=300s 

要顯示目前的旗標設定值及應付款項﹕

% srmadm 

要顯示所有內定的設定值﹕

% srmadm show -dv 

關閉 Solaris Resource Manager

srmadm(1MSRM) 指令可以清除 fileopen 旗標來關閉 Solaris Resource Manager;所有處理會被移至代理 root lnode 之上,快取記憶體中其他變更的 lnode 會被清洗至磁碟中,而 lnode 檔會關閉。這會自動迫使配分及限制旗標關閉,分別使 Solaris Resource Manager CPU 排程器以及限制的實施失效。如果在保持 lnode 檔開啟時做出要求,配分及限制旗標可以個別關閉。這種關閉檔案的方法比較理想,因為可以確保處理附加在其正確的 lnode 上。

請注意如果在操作中只關閉 Solaris Resource Manager 排程器,只能暫停使用量及消減演算法。排程器仍舊繼續在 SHR 排程類別中進行各項處理,但是因為每個處理已被賦予更新過的優先順序,因此使用相同的數值會造成簡單的"輪流"排程。

開啟檔案以重新啟用 Solaris Resource Manager,並且在檔案關閉之後設定配分及/或限制旗標,無法使現有的處理由 root lnode 上移開。因此不建議您在一般操作當中關閉 Solaris Resource Manager 資料庫。如果您已這麼做,系統應該重新開機以確保處理被附加至正確的 lnode 之上。

使用 limdaemon 選項

limdaemon(1MSRM) 有數種選項可以在啟始之後加以設置﹕

管理員應決定在快速更新連結時間使用屬性所需的額外資源佔用,以及更新的頻率較少而產生較差的精確度之間,找出一個平衡點。請參閱 limdaemon(1MSRM) 線上援助頁中更多有關這些選項的資訊。

舉例來說,指令﹕

% limdaemon -g300 

啟始精靈並且設定寬限時間為 5 分鐘。請注意,不一定要以一個 shell '&' 字元來接在指令之後。當 limdaemon 啟始之後,它會自行轉變為一個精靈。亦即分出一個子處理,並自行由控制終端機脫離,將自己置入一個獨立的處理群組。

PAM 子系統

Solaris 2.6 系統支援可外掛辨證模組 (PAM)。每當一位使用者要求與變更或設定使用者的識別身份有關的操作時(例如登入系統,引動一個如 rcprsh 的 'r' 指令,使用 ftp或使用 su 等),就會使用一組可設置模組來提供辨證、帳號管理、信用管理以及階段作業管理等功能。Solaris Resource Manager 提供一個模組以進行登入會計的功能,並且修正 su 的行為。

用來要求操作的程式被稱為服務。

基本上整個 PAM 系統的說明文件都記載於線上支援頁 pam.conf(4)pam(3)pam_unix(5)以及 pam_srm(5SRM) 當中

Solaris Resource Manager PAM 模組提供帳號管理及階段作業管理功能。您可以編輯 /etc/pam.conf 檔以控制 PAM 的行為。就一般性的 Solaris Resource Manager 行為,Solaris Resource Manager PAM 模組應被設置為階段作業管理所有登入式服務的 requisite,並且作為所有 PAM 服務帳號管理的 requisite。通常 Solaris Resource Manager 模組應置於其他 required 和 requisite 模組之後,以及任何其他的 sufficient 或 optional 的模組之前。

安裝時,Solaris Resource Manager 會編輯 /etc/pam.conf 以提供一個適當的行為。它會為每個已設置階段作業或帳號管理的服務插入如下數行文字(包括 other)﹕

login account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode 
login session requisite pam_srm.so.1
other account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode

第一行表示服務登入應該使用模組 pam_share.so.1 以提供帳號管理的功能,必須允許登入才能使登入成功完成,並且要提供它nolnode=/etc/srm/nolnode 引數。請參閱 pam.conf(4) 以取得有關各種控制旗標的詳細說明(required、requisite、optional 以及 sufficient 等)。

第二行意指登入服務會使用 pam_share.so.1 模組來進行階段作業管理。

Solaris Resource Manager 帳號及階段作業管理模組所有支援的引數清單可於 pam_srm(5SRM) 中找到。

帳號管理

當 Solaris Resource Manager 帳號管理 PAM 模組取得控制權時,可以﹕

  1. 決定 Solaris Resource Manager 是否已經安裝與啟動,否則會要求 PAM 系統忽略此模組,

  2. 決定使用者是否擁有一個 lnode,否則會呼叫一個可由管理員設置的 'no lnode' 指令集,

  3. 決定是否使用者有權使用所要求的服務及裝置,

  4. 決定是否使用者已經超出警告的限制,否則拒絕其登入要求,

  5. 呼叫一個可由管理員設置的 'every login' 指令集。

如果上述任何一個步驟行不通,其餘的步驟也不會執行,Solaris Resource Manager 帳號管理 PAM 模組會回絕使用服務的要求。解釋訊息可能會透過服務來傳給使用者。

指令集

內定的 'missing lnode' 指令集會為使用者建立一個 lnode,並且遞送郵件以通知系統管理員。內定的指令集為 /etc/srm/nolnode,但您也可以編輯 /etc/pam.conf 並且變更 Solaris Resource Manager 帳號管理模組文字行中的 nolnode 選項值以改變內定。'every login' 指令集通常沒有設置。可以在 /etc/pam.conf 的任何 Solaris Resource Manager 帳號管理模組中新增一個 everylogin=pathname 選項以設置 'every login' 指令集。指令集會以 root 使用者的身份來調用。標準輸入、輸出及錯誤會被關閉。如果一個指令集不為零,存取會被拒絕。以環境變數來傳遞所有資訊,直接從下列服務傳給 PAM 的資訊衍生而出﹕

USER

提供給程式的登入名稱。藉由在密碼對映中查詢此名稱以辨證;如果找不到,帳號管理模組便會回報一個錯誤內碼給 PAM。

UID

被辨證的使用者 UID。就變更 UID 的服務(如 su)而言,即為引動此服務的使用者 UID;就設定 UID 的服務(如 login)而言,即為目標 UID(如 USER 的)。

RHOST

就整個網路的存取嘗試而言,即為包含發出嘗試的主機名稱。否則其值會因程式的執行方式各異而有所不同。

SERVICE

存取服務的名稱,例如 rshloginftp 等等。

TTY

在其上調用服務的 TTY 名稱。某些沒有控制終端機的服務(如 ftp),則會以稍有意義的內容來填寫此變數(例如 ftp12345,其中 12345ftpd 的處理識別器 (PID));否則讓它保持空白或是以服務名稱取而代之。

DEBUG

如果 pam.conf 檔中指定了除錯,DEBUG 即設定為真;否則設定為假。不設定其他環境變數,所以任何指令集都必須在必要時設定其本身的 PATH 變數。

內定的 'no lnode' 指令集在內定的排程群組中建立 lnode(如果密碼對映中有此類使用者,為 other;否則為 root。)並且遞送給系統管理員一個提醒郵件以將新的 lnode 移至排程階層中的適當位置。若需一個指令集範例,請參閱"預設的 'no lnode' 指令集"

PAM 與裝置群組互動

Solaris Resource Manager PAM 模組會查詢裝置階層的終端機及服務名稱,然後若超出限制或是裝置旗標求值到 'set' 的話,便回傳一個 'permission denied' 給其調用程式

所檢視的裝置類目為 終端機名稱 terminal,以及 所要求的服務類型 services。例如,一個 rlogin 嘗試可能試圖使用網路裝置群組中的一個檔案,因此為使用者測試的旗標(假設所有的旗標都設定為 group)如下所示。依照順序檢查這些旗標﹕

只有在所有存取都求值到 'set'(開啟)的時候才會被准許。此外,會依照對應的類目來檢查限制(terminalservices)。

階段作業管理

就登入式服務(在 utmp 檔中建立一個登錄)而言,PAM 的階段作業管理功能以及帳號管理功能都會被調用,如果兩者都在 /etc/pam.conf 中設置的話。

Solaris Resource Manager 產品的階段作業管理負責處理裝置的收費。它會查看使用者是否已經超出連結時間限制,或是有 onelogin 旗標求值到 set 而且已經登入;如果是的話,便防止登入。

否則,它會生成一個訊息至 limdaemon 處理以通知它有關登入以及所登入終端機的設置成本。然後會通知 kernel 目前的處理是一個 'login header process ',而必須通知 limdaemon 處理它何時逾時。

然後limdaemon 處理會追蹤連結時間限制,並且在它們快要逾期時發出警告。