ToDo:
これって、組み込み関数シンボルを特殊扱いしているせいでは無いだろうか...
組み込み関数を直接書かなければ、
In[1]:= f = Sin Out[1]:= Sin In[2]:= Hold[f[1]] Out[2]:= Hold[f[1]] In[3]:= ReleaseHold[Out[2]] Out[3]:= .841470984807896
になるようです
おそらく、itfunalocで定義した組み込み関数は SADScript側から 再定義出来ないので、Hold[]前とReleaseHold[]後の評価結果が 一致することを暗に仮定して正格評価を行っていると思われる。
さらに、Hold[]にツッコミを入れると、Hold[]が実際に保存するのは 評価前の構文木なわけで、組み込み関数はシンボルその物ではなく 関数番号が構文木に組み込まれるので、Hold[]した結果を ReleaseHold[]する前に itfunalocで定義済みの関数シンボルを オーバーライドするとReleaseHold[]時に評価される関数は、 オーバーライド後ではなくオーバーライド前の関数になるという 一見不可思議な現象が発生します。 さらに、Hold[]を ToStringでシリアル化してToExpressionで式に 変換した場合はオーバーライド後の関数に化けるはず。
400GB版を入手したので FreeBSD 10.1-STABLEにてテスト開始
I/O block size 128kBにて ddによる読み出しが 1GB/sec程度を確認
書き込みは、若干落ちて 900MB/sec程度
カタログスペックでは読み出し 2.2GB/secらしいので、
あたりが疑われる。I/O block sizeに関しては、後日カーネル再構築を行い検証するべき
また、zpool createでハングアップする nvmecontrolにて logpage 2を参照してみたところ、 ホストからの書き込みが処理されていない模様
対処療法として、/boot/loader.confにて vfs.zfs.trim.enabled=0を指定して ZFS TRIMを無効化することで動作するようになった
おそらく、nvme/nvdで TRIM回りが正常に処理出来ていない模様 (コードを流し読みした範囲では、BIOの処理は nvmeドライバ側で処理されている)
追記型のキャッシュサーバーを構成する上では TRIMが使用できない点は 大きな問題とはならないが、長期的には改善を要する
MAXPHYSを 256kBに増やしたが NVMe側に反映されていない (AHCI上の adaデバイスでは増えている)
nvme/nvdをモジュールではなく、カーネル組み込みで構築しても変わらない 状況なので、別の原因があると思われる
コントローラ固有の制約だとすると、カタログ値の 2.2GB/secってどうやって出すのだろう
聞いた話だと、Windows標準のドライバではカタログ値の半分の性能しか出ず、 Intel純正ドライバを入れないとカタログ性能が出ないという話もあるが、 NVMe標準以外に何らかの拡張モードが存在してるのか?
Windows上の ベンチマーク結果の比較を見ると Command Queuingの使い方(CDD3 vs CDD4)で シーケンシャル読み出しが 1.4GB/secから 2.3GB/secあたりまで変化がある模様
2.2GB/secというカタログ値は、コマンド発行レートに限界が有るので、 非同期で積極的にキューにトランザクションを詰め込んだ際の性能と思われる
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記
_ AC [SADTkinterのマニュアルのp.98には Hold[Sin[1]] ⇒ Hold[Sin[1]] と書いてあ..]