‘MPIO’ タグのついている投稿

istgt (iSCSI target) 20090412版 for FreeBSD 7.x with ZFS

2009年4月12日 日曜日

更新>istgt 2009/4/14版

FreeNASでの利用とバグ報告を元にいくつか修正しました。

新しい設定:
syslogのファシリティをコンパイル時固定のLOCAL7から設定ファイルで変更できるようになりました。
指定できるファシリティは daemon, auth, authpriv, local1~local7 です。

[Global]
  # syslog facility
  LogFacility "local7"

istgt (tarball): istgt-20090412.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090412.tar.gz
# cd istgt-20090412
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090412.tar.gz) = 8cbfb89920f64418c94ad7b1a5ea5840
SHA256 (istgt-20090412.tar.gz) = 25119e8b87500a6c76858383bdce02348e63bbe31ac16fab09cbff96d56cd79d

既知の問題:
FreeBSD(iscsi2.1.1)から接続するとumount時に正しく処理されない事があります。(現在調査中)

主な修正点:
デフォルトのiqnをiqn.2007-09.jp.ne.peach.istgtに変更しました。
データ設定取得マクロを関数呼び出しからマクロ展開に変更しました。
ショートサイズの判定に誤ったマクロを利用していたのを修正しました。
Discoveryセッションは最大接続数を1に制限するようになりました。
NOPIN間隔が0の場合は送信しないようになりました。
syslogファシリティを設定ファイルで指定できるようになりました。

FreeNAS 0.7 を使って iSCSI Target を構成する

2009年4月11日 土曜日

テスト用のFreeNASのダウンロードはこちらから。
http://sourceforge.net/project/showfiles.php?group_id=151951&package_id=229704

※テスト用の空いてるUSBメモリがもうないので余っていたmicroSDカードに
FreeNAS 0.7.4531 (i386)をインストールしました。

1.FreeNASの初期設定

起動したらコンソールからネットワークカードとIPを設定します。
設定できたらブラウザで設定したIPを開きます。

System>Generalを開きます。
LanguageをJapaneseに変更します。
Time zoneをAsia/Tokyoに変更します。
「Save」をクリックします。
パスワードタブで新しいパスワードを設定してWebGUIを開き直します。

追加のアダプタがある場合はネットワークから設定します。
このテストマシンにはオンボード1個、PCIe拡張スロットに
シングルポートのアダプタを2個装備してありますので、
LAN,OPT1,OPT2の合計三個にIPを設定しました。
(再起動を要求されるので一旦再起動)

2.ディスクの用意

ディスク>マネージメントを開きます。
FreeNASで利用するドライブを追加します。
テストマシンは500GBのSATAドライブが1台なのでそれを指定しました。

ディスク>フォーマットを開きます。
UFS (GPT with Soft Updates)などでフォーマットを実行します。

ディスク>マウントポイントを開きます。
dataなどにマウントします。

3.iSCSIターゲットの設定

サービス>iSCSIターゲットを開きます。
iSCSIターゲットを構成する前に、利用する領域をエクステントに、
サービスの待ち受けに利用するIPアドレスやポート番号をPortal Groupに、
アクセスを許可するイニシエータ名やIPアドレスをInitiator Groupに、
それぞれ設定します。
CHAPによる認証機能を使う場合はAuth Groupに設定します。
グループ設定は一個のみ設定して共通で使っても、
複数設定して使い分けてもどちらでも構いません。

最低1個のPortal GroupとInitiator Groupを予め設定しないと
iSCSIターゲットを構成できません。

3.1.ポータルグループの作成
サービス>iSCSIターゲット>Portalsを開きます。
追加のボタンをクリックすると、最初のグループ(Tag1)として、FreeNASに
設定したIPとiSCSI標準ポートの3260を使ったデフォルト設定が作成されます。
複数で分ける必要がない場合は修正せずに、そのまま追加をクリックします。

3.2.イニシエータグループの作成
サービス>iSCSIターゲット>Initiatorsを開きます。
追加のボタンをクリックすると、最初のグループ(Tag1)として、FreeNASに
設定したIPとネットマスクからデフォルト設定が作成されます。

