BLOGTIMES
2020/09/20

DTrace で smb へのアクセスをリアルタイムに見る

  omnios 
このエントリーをはてなブックマークに追加

ファイルサーバに使っている OmniOS の入ったマシン上で DTrace を使って smb へのアクセスをリアルタイムに見てみました。

OmniOS CE は元々は OpenSolaris なので DTrace が使えるので、こういうことはやろうと思えばすぐにできることは知っていたんですが、使われている言語がちょっと特殊なのでこれまで重い腰が上がらなかったんですよね。今回は [Dtrace SMB-related snippets] All things SMB #tags: smb, dtrace, io に掲載されている smb-read-write-lat-by-path.d を少し改造させてもらいました。

smb-read-write-lat-by-path-rt.d

dtrace -qn ' char m[string]; BEGIN { m["smb_fsop_read"] = 0x52; m["smb_fsop_write"] = 0x57; } ::smb_fsop_read:entry,::smb_fsop_write:entry { self->arg0 = args[0]; self->node = args[2]; self->t = timestamp; } ::smb_fsop_read:return,::smb_fsop_write:return /self->arg0/ { this->delta = timestamp - self->t; this->a_family = self->arg0->session->ipaddr.a_family; this->l_a_family = self->arg0->session->local_ipaddr.a_family; this->addr = &self->arg0->session->ipaddr.au_addr.au_ipv4; this->l_addr = &self->arg0->session->local_ipaddr.au_addr.au_ipv4; printf("%Y\tsrc: %s\tdst: %s\t(%c) %s\t%d\n", walltimestamp, inet_ntop(this->a_family, this->addr), inet_ntop(this->l_a_family, this->l_addr), m[probefunc], stringof(self->node->vp->v_path), this->delta/1000); self->arg0 = 0; self->t = 0; self->node = 0; } /* tick-1200sec { exit(0); } */ END { }'

実際にこれを走らせたときのログはこんな感じ。
これでファイルサーバの負荷やレイテンシをリアルタイムに見ることができるようになりました。

2020 Sep 20 13:02:38 src: 192.168.1.1 dst: 192.168.100.100 (W) /path/to/file1 32 2020 Sep 20 13:02:38 src: 192.168.1.2 dst: 192.168.100.100 (W) /path/to/file2 31 2020 Sep 20 13:02:38 src: 192.168.1.2 dst: 192.168.100.100 (W) /path/to/file3 18 2020 Sep 20 13:02:38 src: 192.168.1.2 dst: 192.168.100.100 (W) /path/to/file4 11 2020 Sep 20 13:02:38 src: 192.168.1.4 dst: 192.168.100.100 (W) /path/to/file5 17 2020 Sep 20 13:02:40 src: 192.168.1.1 dst: 192.168.100.100 (W) /path/to/file6 20 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (W) /path/to/file8 18 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (W) /path/to/file9 10 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file10 3 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file11 4 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file12 2 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file13 6 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file14 1 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file15 5 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file16 2 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file17 3 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file18 1 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file19 3 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file20 1 2020 Sep 20 13:02:40 src: 192.168.1.3 dst: 192.168.100.100 (R) /path/to/file21 5

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/11985
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン