前回 に引き続き。
TFile の LZ4 サポートを求めてビルドを試みるも、
ビルドに際しての変更があったので追記する形で更新。
v6.16系の導入
冒頭で述べたように、TFile の圧縮アルゴリズムとして、
高速可逆圧縮の LZ4 を v6.14 からサポートした。
オンラインでのデータ取得に際して、ROOT/TTree での出力を検討していて、
zlib では遅すぎるため LZ4 を試してみる。
他にも TTreeProcessorMT/RDataFrame など TTree の処理の並列化も面白そう。
TFile の LZ4 サポート
ただし、ROOT における LZ4 の実装には “corner cases” と呼ばれる、
稀に特定のデータに対して並外れて処理が遅くなる問題を抱えていて、
v6.14 で一度 LZ4 をデフォルトに据えるも、
この問題の発覚で v6.16 では再び従来の zlib がデフォルトに戻されている。
1 2 |
TFile::SetCompressionAlgorithm(ROOT::RCompressionSetting::EAlgorithm::kLZ4) TFile::SetCompressonLevel(ROOT::RCompressionSetting::ELevel::kDefaultLZ4) |
TTreeProcessorMT
この辺から。
あとで試してみる予定。
1 2 3 4 5 6 7 8 |
int nthreads = 4; ROOT::EnableImplicitMT(nthreads); ROOT::TThreadedObject<TH1F> ptHist("pt_dist", "p_{T} Distribution;p_{T};dN/p_{T}dp_{T}", 100, 0, 5); ... ROOT::TTreeProcessorMT tp("input.root", "events"); tp.Process(myFunction); auto ptHistMerged = ptHist.Merge(); |
ビルド
ビルド方法、オプションは基本的には前回を参照。
-Dtable=ON
は obsolete なようなので削除。
前回 の v6.10 と同じ環境でのビルドにも関わらず、LZ4サポートを始めとして
ビルドされるライブラリのサポート状況がかなり様子が異なる。
その一つが clad。
そのためビルドに先んじて、以下の作業が必要。
openssl のビルド
1 2 3 4 |
./config --prefix=/path/to/openssl make -j N make install |
curl のビルド
1 2 3 4 |
./configure --prefix=/path/to/curl --with-ssl=/path/to/openssl make -j N make install |
コンパイル前に configure の出力で TLS-SRP support: enabled
を確認しておく。
git の socks proxy 設定
特定のレポジトリだけに適用するなら
git config http(s).proxy socks5://localhost:XXXX
みたいな感じ。
git の全接続に適用するなら
git config --global ...
とするか、~/.gitconfig
を編集する。
1 2 3 4 5 |
[http] proxy = socks5://localhost:XXXXX sslVerify = false [https] proxy = socks5://localhost:XXXXX |
ネットワーク制限下での socks proxy については、
前回 の "cmake の file(DOWNLOAD ...)" の項を参照。
openssl/curl/git の解説
ビルド時に clad を "git clone https://github.com/~" で取りに行こうとする。
git の接続設定は上記の通り。
これで通信は通るが、接続は確立されない。
どうやら github がセキュリティの甘い接続をハネているようだ。
git はダウンロード時に内部で curl/libcurl を使っている。
システムの curl は、"curl -V" の Feature に TLS-SRP が入っていない。
--> curl のビルド
curl のビルド時に "TLS-SRP support: enabled" が入らない
--> openssl のビルド と --with-ssl の指定
openssl と curl/libcurl に path を通して、git がこちらを参照するようにする。
sqlite3 の対策
前述の通りシステムのライブラリが化石みたいに古いせいか、
sqlite3 周りの関数が変わっていてコンパイルが通らない。
cmake で -Dsqlite=OFF
とするか、
[src]/tree/dataframe/src/RSqliteDS.cxx
内の
sqlite3_errstr
と sqlite3_close_v2
を適当に修正する。