接続を許可するIPをさらに厳しく制限したり、
イニシエータ名を制限する場合はここで変更しておきます。
(または後ほど新規グループを作成して適用する事も可能です)
※クラスタ対応のファイルシステムを使わない限り、
1ターゲット=1イニシエータの関係は必須事項です。

必要な変更が終わったら、追加をクリックします。

3.3.認証グループの作成(オプション)
サービス>iSCSIターゲット>Authsを開きます。
追加のボタンをクリックすると、ユーザ名とシークレットを入力する画面
になります。初期入力では一度に4ユーザまでしか追加できません。
5個以上必要な場合は一度4個追加した後に編集でさらに追加します。

一般的にユーザ名はイニシエータの名前がデフォルトになっています。
詳しくは利用するイニシエータの説明書を参照してください。
マイクロソフトのイニシエータを使う場合はシークレットに
12文字以上16文字以下の文字列を設定します。

相互認証を使う場合は、接続先のユーザ名とシークレットを入力します。

3.4.エクステントの作成
サービス>iSCSIターゲット>Targetsを開きます。

エクステント名は設定を変更したりするときに利用するだけなので、
デフォルト値のまま利用します。

タイプは現時点のWebGUIではファイルのみサポートしています。

追記:r4928から生デバイスを、r4960からZFSボリュームを選択できるようになりました。

パスはマウント済みの領域のいずれかを選択し、ファイル名を書きます。
ここではテスト用に/mnt/data/test-disk0としました。

ファイルサイズはMiB/GiB/TiBのいずれかの単位を選択して指定します。
(MiB=2^20, GiB=2^30, TiB=2^40)
ここではテスト用に20GiBで作成しました。

3.5.ターゲットの作成
サービス>iSCSIターゲット>Targetsを開きます。
上記項目で作成してき待ち受けIPアドレスやポート番号、
許可するイニシエータ名やIPアドレス、認証データ、
ディスク領域をイニシエータから見える形にするのがこの項目です。

ターゲット名はiqn.を含まない省略形でデフォルトとして入力されています。
もし必要ならばiqn.YYYY-MM.reverse-domain:optionalの完全形式も入力可能です。

タイプは現時点のWebGUIではディスクのみサポートしています。

追記:r4912でDVDとTape(DLT8000型)とパススルーが追加されました。

フラグはrw(読み書き用)かro(読み込み専用)のどちらかを選択します。

Portal GroupとInitiator Groupは上記で作成した物を指定します。

LUN0のストレージに作成したエクステント(ディスク領域)を割り当てます。
SCSI仕様上は少なくともLUN255までは利用できるはずですが、
現時点のWebGUIはLUN0のマップのみ作成可能です。

CHAP認証を行うには、高度な設定から
Auth MethodでCHAPを選択し、
Auth Groupに上記で作成したグループを指定します。

コマンドキューイングを有効にするには、高度な設定で
Queue Depthを1~255の数値にします。
現時点のテスト済み推奨値は16です。
キューが深くなるとメモリ消費量が増えますので注意が必要です。

追記:FreeNAS0.7.4919以降はQueue Depth 32 を推奨値とします。

3.6.iSCSIサービスの起動
サービス>iSCSIターゲット>設定を開きます。
右側にある有効のチェックボックスに印を入れて、
「保存して再起動」をクリックします。

以上でターゲットが作成されました。
後はイニシエータ側で接続して自由に利用できます。

現時点で少なくとも以下のイニシエータに接続できる事を確認してあります。

Windows Server 2008
Windows Server 2003 + MS iSCSI initiator 2.08
Windows XP + MS iSCSI initiator 2.08
VirtualBOX 2.1.2
ESXi 3.5 U3
Xen Server 5.0.0 U3
PRO1000/PT Server Adpater (iSCSI Remote Boot 2.1.22)

性能の方はと言うと別にFreeNASにしたから高速化するなんて事はなくて、
いつもどおり書き込みは遅いですね!な状態です。

↓コマンドキューイングあり(深さ16)で1000MBをGbE1本で実行した結果

(クリックで拡大)

↓コマンドキューイングあり(深さ16)で1000MBをGbE2本で実行した結果

(クリックで拡大)

現時点の制限:
iSCSI初期パラメータがターゲット毎に設定できない。

