|
最後にDispatchしたRequest(last)との 位置関係 |
評価値 |
|---|---|
| lastより後にある場合 | last<-->1st Sectorの距離 |
| lastより前にある場合(MAXBACK以内) | (1st Sector<-->lastの距離) * BACK_PENALTY(2) |
|
lastより前にある場合(MAXBACK以上) |
∞(*2) |
|<---------->|<-->|
Sectors ....oooo....oooooo....oooooo...
prev last next
.:Sector
o:Request

|
フィールド |
説明 |
|---|---|
|
fifo_list[] |
SubmitされたRequestが入れられるFIFO。struct as_rqがチェーンされる。 同期I/Oと非同期I/Oで区別される。(fifo_list[REQ_SYNC],fifo_list[REQ_ASYNC]) RequestをFIFOに入れると、RBTree,Hashにも挿入されて管理される。 |
|
next_arq[] |
次にDispatchするRequest。 以下のタイミングで更新される。 ElevatorにRequestが入れられた時 - as_update_arq() Dispatchした時 - as_move_to_dispatch() |
|
sort_list[] |
RequestのRedBlackTree。Requestの開始セクタ番号をキーにしており、FrontMerge処理の検索に使用される。RBTreeも同期、非同期でそれぞれ存在する。 |
|
hash |
Requestのハッシュテーブル。 Requestの終端セクタの次セクタ(sector + nr_sectors)をキーにする。 BackMergeの検索に使用される。 |
|
current_batch_expires |
現在動作中のBatchの終了時刻 |
|
changed_batch |
Batchの向き(SYNC,ASYNC)が変るときにセットされる。Batchが切り替わる際にDispatch済みのRequestが完了するのを待つために使用される。 このフラグが立っている最中はDispatchは抑止され、Dispatch済みのRequestの処理が全て完了するとクリアされて次のBatchを始められる。 |
|
new_batch |
ReadBatchが始まって最初のRequestが完了するのを待つために使われる。 ReadBatchが始まるときにセットされ、Requestが完了するとクリアされる。 |
|
batch_data_dir |
現在のBatchの向きを示す。 |
| write_batch_count |
1回のWriteBatchでDispatchできるRequest数の上限。 ReadBatchの最初のRequestが完了するとupdate_write_batch()で値が調整される。 |
|
current_write_count |
現在のWriteBatchでDispatchできる残りのRequest数 |
|
antic_timer |
Anticipating 終了タイマ。as_antic_waitnext()でAnticipatingを開始する時に設定される。 タイムアウトするとas_antic_timeout()が呼ばれる。 |
|
io_context |
最後にDispatchしたRequestを発行したプロセスのI/O Contextを指す。AnticipationでRequestを待つ時にプロセスを識別するのに使う。非同期I/O(Write)だとNULL。 |
|
ioc_finished |
ad->io_contextが指しているプロセスのI/Oが完了すると1になる。RequestをDispatchする時にクリアされる。 |
|
fifo_expire[] |
FIFOのExpire時間。 Requestがスケジューラに入れられた時に、この時間がタイマ(arq->expires)に設定される。 |
|
batch_expire[] |
BatchのExpire時間。 |
|
antic_expire |
Anticipationを行う時間(ms)。 0だとAnticipationは抑止される。 |
|
状態 |
意味 |
|---|---|
| ANTIC_OFF |
通常状態。Anticipationはやっていない。 |
|
ANTIC_WAIT_REQ |
Anticipating中。Dispatchは抑止される。 最後に発行したReadRequestがまだ完了していない。完了するとANTIC_WAIT_NEXTに遷移する。まだ、Requestが完了するまでタイマはかけない。(候補のプロセスが起床してから) |
|
ANTIC_WAIT_NEXT |
Anticipating中。Dispatchは抑止される。 最後のReadから次のReadを期待している状態? タイマ(antic_timer)動作中 /* Currently anticipating a request vs last read (which has completed) */ |
|
ANTIC_FINISHED |
Anticipatingが終了した。(タイムアウトしたか、適当なRequestが来た) |

|
状態 |
説明 |
|---|---|
| AS_RQ_NEW | ElevatorにもRequestQueueにも登録されていない。 |
|
AS_RQ_QUEUED |
Elevatorに入れられている(Schedulerの管轄)。 |
|
AS_RQ_DISPATCHED |
Dispatchされている(RequestQueueの中にある)(デバイスドライバの管轄)。 |
|
AS_RQ_PRESCHED |
|
|
AS_RQ_REMOVED |
|
|
AS_RQ_MERGED |
|
|
AS_RQ_POSTSCHED |
|

|
フィールド |
意味 |
|---|---|
|
ttime_total |
Think Time総時間。 更新の度に旧値を7/8にして新規Think Timeの1/8を加えて1/8ずつエージングしている。 |
|
ttime_samples |
平均を計算するための分母。 |
|
ttime_mean |
平均Think Time。 |
|
seek_total |
Seek Distance合計値。 ttime_totalと同様1/8ずつエージングしている。 |
|
seek_samples |
平均を計算するための分母。 |
|
seek_mean |
平均Seek Distance |