Solaris Resource Manager 1.3 系統管理指南

第 9章 使用量資料

Solaris Resource Manager 提供管理員一種精確的機制以搜集累計的系統、應用程式及使用者資源使用量值。這些資訊,加上 Solaris Resource Manager 所提供的函數及公用程式,可以用來作為資源登帳系統開發的基礎。

累計屬性

一個 lnode 的累計屬性可用來保存有關資源使用量累計的資訊。例如,一個 lnode 的 cpu.accrue 屬性包含群組內所有 lnode 以及目前的 lnode 的累計 CPU 使用量。更新任何一個 lnode 的累計屬性時,變更也同時應用至 lnode 的雙親(和變更使用量屬性一樣),一直上溯到 root lnode 為止。因此排程樹每個層級的累計使用量就是 lnode 累計使用量及其子累計使用量的總和。

例如,一個有兩個工作量 A 和 B 的系統可能有一個 lnode 階層,其中 A 和 B lnode 向 root 節點報告,而個別使用者向節點 A 和 B 報告。每位使用者的 CPU 使用量可以透過每位使用者 lnode 的使用量欄位來觀察,但是工作量 A 的 CPU 使用量總和可以由 lnode 中工作量 A 的累計 CPU 使用量得知。

圖 9-1 基於工作量階層的會計

不像 usage,這個值代表群組內部所有 lnode 以及目前 lnode 的累計用量總數。

登帳問題

管理員必須決定要登記哪一個 lnode 資源使用量的帳。例如,管理人員如果只考慮整個部門的登帳,他們可能只要寄帳單給最高的群組的群組標頭,他們的累計用量會包括所有在他們部門低階 lnodes 的累計使用量。

如果管理員想要採用一種登帳系統,必須先為每種要登帳的資源決定一個收費函數。它可以是一種簡單的線形關係(其中單位成本相同,無論所用的數量為何);或是非線形關係,例如一個步進函數或是曲線,其中單位成本隨著使用數量不同而有所變更。

決定了每種資源的收費函數之後,管理員應牢記一點,那就是收費函數不只會控制累計的資源使用量指派成本,也會影響到一位使用者使用資源的方式。舉例來說,如果虛擬記憶體使用量的收費函數會在使用量增加的同時造成單位成本的增加,那麼使用者就會極力避免使用太多虛擬記憶體。因此管理員便可以利用一種適當的收費策略來控制使用者的行為。

每種資源只有一個累計屬性。它包含根據資源使用量屬性的資源累計使用量。這表示 myusage 屬性沒有對應的累計使用量。就群組標頭而言,沒有使用者個別的累計使用量,因為累計屬性保留的是群組的累計使用量。就沒有子 lnode 的枝葉 lnode 而言沒有什麼差別,因為 myusage 屬性以及使用量屬性是相同的。如果需要一個群組標頭個別的累計使用量帳目,必須從群組總計減掉群組中每個子的個別總計的總和來計算。

liminfo 指令

liminfo 指令的預設輸出是專為那些希望找出其目前的使用量、限制、權限等的使用者所設計的。管理員也能利用 liminfo 來詢問其他使用者的屬性。您可以要求數種不同的報告格式,包括能使 liminfo 的輸出適於被一系列的過濾器處理的選項。請參閱 liminfo(1SRM) 以取得有關指令行選項及其意義的詳細資訊,以及所顯示的欄位說明。

limreport 指令

limreport 指令可以讓一位管理員查詢任何使用者的任何屬性,包括累計屬性。此指令提供一種靈活的方式來顯示所選定的 lnode 中的資訊。

例如,下列指令:

% limreport 'cpu.accrue!=0' '%u %s %f\n' uid lname cpu.accrue 

選取在 usr 領域中有累計使用量的所有 lnode,並且列出 UID 以及每個選定的 lnode 中累計的使用量屬性。要以 cpu.accrue 來排序這些數值並只列出前十位使用者,只要將結果重導至一個 sort(排序)指令即可:

% limreport 'cpu.accrue!=0' '%u %s %f\n' uid lname cpu.accrue | sort -2n | head

請參閱 limreport(1SRM) 中的額外資訊。

limadm 指令

limadm 指令可以用於一個登帳系統以將登帳過的累計屬性歸零。例如,下列指令:

# limreport 1 '%u\tcpu.accrue=0,mem.accrue=0\n' uid | limadm set -u -f -

limreport 指令可生成由 limadm 接管的指令清單。選取每一個 lnode,而且每個 lnode 的累計屬性皆歸零。

管理員應當負責決定清除一個 lnode 累計屬性的時機。時機取決於登帳策略。例如,如果要先計算出群組層級的帳目,然後再製作群組成員的個別帳目,應該等到兩個帳目都完成之後再清除群組成員的累計屬性。不過如果不打算計算個別的帳目,群組成員的累計屬性就必須和群組標頭的屬性一起清除,不論是否曾分別使用這些屬性。

請參閱 limadm(1MSRM) 中的額外資訊。