FreeNAS r4529においてistgtと設定画面が登場!

2009年4月9日 木曜日

登場したのは良いけど、スクリプトをインストールされるように
修正してもらえなかった(汗)
速攻メールして修正依頼を出しておきました。
直してもらえるみたいだからそれまでお待ちください。

と思ったけど、他にも作業した方がよさげだから、暫定的に置いておきます。

http://www.peach.ne.jp/archives/freenas/iscsi_target
FreeNASにSSHで入って以下のコマンドを実行します。

# cd /etc/rc.d
# fetch http://www.peach.ne.jp/archives/freenas/iscsi_target
# chmod 755 iscsi_target 

追記:r4531で修正されました

現時点の仕様:
ExtentをLUN0にのみ割り当てる事ができる。
認証データは4個づつしか入力できない。(最大数の上限なし)
ガイド文章が少なすぎる。

既知の不具合:
Settings(Advanced settings)がすべて必須項目にも関わらず
ボールド体になっていない。
QueueDepthが空欄の場合に問題が起こる。
istgtのログ出力先が指定できない。
/etc/rc.d/iscsi_targetが存在しない。

istgtへの報告:
GEOM raid に関する問題
FreeBSD initiatorによる接続の問題

FreeNAS用の作業がほぼ完了しました

2009年4月8日 水曜日

r4521ベースの版を統合用に提供しました。
あとはプロジェクトマネージャーがなんとかしてくれるはず。
そのうちnightly buildに入ると思うので改めてよろしく!

今のところ、表示の改善を求めるのと、iSCSIブートに関する件しか
報告が来ていないけどちゃんと動いているのだよね?

iSCSIターゲット及びGUIをテストする為のバイナリ(ISO形式)をアップしました

2009年4月5日 日曜日

iSCSI以外の機能が動くかどうかはテストしていません。
GUIによる設定はサブセットではあるけど、既存の設定よりは多くの項目が
設定できるようになります。

以下の物を使って構成してあります。
FreeNAS r4506
FreeBSD 7.2PRE
istgt 20090326
startup script for FreeNAS
WebGUI for istgt (not complete)
Hyper-V reboot issue patch
iSCSI initiator StatSN patch

MD5 (FreeNAS-i386-LiveCD-0.7.4506.iso) = 07ffcefce0450be79e64a217c43d34af
SHA256 (FreeNAS-i386-LiveCD-0.7.4506.iso) = 1d7b4ecd232e6f4619e4d1382ce50887556b819dd3c53e7a0185066a92a1988b

http://www.peach.ne.jp/archives/freenas/FreeNAS-i386-LiveCD-0.7.4506.iso

追記:
amd64版は問題があったので削除しました。
i386版も4GB以上のメモリを搭載すると動かない模様?

追記:
r4531からFreeNAS本家trunkにマージされました。
ダウンロードはこちらからどうぞ。
http://sourceforge.net/project/showfiles.php?group_id=151951&package_id=229704

自分で作っておいて言うのも何だけど

2009年4月4日 土曜日

ちょっと設定項目が多すぎるね。
最初からすべての組み合わせを網羅するのは無理がある。
そしてDiscoveryセッションにAGを一個しか割り当てられないのは問題かも。
PG毎にAGを割り当て出来ないと制限が大きいかも。
元々これはApacheのバーチャルホストみたいな感じで、ターゲットが
分離できるといいかもと思ってグルーピングを導入したのですが、
Target毎にAGを割り当てたのは間違いだったかなぁ。

設定代替案:
DiscoveryAuthMap AuthGroup1 PortalGroup1
DiscoveryAuthMap AuthGroup2 PortalGroup2
[LU1]
AuthMap AuthGroup1 PortalGroup1
[LU2]
AuthMap AuthGroup2 PortalGroup2

作成中のFreeNAS管理画面


(クリックで拡大)

言いだしっぺの法則(謎)に基づきFreeNASのスクリプトを提供開始しました

2009年3月28日 土曜日

追記:
r4531からFreeNAS本家trunkにマージされているので、ダウンロードは本家のnightly buildからできます。
http://sourceforge.net/project/showfiles.php?group_id=151951&package_id=229704

