0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ストレージメモリへの参照が有する性質について

Last updated at Posted at 2021-02-07

MSR-Cambridge Traces

解析の対象ついて

まず、解析の対称となるMSR-Cambridge Tracesについて簡単にまとめます。
Microsoft Research Cambridgeが公開している、サーバ(おそらくWindows searverの)ディスクのアクセス履歴です。

ダウンロードはhttps://ci.nii.ac.jp/naid/20001651868/から可能です。

2つのgzipファイルを解凍すると、README.txtと36個の *.csv.gzが得られます。
ファイルは36個ですが、ワークロード(Traceを取得したserver)は13種類です。
各Traceファイルには、<hostname>_<disknumber>のような名前が付けられています。

例えば、hm_0.csvとhm_1.csvはhostname:hmから取得した、Disk0とDisk1です。
Disk0はsystemないしbootディスク(WindowsのCドライブ)に相当するとありますが、一部例外もあるとのこと。

csvファイルのフォーマットは、
Timestamp,Hostname,DiskNumber,Type,Offset,Size,ResponseTime
となっています。一例としてhm_0.csvを示すと

128166385295514663,hm,0,Write,9056014336,2048,2833
128166385295514878,hm,0,Write,11855351808,512,2617
128166385295515175,hm,0,Write,5548077056,4096,2320
128166385301451520,hm,0,Write,3163095040,40960,3438
128166385301453920,hm,0,Write,3154132992,4096,1037
...

となっています。

  1. Timestampは"Windows filetime"という100ns単位のtimestamp
  2. Hostname とDiskNumberはファイル名と同じ
  3. Typeは"Read"もしくは”Write"
  4. offset、lengthはbyte単位での読み書きの開始ポイントのoffsetと長さ。長さは最小で512byte単位(ブロック)
  5. Response time はI/Oが発行されてから完了までの時間

アドレスデータが並んでいても分からないので、可視化してみましょう。

下準備

まず、扱いやすくするためにいくつかの加工を行います。

  1. 不要な情報を消去する(workload名とかDisk No.などは、ファイル名を見れば良いだけなので不要です。またResponce timeも今回は使いません)
  2. Timestampを記録開始時間を0に合わせ、ns(ナノ秒) -> s(秒)に変換
  3. OffsetもRequest Lengthも最小で512Byte単位なので512で割る
  4. Offset, Request Lengthというは使いにくいので全部アドレスに変換する。このとき、データ削減のため、16kB単位のアドレスとする。(これをPage Addressと呼ぶことにする)
  5. Page Addressをリナンバリングする

複数のプログラムで上記の処理を実現しました。スッキリ書けたらどこかにアップするかも。

処理後のファイルの一例(hm_0)を示します。

0,Write,103883
2.15e-05,Write,124307
5.12e-05,Write,90871
5.12e-05,Write,90872
0.5936857,Write,83511

前から順にTimeStamp,Write/Read,PageAddresがずらずらと記載されています。
ブロックデバイスは、始点(Offset)とリクエスト長でアクセスするため、PageAddressが一個一個書いてある形式は冗長にはなっていますが、可視化するという目的では扱いやすくなっています。
(512Byte単位のBlockAddressのまま扱うと、ファイルサイズが大き過ぎてプロットするだけでも時間がかかるため16kB単位のPageAddressで扱います)

Traceの可視化

WriteとReadの区別はさておいて、一旦リクエストをプロットしてみましょう。
workload hmのDisk0とDisk1をプロットしてみます。

workload:hm (hm_0, hm_1)
hm_0.png hm_0.png

workload:mds(mds_0, mds_1)
mds_0mds_1

workload:prn(prn_0, prn_1)
prn_0prn_0

workload:proj(proj_0,proj_1,proj_2,proj_3,proj_4)
proj_0proj_2proj_1proj_3proj_4

workload:prxy(prxy_0, prxy_1)
prxy_0prxy_1

workload:rsrch(rsrch_0, rsrch_1)
rsrch_0rsrch_1rsrch_2

workload:src1(src1_0, src1_1, src1_2)
src1_0src1_1src1_2

workload:src2(src2_0, src2_1, src2_2)
src2_0src2_1src2_2

workload:std(stg_0, stg_1)
stg_0stg_1

workload:ts(ts_0)
ts_0

workload:usr(usr_0, usr_1)
usr_0usr_0

workload:wdev(wdev_0, wdev_1, wdev_2)
wdev_0 wdev_1 wdev_2 wdev_3

worload:web(web_0, web_1, web_2, web_3)
web_0 web_0 web_2

ごちゃごちゃして何がなんだか分からないかもしれませんが、Diskが違っても似たような形をしていたり、アクセスが集中する時期が同じようなタイミングだったりと、やはり同一のWorkloadに起因していそうだなー、くらいのことは見て取れます。(定量的には議論しません)

また、prxy_0やrsrch_0、wdev_0などのTraceでは、ある範囲のアドレスが斜線で網掛けされたような模様になっていますが、これはその範囲のアドレスにループ的な参照が生じていることを表しています。メモリへのアクセス(参照)には、時間的局所性、空間的局所性、逐次的局所性の3つの局所性(locality)が知られていますが、これは逐次的局所性の一例と言えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?