• 次に,属性情報に基づき補正対象プログラに属するスチールのデータを抽出し,抽出 したスチールのデータ数とデータ収集周期を乗算することで,補正対象プログラムの スチール時間の合計時間Tを算出する.
• 最後に,VM上で測定したあるプログラム(補正対象プログラム)の実行時間(見か け上の実行時間)から,補正対象プログラムに属するスチールの合計時間Tを差し引 くことにより,実際にCPUを使用した正確な実行時間を得る.
3.4.2 スチールの属性情報の生成方法
VMの疑似収集データの生成
VMには,pCPUが割り当てられなかったために動作できなかった時間(空白時間)があ る.空白時間帯のVMのデータ収集は,行われない.このため,空白時間は,VMに対応す る有効な収集データが無い時間である.従って,頻度集計前に各VMの空白時間を割り出し,
収集データを補間する必要がある.各VMの空白時間帯を割り出すために,VM環境全体で 共通の一つの時間軸を使用する.この共通の時間軸として,VMMの時間(物理TSC)を使 う.これにより,VMMで行う一元的な性能プロファイリングシステムは,各VMの空白時 間も含めた性能プロファイリングシステムである.
VMの空白時間の割り出しは,vCPU毎に行う.図3.2 に,VMの空白時間を割り出し,空 白時間で収集データを補間する疑似収集データの生成方法を示す.図3.2 は,データ収集対 象環境として,二つのpCPU(pCPU0とpCPU1)があり,二つのVM(VM0とVM1)が 実行されている環境を想定した図である.VM0には一つのvCPU(vCPU0)があり,VM1 には二つのvCPU(vCPU0とvCPU1)があるとする.vCPUはpCPUに固定割り当てされ ていないとする.時間軸は,VMMの時間による経過時間とする.この図3.2 では,t1から t4までの時間に収集された収集データを示す.VMの疑似収集データは,VMMの時間を基 準時間として,VMMで収集したデータからvCPU単位に生成する.図3.2 の上図(a)は,
VMMで収集された収集データを示す.この収集データから,VMの疑似収集データを生成 する.図 3.2 の下図(b)は,生成後の各VMの疑似収集データを示す.生成は,以下のよ うに行う.
(1) 先ず,VMMで収集したデータをvCPU単位でグルーピングする.
(2) 次に,グルーピングしたデータをvCPU毎にVMM時間軸上に並べる.
(3) 空白部分を空白時間とする.
これにより,各vCPUの空白時間を割り出すことができる.
図 3.2 VMの疑似収集データの生成
さらに,空白時間は,ゲストOSがホルト命令を発行することにより発生する自発的な空 白時間と,スチールによる空白時間の二つの状態に分類できる.この分類には,VM-Exit reason numberを使用する.VM-Exit reason numberが12の場合は,空白時間をホルトに 分類する.12以外の場合は,スチールに分類する.vCPUがスチール状態にある場合,VM は,実行できる状態にあるが,使用可能なpCPUが無いため,pCPUに割り当てられていな い状態である.図3.2 の下図(b)より,VM1のvCPU1では,スチールが発生していること が分かる.具体的には,プロセスID(PID)が100,スレッドID(TID)が10の実行スレッ ドで関数Aの実行中のt2からt3の時間にスチールが発生している.このため,この関数A は,t2からt3の間は動作していない.しかし,既存の時間計測では,見かけ上この時間も
関数Aの実行時間に含まれる.
収集データへのスチール属性情報の付与
図 3.3 に,VMMで行う一元的な性能プロファイリングシステムの収集データの内容と保 持形式の例を示す.一行が一収集データで,収集順に時系列で並んでいる.PIDはプロセス ID,TIDはスレッドIDである.また,既にシンボル解決は終わっている状態で,図中のA や[Steal]のある列が関数または関数相当のシンボルの列となる.図 3.3 の上図(a)は, ス チールに対して,属性情報(どのプログラムの実行中に発生したスチールなのか,スチール が属するプログラムや関数に関する情報)がまだ無い状態の収集データである.また,この 例では,図3.2 のVM1のvCPU1と同じ状態を模している.対して,Figure 3.3の下図(b) は,スチールの属性情報として,PIDとTIDと関数名を付与した収集データとなる.スチー ルの直前と直後のデータが,同じPIDとTIDと関数名だった場合に,そのPIDとTIDと関 数名を属性情報としてスチールデータに付与する.
図 3.3 疑似収集データ中のスチールデータへの属性情報の付与