このスクリプトはテスト目的の為だけに作成してあります。
もしかしたら不具合が何かあるかもしれません。
しばらくここを見ている人には自明ですが、istgtではデバイスのサポートは
していませんのでファイル形式でエクステントを作成します。

最低限機能すると思われる特徴:
 o MCS/MPIOを使ったフェイルオーバー (最大255並列セッション)
 o マルチパスI/O (Microsoft MPIOとVMware ESXiのみサポート)
 o クラスタノード向けのSPC-3永続的装置予約
 o 2TBを超える媒体を扱える64bit LBA
 o CRC32Cによるヘッダ及びデータダイジェスト
(実験的実装)
 o Intel PRO/1000 Server Adaptersを使ったiSCSIブート機能
 o Windows7対応の準備

既存GUIからは設定できない機能:
 o 双方向または単方向CHAP認証
 o 複数のLUNおよびACL
(実験的実装)
 o コマンドキューイング (最大255の深さ)
 o 仮想DVDROM/DLTエミュレータ
 o パススルーデバイス (DA/SA/CD型のみサポート)

必要なもの:
(FreeNAS r4498/FreeBSD 7.1p4/istgt 20090326でテスト済み)
FreeNAS 0.7
FreeBSD 7.1 またはそれ以降
istgt 20090326 またはそれ以降
FreeNAS 0.7x用のistgt起動用スクリプト
http://shell.peach.ne.jp/~aoyama/wordpress/download/istgt-20090326-freenas.sh.gz
iSCSI initiator 2.1.1 またはそれ以降 (FreeBSD 7.xから利用する時のオプション)
http://www.cs.huji.ac.il/~danny/ftp/freebsd/iscsi-2.1.1.tar.gz

スクリプト使用上の制限:
 o 認証ファイルと制御用設定ファイルは空でないと更新されません。
 (変更が必要な場合は、削除した後に/etc/rc.d/iscsi_targetを起動してください)
 o マルチコネクション(MCS)、マルチパス(MPIO)が必要な場合は、
 すべてのインターフェースに固定IPを設定してください。
 o 許可するネットワークにはMCS/MPIOで利用するすべてのIPが
 含まれるように設定します。iscsi-targetは一個しか設定できないので、
 複数IPを利用する場合は注意が必要です。
 o 待ち受けポートは固定の1個になっています。iscsi-tagetには当該する
 機能が存在しません。

 

istgtインストール:
FreeBSD 7.xのマシンで以下を実行します。
1)Portsを最新版に更新します。(この記事を作成時点で20090326が最新です)
# portsnap fetch update

2)istgtのパッケージを作成します。
# cd /usr/ports/net/istgt
# make package -DNOPORTDOCS

3)作成した物をFreeNASをインストールしたマシンにコピーします。
# scp istgt-20090326.tbz user@host:/path

4)スクリプトを取得して(伸張して)、FreeNASにコピーします。
# fetch /path/to/istgt-20090326-freenas.sh.gz
# gunzip istgt-20090326-freenas.sh.gz
# scp istgt-20090326-freenas.sh user@host:/path

FreeNAS 0.7のマシンで以下を実行します。
1)パッケージを追加します。
# pkg_add istgt-20090326.tbz

2)NetBSD iscsi-targetを停止します。
(止める前にすべてのドライブをイニシエータからログオフします)
# /etc/rc.d/iscsi_target stop

3)起動用スクリプトをistgtのFreeNAS修正版で置き換えます。
# cd /etc/rc.d
# mv iscsi_target iscsi_target.old
# chmod -x iscsi_target.old
# cp /path/to/istgt-20090326-freenas.sh iscsi_target
# chmod 755 iscsi_target

4)istgtを開始します。
# /etc/rc.d/iscsi_target start

このステップまで終わるとGUIからiSCSIサービスの制御が可能になります。
設定ファイルは/var/etc/iscsiの中に作成されます。
まだiSCSIターゲットを有効にしていない場合はGUIから設定します。

※ 初回起動時にドライブがオフラインのまま認識されない事があります。
識別用の数値がiscsi-targetと違う為なので、手動でオンラインにしてください。

 

istgtアンインストール:
FreeNAS 0.7のマシンで以下を実行します。
1)iSCSIサービスを停止します。
# /etc/rc.d/iscsi_target stop

2)istgt用スクリプトを削除して、元のファイルに戻します。
# cd /etc/rc.d
# rm iscsi_target
# mv iscsi_target.old iscsi_target
# chmod +x iscsi_target

3)パッケージを削除します。
# pkg_delete istgt-20090326

4)NetBSD iscsi-targetを開始します。
# /etc/rc.d/iscsi_target start

 

追記:
FreeNASの本家リポジトリには20090309版がexperimentalにr4442より
コミットされていますが、ブログで書いた通り初期版から20090313版までの
MCS複数接続において根本的な設計ミスが見つかっています。
そのため最低でも20090314版(同期I/Oのみの最終版)を、
できれば20090326版以降(非同期I/O対応版,同期I/O部分は
20090314相当)が推奨です。

#ドキュメントがまったくないので設定難しいよって意見が(汗)

FreeNASでコマンドキューイングを試したい場合は
起動スクリプトとしてコピーしたiscsi_targetの222行目の部分を

-v "concat('  QueueDepth ','0')" -n \
↓
-v "concat('  QueueDepth ','16')" -n \

このように数値0を16に修正します。この数値を極端に大きくしても
消費メモリが増えるだけで現時点ではあまり意味はありません。

istgt (iSCSI target) 20090326版 for FreeBSD 7.x with ZFS

2009年3月27日 金曜日

更新>istgt 2009/4/12版

ワイルドカードアドレスの利用がサポートされました。
接続があったIPアドレスに自動置換するため任意のIPアドレスで
待ち受けできるようになりました。
これによりDHCP環境でもより楽に運用できるかと思います。
なおDiscoveryセッションにおけるSendTargetsの場合はIPv6とIPv4が
区別されるので、設定で両方指定してもTargetAddressとして、
どちらか一方しか返しません。

コマンドキューの利用効率が向上しました。
シーケンシャルライトやリードライトが混在する状況が改善されました。

従来はまったくコマンドの中止要求に対して何も行っていませんでしたが、
I_T/I_T_L/I_T_L_Q nexusに対してキュー内のクリアは行うようになりました。
ただし、キューから取り出して実行中のものはいずれもキャンセルできません。

前バージョンよりより安全にエラー処理ができるようになったはず?
今回からESXiにおけるマルチパスも考慮するようになりました。

新しい設定:
ポータルアドレスとして [::] と 0.0.0.0 がサポートされました。
[::]はすべてのIPv6アドレス、0.0.0.0はすべてのIPv4アドレスで接続を待ちます。

[PortalGroup1]
  Comment "ANY IP"
  # Portal Label(not used) IP(IPv6 or IPv4):Port
  Portal DA1 [::]:3260
  Portal DA1 0.0.0.0:3260

istgt (tarball): istgt-20090326.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090326.tar.gz
# cd istgt-20090326
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090326.tar.gz) = e7c0f3ddcfcf47cc0e9ebf0010e1fa61
SHA256 (istgt-20090326.tar.gz) = 8844e2ad571d92e43a364927a35ec58d17b7f21f1978f0c8780d88d43885c07f

既知の問題:
コマンドキューから実行状態に移行したものは中止できません。
マルチイニシエータ環境でのエラー時のキュー管理がおそらく不完全です。

主な修正点:
ワイルドカードアドレスを接続IPに変換する機能を追加しました。
LUN書き込み前に保留したPDUが次のCmdSNならキューに投入するようにしました。
エラー時のデッドロックを回避するように処理を追加しました。
無効なLUNに対するエラーログを抑制しました。
タスク管理コマンドでキューをクリアするようになりました。

追記:Send-PRしたら15分でコミットされました。
メールのお返事をいくつか書いている間に終わってた。
コミッターの人いつもありがとう!

istgt (iSCSI target) 20090323版 for FreeBSD 7.x with ZFS

2009年3月23日 月曜日

更新>istgt 2009/3/26版

公開しようと準備したのにバグがあって動かなかった(汗)
20090321と20090322はなかったことに。。。
なのでちょっと遅れましたけど、コマンドキューイング対応版をアップします。

20090314をベースにコマンドキューイング対応した物をマージしました。
(正確にはリポジトリを新しく作成しました)
今後はこれをベースに修正を行います。

現時点では並列実行しない為スレッド間のオーバヘッドの方が大きくなり
シーケンシャルリード以外はキューなしより遅くなる可能性があります。
キャッシュ機能搭載まではまともに使えないかもしれない。
従来の方法にもマイナーチェンジを引き続き行っていく予定です。

コマンドキューを使ったシーケンシャルの威力はものすごくて、
先日の画像の通りMCSラウンドロビンとコマンドキューを組み合わせると、
GbE単体より平均レートで1.5倍から3倍程度の性能向上が見込める。
もちろん向上するかどうかはZFSプールとかの性能にもよる。

新しい設定:
キューの深さを各LU単位で設定できます。
現在サポートしているのはDisk型のみです。
深さ0はキューイングなしで従来と同じ仕様です。

  # Queuing 0=disabled, 1-255=enabled with specified depth.
  QueueDepth 16

※キューの深さに比例して割り当てるメモリ量が増加しますのでご注意ください。

エラー時(フェールオーバー含む)の処理がまだ完全ではない為、
デッドロックする可能性があるのでデフォルトは無効になっています。
不幸にもデッドロックしていると思われる場合はお手数ですが
デーモンの再起動をお願いします。

istgt (tarball): istgt-20090323.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090323.tar.gz
# cd istgt-20090323
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090323.tar.gz) = 61bd2897fdcc85dff13773100076f012
SHA256 (istgt-20090323.tar.gz) = 4de37bc360df78c6a00bcfa3b32e55fd0dc2ab4ccd9b8d9ce9657a69e070107d

現時点の仕様:
キューイングしたコマンド単位でメモリ割り当てを行い再利用しない。
キューイングしたコマンドが転送要求サイズより64KBを超える作業領域を
必要とした場合はエラーになります。
(通常はイニシエータが適切なサイズを割り当てるはずなので起こらない)
iSCSIデバイスのリードに比べてライト動作がとても遅い。

主な修正点:
MCSでCmdSNが逆順で到着した場合の待機時間を100msから1000msに変更しました。
再接続時に規定数以上接続がある場合は強制終了を発行するようになりました。
ディスク型にコマンドキューイングを実装しました。
SCSIセンスデータ領域を64Kから4Kに縮小しました。
接続専用固定バッファから各コマンド毎の独立バッファを利用できるようになりました。
LU RESETで自身の接続が消去されないようになりました。
AHSのサイズ計算を間違えていたのを修正しました。
iqn.以外にeui.とnaa.も完全指定を許可するようなりました。
小さいPDUはヘッダとデータ部分を一緒にwriteするようになりました。
エラーチェックが正しく行われていなかった問題を修正しました。


20090323での比較(別ドライブ)
コマンドキューの深さを0と16の場合で比べると以下のようになります。
0の場合は従来とほぼ同じ性能のはずです。

MCS/ラウンドロビン/1000MB/コマンドキュー16個

MCS/ラウンドロビン/1000MB/コマンドキュー0個(無効)

MCS/ラウンドロビン/100MB/コマンドキュー16個

MCS/ラウンドロビン/100MB/コマンドキュー0個(無効)

見ての通り100MBみたいなキャッシュに乗ることが
確実な状況では差が開くもののライト動作はちょっと遅い。
(ZFS RAID-Z2のダブルパリティなので元々書き込みは遅いけど)

いろいろ遅い

2009年3月21日 土曜日


(クリックで拡大)

現時点でブロックサイズ8MBを使ってどの程度出るのか見たら210MB/sらしい。
ddでは300MB/s出ているZFSプールのiSCSIターゲットだからこれは普通だけど、
BurstRateがとっても遅い。
小さいブロックサイズでの結果もあまりよろしくない模様。
CPU Usageもすごい事に。Quadコアで29%ってことは
コア一個だと賄えないってことですね。
まぁ、Q6600っていう2.4GHzな遅いCPUですけど。

この結果から調べたのだけど、
どうもトレース関数も通るだけでかなりの負担になっている模様。
そしてこれを見て思ったけど、スレッドを分けて処理するのは
切り替えコストあがるだけであまり意味なかったような。