sw

Kernel/VM探検隊online part2

[2021-03-20 13:30]

sat / オープニング

[2021-03-20 13:33]

rui314 / 超高速リンカmold

  • リンカはなんどか作ってる
  • lldは広くつかわれている
  • リンカはドキュメントがよくないが難しいものでない。
  • リンカの存在意義: 分割コンパイルして時間を節約したい そもそも一発でサイズ的にコンパイルできない。
  • ローダー: 実行ファイル→メモリ
  • リンカ: オブジェクトファイル→実行ファイル
  • リンカの基本機能: オブジェクトをまとめてリロケーションを適用する
  • 静的ライブラリ: オブジェクトファイルのかたまり、小分けになっていて必要なものだけつかうようになっている。セキュリティーアップデートがあったときにリンクしなおし。
  • 共有ライブラリ: 実行ファイルに埋め込まなくてもよい。アップデートしたときにプログラムが異常になる可能性。
  • 動的リロケーション: 実行時にアドレス書き換え
  • PLT(procedure linkage table)/GOT(global offset table): テキストセグメントを書き換えなくてもよくなるように間接ジャンプ/間接参照
  • リンカがやること: オブジェクトファイル・ライブラリをよむ→シンボル解決→PLT/GOTを決める→レイアウトを決める→ XXXX
  • リンカが速くなるとうれしいこと: 差分ビルドが速くなる。
  • chrome(2GB): gold 10秒、mold2秒
  • なぜ速いか?: 中間表現をつかわない(mmapしてそのままつかう)。並列化する(lldでもがんばったけど)。
  • chromeのリロケーション: 35000000 とにかく多い
  • 基本的にデータ並列で。Intel TBBをつかっている。並列forループ。
  • 並行コンテナをつかう。ロックフリー。tbb::concurrent_hash_map。シンボル解決。
  • map-reduceパターン: build-idオプションで利用。2GBのハッシュ値の計算でハッシュ値のハッシュ値で。
  • paralle scanパターン: 文字列のオフセットを計算するときに中間値をおぼえておくことで高速化(つかってないけど)
  • malloc: mimallocが一番スケールした。
  • ファイルは上書きする方が速い。
  • 大量にmmapするとexitが遅くなる。
  • 速くするヒント:
    • 推測せずに計測する
    • テータが先、コードは後
    • 何度も書く 二度目は早く書ける
  • 差分リンクはうまくやらないと速くならない。ローカルな変更かどうかむづかしい。
  • リンク時最適化(LTO): llvmの吐いたビットコードをリンク時にコンパイルする。でも時間がかかって遅い。
  • moldはX86_64専用でつくっている。Linuxでしか試してない。最初から移植性を考えるとたいへん。

[2021-03-20 14:09]

[2021-03-20 14:09]

KOBA789 / 音の出る CPU

  • DBMSをつくってる。
  • 近年自作CPUがアツい!
  • CPUはシリコンでできている。いがいと知られてないですが。
  • でも半導体でなくても作れる
  • 小学生のときに300個リレーを買った!
  • 困りごと:
    • リレーで論理回路をつくるときの知見はインターネットにころがってない! (インターネット以前のものだから)
    • シミュレータがない
  • まずは回路CADをつくる! (今回の発表の進捗)
  • リレーのコイル片側は必ずGNDにするとショートしなくなる。シミュレータも作りやすくなる。
  • CADとシミュレータを融合して動く回路図に。60fpsでヌルヌル動いてほしい。
  • いまどきのGUIはReactとTypeScriptだが、きつい。遅いコードもひどい。
  • Rustで書いてwebassembleでWebGLをつかう。
  • WebGL(OpenGL)は三角しか書けない。CADとしては機能が足りない→実装
  • Immediate mode GUI(IMGUI): ステートレスで毎回書き直す(差分更新しない)。ゲームエンジンと相性がいい。
  • GPUが速いから問題ない。CPU→GPUのRPCが遅いだけ。減らせばOK。1回まで減らした。
  • デモ: リレー30個でリングオシレータ、全加算器
  • SVGだと実装は楽だがスケールするか心配。CADの内部状態とSVGの状態を同期されるのが面倒。
  • 音は実装がまにあってないだけ。
  • WebGLをたたくにはいちどjavascriptの世界をとおるが、そもそも処理が重いので問題ない。
  • HDL: 効率はいいけど楽しくない。趣味だし。

[2021-03-20 14:34]

[2021-03-20 14:35]

inductor / Red Hatが新しく作り始めたVMMの話

  • 10分で完全理解したかったlibkrun
  • 最低限のデバイスエミュレーションとC APIを備えたRustのmicroVM
  • firecrackerからコードを拝借している
  • vsockベースのTSI(transparent socket impersonation) virtio-netをつかわず
  • コンテナのプロセス分離をVMでやる (gVisorとかKata Containerとか)
  • Kataだとコンテナ間が共有されてしまう。
  • network namespaceで連携

[2021-03-20 14:44]

休憩 10分

IMG_20210320_144710

[2021-03-20 14:55]

msyksphinz / Rustで作るフルスクラッチQEMU型エミュレータ

  • QEMU型(binary translation)の命令セットエミュレータを作った。
  • RTLシミュレータと命令セットシミュレータで動作つきあわせて確認したり。
  • QEMU: システム全体をエミュレートできるのが特徴
  • ゲストアーキテクチャ→TCG(tiny code generator)→ホスト命令
  • インタプリタ型(1命令ごと解釈)
  • バイナリ変換型(ゲスト命令をゲスト命令に変換して実行する)
  • QEMUは中間コードの最適化が強力
  • 自作QEMUのデバッグがたいへん。どんな命令が生成されたか確認できない。DWARFを吐ければいいが。
  • 自作QEMU on 本家QEMUで解決!
  • riscv-testsでAtomic命令以外は動作確認
  • Spikeよりは速いがQEMUより遅い。
  • QEMU高速化テクニック
    • TCB Block Chaining (basic block)
      • basic blockの出口(分岐)で制御モードに戻っている
      • ジャンプ命令で直接飛ぶようにスタブを書き換える
      • プロファイルとったらエミュレーションの時間よりも制御時間が多い
    • TCG Lookup and Jump
      • レジスタ間接ジャンプのきにテーブルを索く
  • Rustを使ってよかったか? よくなかったところ:
    • ゴリゴリにメモリアクセスするのでunsafe文ばかりになってしまう
    • ジャンプ先がコンパイラが知らないところなので静的解析できない
  • エミュレータのシミュレータのちがい: CPUのコアだけ模擬するのがシミュレータ、システム全体だとエミュレータと呼んでるような気がする。

[2021-03-20 15:19]

[2021-03-20 15:21]

mzyy94 / HDMI探検隊

  • HDMIの機能: 映像、音声、イーサネット、機器コントロール、ディスプレイ制御(CEC,DDC)
  • CEC: 単線バス規格
  • DDC: I2C
    • DDC/CI 輝度音量変更など
    • HDCP コンテンツ保護 鍵交換
    • EDID 表示情報
    • SCDC HDMI2.0
  • RaspberryPiでいじってみる
  • CEC: apt install cec-utils、 cec-client -s <<< "tx .."
  • CECは認証がないので送信元を偽装できる。低速なのでバスが詰る(妨害できる)。
  • DDCは/boot/config.txtでデバイスツリーでI2Cバスを直接さわる。
  • i2cdetect -y 2 (rappi4は 12)
  • BadHDMI: 悪意をもったHDMI機器 (CECやDDCに認証機構がないため)
  • CECを傍受してリモコン入力のパスワードを盗むとか
  • #BadHDMI

[2021-03-20 15:32]

[2021-03-20 15:32]

mu-mu-mu / Intel MPK入門

  • memory protection keys
  • プロセス内のメモリアクセス権限をページテーブルの設定以外でできるように
  • Ring3で設定できる (コンテキストスイッチ不要)
  • あらかじめページテーブルにPkeyを設定しておけば wrpkruでアクセス権・ライト権を設定(PKRUレジスタ)
  • まだアプリではほとんどつかわれてない。アプリの改造がたいへんだからか。
  • ざっくり2回以上権限を変えるならmprotectより速くなる。

[2021-03-20 15:42]

[2021-03-20 15:43]

nullpo_head / WebAssemblyのWeb以外のこと全部話す

  • google meetの背景ぼかしにつかわれている
  • web外wasm: wasmer, envoy, krustlet, kernel-wasm, nabulet
  • Wasmがあついのはなぜか: Java(portable), CLI(bytecode), NaCl/eBPF(sandbox), Lua(embeddable) を複合的に解決しようとしている
  • 特徴: safe, language-independent, porable, open
  • 言語仕様がちいさいのでバックエンドをつくりやすい
  • オブジェクトファイルフォーマットが決まっている
  • なにができるかはwasm外とのインターフェースで決まる。
  • WASI: OS上でwasmを動かすためのAPI/ABI。posixとおなじかちょい下。安全性はsystemcallの安全性に依存する。capabilityで対応する予定。スマホのようなセキュリティモデルがネイティブアプリでも。
  • Proxy-wasm: proxyでパケットをさわる。
  • 双方向(hostcall,guestcall),safe,portable,fastなところはwasmがはまる
  • 2008年にwasmがあったらdockerがなくてもよかっただろうとdockerの中のひとがいっているらしい。

[2021-03-20 16:06]

休憩 10分

IMG_20210320_161301

[2021-03-20 16:15]

herumi / WebAssembly向け多倍長演算の実装

  • パアリング: 暗号文の内積や署名の集約ができる高機能暗号
    • 暗号文のまま積和演算(L2準同型暗号)
    • クロス集計につかえる
    • http://herumi.github.io/ango
    • 楕円曲線をつかう
    • 384bitの整数の(x+y)%p, (x*y)%p がたくさんでてくる
  • wasmにはCでできる範囲の演算しかなくキャリーがない。
  • キャリーがあるかは (x+y) < x でわかる
  • clang-11でuint128_tをつくれる拡張 _ExtInt がはいった。
  • emccをつかっている(clangではなく)
  • wasmで暗号化はどのくらいサイドチャンネル攻撃の対策は? スマホならいいけどサーバサイドだと対策が必要だろう(定数時間で演算するモード

を用意するなど)。

  • mod pはどうしている? 話すと長いので省略した。
  • SIMDはツールがこなれてきてないので様子見。

[2021-03-20 16:40]

garasubo / RustでOSをつくると何がうれしいかを論文から探る

  • Rustをつかうことで新しいOSの設計を模索する論文を紹介する。
  • Tock
    • 省メモリなマイクロコントローラ用OS Arm Coretex-Mなどが対象
    • アプリの独立性をたもちつつ柔軟性もほしい (静的リソース確保を避けたい(最大値を決めるのがむづい))
    • Grants: システムコールで動的にメモリを確保するときに、プロセスのメモリGrant型としてをOSに貸し出す。エラーをつけて返す。
  • ReadLeaf
    • Rustをつかったマイクロカーネル
    • Rustの言語機能でfalut isolation
    • posixサブセットを実装
    • 共有ヒープをつかったドメイン間通信
    • ドメインがクラッシュしても参照型 RRef のドメイン情報で対応できる
  • Theseus
    • コンポーネント間のステートスピル(情報のもれだし)を少なくする
    • OSの実行モデルと言語の実行モデルを近づける
    • すべてのコンポーネントをおなじアドレス空間でうごかす
    • 言語制約でタスクのリソースを管理

[2021-03-20 16:50]

[2021-03-20 16:51]

tj8000rpm / OVS-DPDKとOpenStackで作るおうちNFV環境の構築

  • DPDKの思想: CPUコアがたくさんあるのでカーネルじゃなくてアプリでやる。CPUとNICをひもづける。
  • OvS(open vswitch): 安定している。DPDK対応
  • ハイパーバイザーでは実コアを意識する。共有キャッシュとか。
  • TCP: iperf: 余裕で10Gbps達成
  • UDP: DPDKのpkggenで測ると7Mpps。

[2021-03-20 17:01]

[2021-03-20 17:01]

fadis / Wasserstein逆FM音源

  • パラメータ調整がむつかしくて滅んだ。
  • 遺伝的FM音源: ピアノの音をそこそこ再現するパラメータがみつかった。人間がだめなだけだった。でも運だのみ。
  • 勾配法で探そうとしても谷がたくさんあって最小点に辿りつけない。
  • ωに制約をつけると探索しやすくなる。でも倍音が少ない。倍音の周波数もズレてしまう。音が似てない。
  • 損失関数: 平均二乗誤差は適していない→wasserstein距離: なめらかな誤差になった。
  • でも解析的に微分できな→数値的にやればよい
  • 課題: 計算に時間がかかる。微分の計算に時間がかかる。

[2021-03-20 17:12]

Unterground_idle / Linux KernelにおけるCompactionについて

  • compaction: alloc/deallocの繰り返しのfragmentationを緩和する
  • movable pagesをfree pagesに移動する。
  • isolation pagesとしてロックをとりつづけないようにしている

nhoriguchi / Linuxのhugepageの開発動向

  • hugepage: 巨大化したアプリを実行するときにTLBの利用効率を上げる。
  • ちょっと性能が上がる。
  • linuxにはhugetlbとthp(transparent hugepage)の2つの実装がある。
  • DBではthpは無効にされることが多い。
  • vmemmap page (struct page): 物理メモリの1.6%を専有する。
    • hugepageでおなじ内容なら節約できる。
  • thp page cache support: anonだけでなくふつうのページキャッシュでも利用できるように。
    • ページが共有されていてもよいようにページのsplitとマッピングのsplitを分けられる。
  • XArray: radixtreeのおきかえ multi index entryが便利
  • thp失敗したときにどうするか
    • always: compactionをためす
    • defer: 4KBにfallbackして裏でcompaction
    • never: 4KBにおちる
    • macvise: MADV_HUGEPAGEで指定されていればalways、でなければnever
    • defer+madvise:

[2021-03-20 17:32]

nekomatu

  • アンケートよろ

[2021-03-20 17:34]

配信はとてもスムーズだった。

休憩時間が短かいのはオンラインだからトイレが混雑しないというがあるかな。

Gfarmワークショップ2021

[2021-03-05 10:31]

Gfarmファイルシステムの概要と最新機能 / 建部修見

  • ワークショップは地方開催だったが、今回はオンライン。
  • libreがdebianのパッケージをメンテしているのでubuntuではapt installで入る。
  • 新機能: S3互換IF、TLS通信
  • 暗号化ファイルシステム
    • encfsをつかう。
  • read only
    • メタデータが更新されなくなる。
    • フェイルオーバーでsplit brainの可能性が残る場合(disaster recoveryとか)につかう。
  • Gfarm/BBバーストバッファ
    • ノードローカルの高速ストレージをつかう
    • メタデータの同期が不要になるので高速に。
  • NSMPI (MPI-IO for Node-local Storage)
    • ノード数に対してスケールする
    • readでもスケールする。
  • Q: ROで書きこむと待たされるか?
  • A: 待たされずエラーになる。書き込み途中でROになったらcloseで待たされる。

[2021-03-05 10:54]

HPCI共用ストレージ利用者向け情報公開サービスの構築とと今後の展望 / 金山秀智

  • 論理 45PB (二重化しているので物理90PB)
  • プライマリは7.8PBで容量80%を越えたら古いのは消す。
  • Gfarm Zabbixで障害監視しているが管理者向け
  • prometheus(監視)+Gfafana(ダッシュボード)でユーザ向けの情報
  • apache+shibboleth, grafana+mysql, prometheus+influxdb
    • nginxはshibolethがサポートしてない..
  • Gfarmのコマンド出力がjsonだったらなぁ...
  • SELECT DISTINCT inumber FROM xattr WHERE attrname in ('gfarm.replicainfo','gfarm.ncopy')
  • ダッシュボード作りは大変だった。
  • ネットワークの障害(SINETの運用状況)と連携したい
  • ユーザ別の情報を提供する予定
  • Gfarm Exporter: スクリプトのメンテナンスがたいへんなので。

[2021-03-05 11:27]

  • Q: イベントからGUI反映までの遅延は?
  • A: 15秒に1回とっているが、バッファ3分なので最大3分。

[2021-03-05 11:29]

スーパーコンピューティングシステムSQUIDとデータ集約基盤ONION / 伊達進

SQUID
  • supercomputer for quest to unsolved interdisciplinary datascience
  • 汎用CPU計算ノードはdragofly+ でスレージをふくめた全体はfat treeで
ONION
  • セキュアフロントエンドを経由するとスパコンを資源分離環境で使える(医療系とかで利用)
  • google driveにおいてデータを共有しているのをなんとかしたい。(open research, open innovation)
  • 多様なデータをスーパーコンピューティング環境に集約できるデータ基盤
  • データフローを妨げないデータ基盤
  • データの適正な管理
  • sftp,scpでデータ移動しているのはなんとかしたい (HPCI共用ストレージはあるけど) (スパコン内はNFSで)
  • Osaka university Next-generation Infrastructure for Open reserch and open InnovationN
  • WebUIで利用者がデータ操作ができるようにしたい
  • 計測機器のデータを自動的にストレージに保存できるようにしたい

[2021-03-05 12:01]

昼休み

[2021-03-05 13:20]

Gfarm-S3-MinIO GfarmのS3互換ゲートウェイ / 石橋拓也

  • https://min.io: S3互換ストレージ、gateway機能がある、Go言語
  • WebUIにログイン (Gfarm共有鍵のハッシュ値もつかえる)
  • ユーザごとにMinIOプロセスを起動する
  • アクセスキーがuser ID、シークレットアクセスキーがパスワードに相当する
  • apacheリバースプロキシでアセクスキー → MinIOのポート番号に転送
  • /sss/ユーザ名/バケット名 としてみえる。
  • WinSCP,Nextcloudとかからもつかえる
  • マルチパートアップロードをどうするか
    • ローカルFSに溜めてからGfarmにアップロード
    • ローカルがあふれたらGfarmにためる。
  • 注意事項
    • ディレクトリを改名できない
      • そもそもS3 APIにrenameがないのでコピー+削除になるため
      • クライアントの実装次第
    • /sssバケットを消さないように!
      • rm -rf / 相当。削除できるものはすべて削除することになる

[2021-03-05 13:51]

  • Q: gfarmから作成されたファイルもS3からアクセスできるか?
  • A: S3で共有する設定になっているディレクトリならOKl
  • Q: マルチパートアップロードをDNSでエンドポイントを複数に分けたときにどうなるか気になる
  • A: S3クライアントは1つのgatewayにしかつながらないなず
  • Q: readもマルチパートになる?
  • A: minio-gfarmは1本
  • Q: マルチパートアップロードはoffsetがわかればpwriteできるのでは?
  • A: 最後にならないとoffsetとsizeの情報が飛んでこないのでムリ
  • Q: 結合中にエラーになったらどうなる?
  • A: クライアントは結合の成功を待つのでだいじょうぶのはず
  • MinIOをユーザにちかいところにおくのかgfarmにちかいところにおくのかで性能がちがってくる。

[2021-03-05 14:06]

Amazon Web Services におけるクラウドHPCストレージ ~Amazon FSx for Lustre を中心として~ / 宮本大輔

  • 最近は製薬企業のHPC利用をあつかっている
  • クラウド: 必要なときに・必要なだけ
  • アプリケーションにあわせてクラスタを構成できる(自由度が上がりすぎるけど)
  • ひとりあたり1クラスタ構成もありえる
  • Mobileye: 自動運転のシミュレーションをAWS Batchで。ピーク40万vCPU。
  • Descartes Labs: EC2 C5で2PFlops LINPACK。2.6h 5000$。
  • modernaでもAWS活用
  • EFA: elastic fabric adapter
    • MPI/NCCL専用アダプタ利用。TCP/IPをはぶく。
    • TCPのかわりに SRD: scalable reliable datagram をつかう。
  • amazon FSx for Lustre: フルマネージド
    • scratch(single SSD), persistent(replica ssd), persistent(redundant hdd)
  • ふだんはS3にデータをためて、計算するときだけlustreにインポートする。
  • 自動インポート設定ができる。fsをつくるときにバケットと関連づけする。
    • lustreのHSM機能をつかっている
    • 明示的エクスポートは lfs hsm_archive FILE
    • 状態は lfs hsm_state FILE でみられる。
  • ストレージ構成
    • lustreのみ: すべてのデータを計算につかうばあい
    • lustre + S3: いちぶだけ計算につかうばあい
    • ローカルディスク + S3: 計算でデータの共有が必要ないばあい

[2021-03-05 14:39]

  • Q: lustreでアクセスしているときにS3バケットが消えたらどうなる?
  • A: おそらくエラーになとおもうが
  • Q: toyotaがBeeGFSからAWS Lustreに変えたのはなぜか?
  • A: 運用がたいへんだかららしい

[2021-03-05 14:41]

Lustreの最新機能のご紹介 / 井原修一

  • HPCではlusterがよくつかわれている
  • luster over striping
    • ストライプはOST数が上限
    • プロセス数 > ストライプ数だとOSTで競合がおこる。
    • ストライプ数 > OST数にできるようになった。
    • オブジェクトが分かれるので、競合を減らせる。
    • single shared fileで性能改善
  • PCC: persistent client cache
    • ローカルSSD,NVMeをキャッシュにつかう
    • writeは自動同期する
  • 暗号化
    • fscrypt kernel APIに準拠
    • クライアントでwrite時に暗号化。サーバはそのままディスクに書く。
    • writeは30%くらい性能が落ちる(現状)
    • readは20%くらい性能が落ちる(現状)
  • DNE auto rebalancing
    • distributed namespace environment
      • MDTの負荷分散
    • DNE1: remote direcotry
    • DNE2: striped directory
    • ディレクトリにファイルを入れすぎても自動的に分けてくれる
  • OST Quota
    • lustre quota: uid,gid,project-idに対してinode数/容量のquotaが設定できる。
    • HDDとNVMeのOSTが混在したときに別々のquotaを設定したい。
    • OST Pool Quota
      • OST Poolは以前からあった機能
      • これにquotaを設定できるようになった

[2021-03-05 15:05]

  • Q: ストライプサイズを47008バイトにできるか?
  • A: 64K以上で4K単位の制限がある

[2021-03-05 15:08]

休憩

[2021-03-05 15:25]

Oracle Cloud Infrastructure / 松山慎

  • ベアメタルサーバとフラットなネットワークが特徴
  • availability domain内はフラットな物理ネットワークで
  • SINET接続あり
  • ストレージの種類: local, block, fs, object(standard, infrequent, archive)

[2021-03-05 15:50]

[2021-03-05 15:51]

DDN Update / 橋爪信明

  • 2020年導入実績
    • EXAScaler:14, FEFS:4, ScaTeFS:1
  • NVMe 1.7倍/年、HDD 2倍/年で増えた
  • EXAScalerはコミュニティLustreのアドオンの形で開発
  • EXA5 Hot Pools: NMVeにキャッシュする。非同期でHDDにコピー。
  • GPU Direct storageをつかうと187GB/s
  • S3データサービス: lusterにS3 APIを提供。posixとs3の同時読み書き可能
  • RED: reiable elastic data service
    • NVMe用sofotware defined storage
    • bulkIOだけでなくIOPS向けのエンジンも追加

[2021-03-05 16:14]

クロージング

[2021-03-05 16:15]

bsfilterがときどき切れる問題

bsfilterをpop proxyとしてうごかしてmewで読むということをしているのだが、ときどきあるメールで受信が止まってしまうという現象が起きていた。そういうときはbsfilterをとおさずにpopアクセスして問題のメールだけ削除して逃げていたのだが、調べる気になったので調べてみたところ

"invalid byte sequence in EUC-JP"

というメッセージが表示されていた(普段はバックグラウンドでうごかしてメッセージは/dev/nullにすていているので気づいていなかった)。

しらべてみるとbsfilterの「invalid byte sequence in EUC-JP」を回避するというそのものずばりなページがありさっそくパッチを当ててみたが直らず、バックとレースを仕込んでしらべてみたらまた別なところで同様なことがおこっていた。なんだかあちこちscrubを埋め込まないといけない予感がするが、とりあえず問題になったところだけパッチして今回は終了した。

ついでにtimeout関係の書き方が古いらしいのでこれも修正。

% cvs diff
cvs diff: Diffing .
Index: bsfilter
===================================================================
RCS file: /cvsroot/bsfilter/bsfilter/bsfilter,v
retrieving revision 1.87
diff -u -p -r1.87 bsfilter
--- bsfilter    3 Nov 2013 10:22:15 -0000       1.87
+++ bsfilter    26 Feb 2021 09:18:45 -0000
@@ -1243,7 +1243,7 @@ EOM
               ""
             end
           end
-          content = NKF::nkf('-e -X -Z0', content.gsub(/\?(iso-2202-jp|shift-jis)\?/i, '?ISO-2022-JP?'))
+          content = NKF::nkf('-e -X -Z0', content.scrub('?').gsub(/\?(iso-2202-jp|shift-jis)\?/i, '?ISO-2022-JP?'))
         else
           content = latin2ascii(content)
         end
@@ -1368,7 +1368,7 @@ EOM

   def decode_character_reference(str, lang)
     if (@options["utf-8"])
-      newstr = str.gsub(/\&\#(\d{1,5}|x[\da-f]{1,4});/i) do
+      newstr = str.scrub('?').gsub(/\&\#(\d{1,5}|x[\da-f]{1,4});/i) do
         hex_or_dec = $1
         if (hex_or_dec =~ /^x(.*)/i)
           hex_str = $1
@@ -2633,7 +2633,7 @@ EOM
     return if (str =~ /^\A\-ERR/)

     while (str != ".\r\n")
-      timeout(SOCKET_TIMEOUT) do
+      Timeout.timeout(SOCKET_TIMEOUT) do
         pop_proxy_socket.write(str = pop_socket.gets) # forward
       end
     end
@@ -2664,7 +2664,7 @@ EOM
         @options["message-fh"].print(pop_proxy_socket, " is accepted\n") if (@options["verbose"])
         begin
           pop_socket = nil
-          timeout(SOCKET_TIMEOUT) do
+          Timeout.timeout(SOCKET_TIMEOUT) do
             pop_socket = TCPSocket.open(pop_server, pop_port)
           end
           @options["message-fh"].print(pop_socket, " is connected\n") if (@options["verbose"])
@@ -2718,12 +2718,13 @@ EOM
               pop_proxy_socket.write(response.join) # return response to MUA
             end
           end
-        rescue TimeoutError
+        rescue Timeout::Error
           @options["message-fh"].printf("Timeout error %s %s %s\n", pop_server, pop_port, pop_proxy_port) if (@options["verbose"])
-        rescue
+        rescue => e
           @options["message-fh"].printf("pop exception caught %s %s %s\n", pop_server, pop_port, pop_proxy_port) if (@options["verbose"])
           p "#{$!}" if (@options["verbose"])
           p "#{$@}" if (@options["debug"])
+         p e.backtrace
         ensure
           if (pop_proxy_socket && ! pop_proxy_socket.closed?)
             @options["message-fh"].print(pop_proxy_socket, " is gone\n") if (@options["verbose"])
@@ -2894,12 +2895,12 @@ EOM
   def setup_socket_timeout
     TCPSocket.class_eval <<EOM
       def write_timeout(str)
-        timeout(SOCKET_TIMEOUT) do
+        Timeout.timeout(SOCKET_TIMEOUT) do
           return self.write(str)
         end
       end
       def gets_timeout
-        timeout(SOCKET_TIMEOUT) do
+        Timeout.timeout(SOCKET_TIMEOUT) do
           s = self.gets
           if (s == nil)
             raise "socket.gets returned nil"
@@ -2916,12 +2917,12 @@ EOM
   def setup_ssl_socket_timeout
     OpenSSL::SSL::SSLSocket.class_eval <<EOM
       def write_timeout(str)
-        timeout(SOCKET_TIMEOUT) do
+        Timeout.timeout(SOCKET_TIMEOUT) do
           return self.write(str)
         end
       end
       def gets_timeout
-        timeout(SOCKET_TIMEOUT) do
+        Timeout.timeout(SOCKET_TIMEOUT) do
           s = self.gets
           if (s == nil)
             raise "ssl_socket.gets returned nil"

久しぶりにCVSをさわった。体が覚えていたが cvs up -n じゃなくて cvs -n up ということまでは覚えていなかった。

リアクティブプログラミング

  • タイトル: リアクティブプログラミングにおける時変値永続化の試み
  • 講演形式: MS Teams
  • 日時: 2021年2月24日 (水) 15:00-16:40
  • 講演者: 大分大学 理工学部 准教授 紙名哲生 先生
  • connpass
  • スライド

概要(コピペ)

リアクティブプログラミング(RP)言語では、時間変化する値(時変値、シグナルともいう)の間の関係を宣言的に記述しておけば、あるシグナルの値変化はその関係を辿って他のシグナルへと自動的に伝播される。

また、値変化を出力などの副作用に伝播させる場合もある。これらの機能は、GUIやセンサとモータの連携など、時間変化する入力列を処理するプログラムの記述に便利である。

Javaを拡張したRP言語SignalJでは、文法拡張のほとんどないシンプルなプログラミングインタフェースでこれらの機能を扱うことができる。

本講演では、RP言語やSignalJの機能をひと通り紹介した後、任意の過去に遡ってシグナル値を取得できる永続シグナルの実現方法について議論する。永続シグナルによる分散RPの実現可能性についても論じる。

リアクティブプログラミングについて

  • 時変値(ジヘンチ, time-varying values)を抽象化
    • 現在時刻のようなもの
    • ストリームのようなもの イベント列とか
  • 宣言的につなげていく
    • データフローになる
  • リアクティブシステムになる
    • センサーとモーターの連携とか
  • 例題: ストップウォッチ
    • ふつうにJavaで書くと状態遷移がわかりにくい。
    • 仕様がまざりあってしまう。
  • stopwatch as a flow b/w TVVs
   button → activation → label
       │      │
       └→    ↓
    time → counter
  • abstractions of TVV in RP
    • FRP: behavior(連続的変化), event(離散)
    • Reactive extension (RxJavaとか)
    • SignalJ
  • デザインスペース
    • evaluation strategy: push-based or pull-based
      • pushはイベントドリブンにあうがglitchの問題がある
      • pullはglitchはないが即時反映に向かない
    • lifting
      • 既存の言語(Host言語)の上に拡張した場合、変換をどうするか?
      • lift: f(T) -> f_lifted(TVV)
      • explicit: lift(f)(b) -> flifted(b)
      • implicit: f(b) -> flifted(b)
    • glitch avoidance
      • 値が伝搬するときの一時的な不整合 (1つの値が複数の経路を経由して結果に影響する場合)
      • 気にしないという考えかたもある
      • トポロジカルソートが必要(push-basedの場合)
      • 分散システムだと解決は困難
    • support for switching propagation
      • 伝搬システムを動的に切り替えたい(値によって切り替えたい)l
    • support for distribution
      • webとかmobileとかでRPをつかったらconsistencyを維持するのがむつかしい
      • コーディネータにまかせて解決するとか
      • RPのアルゴリズムを分散システムに対応させるか

SignalJ: a simple Java-based RP language

  • 特徴:
    • シンプルなプログラミングインタフェース = シグナルという抽象化のみ、liftがない(signalを値として使える)
    • push, glitch-free, switching support, side-effects
  • 例:
signal int a = 5; // "signal"はmodifier; source signal
signal int b = a + 3; // composite signal; 再代入は禁止
a++;
System.out.println(b); // 9
  • 例:
signal int a = 5;
a.subscribe(e -> System.out.println(e)); // イベントハンドラ
a++;
  • 例:
signal int a = 5;
a++;
System.out.println(a.sum()); // 11
  • 評価戦略
    • 変化に(論理的な)時間はかからないとする
    • mostly pull-based. 必要なときだけ計算 (folding演算はしかたなくeagerly)
    • イベントハンドラの実行は(論理的な)時間が進む. 値が確定してから評価される
  • シグナルネットワーク切り替え = オブジェクトのシグナル
signal int tabIndex = 0;
List tabs = List().add(new View());
signal View currentView = tabs.getViewByInde(tabIndex);
  • 時変値は即座に反映するだけでなく永続化もしたい
  • 車輌トラッキングの例
    • x,y座標の変化から速度を計算
    • 永続シグナル: persistent signal double posX, posY;
    • 伝搬はDBでのviewにあたる
      • 問題: 複合的なデータ構造を表現できない(例だとx,y別々にsinalを割り当ている)、同時であることの保証はプログラマの責任、、、、
  • Signal Classの導入で解決
    • 関係するsignalをまとめたパッケージみたいなもの
    • 同期とライフサイクルの単位になる
Vehicle mirror = new Vihicle("xx");
mirror.snapshot(slider.getValue());
Timer t= new Timer(v, 10000, v::setPosition); // push=based

[2021-02-24 16:12]

  • Q: 予期せずsignalになっていて負荷がかかってしまうようなことはないか?
  • A: modifierではなくannotationにする案もあったが、明示的に書くようにした。IDEのサポートで変数がsignalかどうかがわかるようにできるとおもう。
  • Q: でかいDB(機械学習の大きいデータセット数TBあるような)はいっぱつで作れなくて、アップデートに何日もかかったりするきに、リアクティブにできないか? 例えばデータセットのバージョンをv1からv1.1に上げるときにデータセットをつかった再計算をリアクティブにできないか?
  • A: signal classの実装変更の相当するか。今後の検討課題。
  • Q: signaljがno liftingということだがimplicit liftingとはちがうのか?
  • A: implicitといってもかまわない。liftingを意識する必要がない(言語的にはliftingを用意していない)。内部的にはliftingをしている。
  • Q: signalは適切な抽象化になっているということだが、プログラムの検証はしやすくなっているか?
  • A: あまり考えていない。
  • Q: signaljの実装はどうなっている?
  • A: source-to-source。RxJavaのランタイムをラップするかたちでつかっている。
  • Q: 分散RPでの検証はどうなっている? (DBのconsistencyがとれている前提で)
  • A: これからのテーマではないか。
  • Q: セキュリティ・プライバシーについて
  • A: クローズドなシステムでつかわれているだけなので、これからのテーマ。分散化がはじまったところなのでこれからのテーマか。

[2021-02-24 16:40]

Gfarmシンポジウム2020

IMG_20201009_130100IMG_20201009_130123

  • 案内
  • 参加登録
  • 日時: 2020-10-09 13:30〜
  • 場所: AP秋葉原 O+Pルーム (1F)
  • オンラインはWebex
  • togetter
  • (録画と資料は公開されるはず)

オンラインとライブの両方で開催。久しぶりに外に行きたい気分だったのでライブ会場の秋葉原へ。台風14号(チャンホン)接近中で一日中雨。

[2020-10-09 13:29]

  • 司会: HPCソリューションズ 河野
  • 参加者: 秋葉原15名、オンライン15名

[2020-10-09 13:30]

Gfarmファイルシステムの最新機能
筑波大学 建部 修見

  • ワークショップは2月に別府で開催。おなじくライブとオンラインのミックスで。
  • オーストラリアではLibre Solutions
  • 開発を始めてから20周年 2000年6月スタート 電総研と高エネ研のGRIDミーティングから
  • MTセーフ: 暗号化(EncFS)をサポートするのに必要だった
  • read only機能: zabbixでフェイルオーバするときにスプリットブレインを避けるためにメタデータがちゃんとつたわってるのをたしかになるまでread onlyにする。
  • githubに移行した(なかなかたいへんだった)
  • MPIでバーストバッファがつかえるようにもなっている(IBがつかえない環境もあるので) MPI-IOで高速化
  • gfarm2.8ではIPv6,S3,TLSがサポートされる予定。
  • (例年は建部さんの話が長いけど今年はずいぶん早くおわった)

[2020-10-09 13:43]

スーパーコンピュータ「不老」
〜大規模コールドストレージ導入によるデータサイエンス支援を指向したスパコン〜
名古屋大学情報基盤センター 片桐 孝洋

  • 「不老」2020-07-01正式運用開始
    • type1: 富岳の同型機をつかっている
    • type2: GPU型
    • type3: 大規模共有メモリ
    • 6PBの光ディスク コールドストレージ(ソニー) 100年保存
    • 湧き水でエコ冷却
  • 特徴アプリ: 台風と医用画像につよい先生がいるので
  • デジタルサイエンス
  • 名古屋大学は伝統的に富士通製
  • 5年サイクルでリプレイスしている
  • 国策スパコンとPCスパコンの二本建
  • コールドストレージ: 10PBまでキャパがあるけど4PBはユーザ持ち込みのためにあけてある。
  • 最大消費電力: 1.9MW
  • 湧き水: 夏でも18℃ 30リットル/分 ポンプで吸い上げて雨水としてすてていたのを冷熱源として利用
  • 2〜3℃さがる。
  • どのくらい効果があるかは計測中。2〜300万やすくなるはず。
  • 夏場の昼のピーク電力カットのためジョブの実行を抑制 12時間キューを用意して実装
  • でも今年はコロナで人が来てないので電力は逼迫しなかった
  • type1は富岳の1/70の規模
  • type2: nvidia V100、ssdもたっぷり、機械学習向き
  • type3: プリ処理(メッシュきったり)、ポスト処理(可視化)など
    • ストレージを共有しているのでポスト処理でデータの移動は必要ない
  • クラウドシステム: よくつかわれている(稼働率8割くらい)
  • ホットストレージ: HDD RAID 30PB 384GB/s
  • コールドストレージ: xxx
  • フロントエンド: ログインノード以外の利用も想定
  • 料金は前払い 優先キューはポイント2倍でつかえる
  • IORベンチマーク: /data/group1は一般、group2は大規模向け
  • 独自ベンチ: github/exthnet/iotest type2のlocal SSDがおもったより速くない type1のホットストレージがおそい
  • 気象 坪木先生
  • 医用 森先生
  • コールドストレージ操作ツール ODAPLUS
  • COVID19用: AIでCTで肺を正常か炎症かセグメント分け
  • 臓器のサンプルはあまりないので2つの臓器データ間を連続的に変形させて学習データにする
  • シミュレーションせずに機械学習で気象予想 相馬先生
  • コールドストレージ
    • ホットストレージ→コールドストレージはアーカイブ、 逆はリコール
    • 利用者支援室からホットストレージにデータ転送 計算結果をホット→コールドに転送
    • コールドストレージに直接光ディスクをつっこむのもあり
    • fibrechannelでフロントエンドにつながっている???
    • 光ディスクはwrite once
    • ドライブユニットは5しかないのでバッチで処理
    • 小さいファイルは固めて大きなファイルにしないと性能がでない
    • ディスクはセンターで買ってユーザが利用申請(早い者勝ち;ふつうに買うより安い) 利用終了したらカートリッジがもらえる

[2020-10-09 14:35]

[2020-10-09 14:36]

Prometheus ではじめる Gfarm サービス監視
— HPCI共用ストレージの1000日無停止連続稼働を強力にサポート —
理化学研究所 金山 秀智、芝野 千尋、原田 浩
東京大学 小瀬田 勇

  • 無停止でアップデート、2拠点間でデータ二重化、これにより連続運用ができるようになった。
  • gfarm zabbixプラグイン
    • アラートチェック
    • postgreSQL死活監視
    • データ完全性チェック
    • 設定情報の監視
  • 稼働率とデータ保護の両方を重視している
  • 現状: アラート検知→チケット起票→障害レベル判定→障害対応・緊急連絡・ユーザアナウンス
  • これを自動化したい
  • 監視ソフト: Prometheus、ダッシュボード: Grafana
  • ディレクトリ数、シンボリックリンク数、レプリカ数はコマンドで取得できないのでメタデータを直接参照
  • ユーザが利用してないときの障害は利用率にいれてない、タイムアウトも稼働率にいれてない、これはユーザ向けでない。
  • shibbolethの認証情報をつかってユーザ向のgrafanaを表示できないか。

[2020-10-09 15:08]

休憩

IMG_20201009_151951

[2020-10-09 15:30]

IO500 #1 DAOSアップデート
インテル株式会社 石橋 史康

  • DAOS デイオス
  • IO500で1位
  • Optane(オプテーン) Persistent Memoryが前提
  • dramとssdの中間的存在
    • dramとちがって永続性がある
    • ssdとちがってbyte addressingが可能
  • daosではup direct modeをつかっている (memoryモードではない)
  • posixとblockの問題を解決する
  • posixで書くときにブロックサイズにあっているわけではない
  • ブロックに複数のファイルが混ざるとロック待ちになる問題。

[2020-10-09 15:40]

webex調子わるい

  • バイトアドレッシング可能なので問題回避できる。
  • DAOSはlustreでつくっていた
  • バイトアドレッシングできる永続メモリをベースにアーキテクチャをつくりなおし
  • ふつうのファイルシステムというよりはオブジェクトストレージ
  • ちいさいデータ・メタデータはoptane persistentへ (interface:PMDK)
  • バルクデータはSSDへ (interface:NVMe)
  • ユーザ空間で動かすので性能がでる。バージョンアップも楽に。
  • posixでつかいたいときは dfuse(アプリ変更なし) or libdfs(変更あり)
  • libdaosがnative interface (KV-storeっぽいAPI)
  • apache sparkとかのAPIも用意する予定
  • lustreとnamespaceを共有するパッチを開発中
  • optaneはインターリーブきかせてつかうのがふつうなので障害に弱い → サーバごとにレプリケーションして回避
  • erasure codeも将来的にはサポートする予定
  • DAOSでデータのコピーを簡単に用意できるのでAIの学習で効果あり。
  • ソースコードだけでなくRPMでも提供
  • resources: https://github.com/daos-stack/daos
  • dramエミュレーションもある

[2020-10-09 16:00]

  • Q: IOR hardの性能はpersistent memoryはいいけどSSDはどうか?
  • A: libdfsをつかっているのでコードをかえている。persistent memoryをつかっている。
  • Q: スパコンのストレージを束ねるのに向いてるようにみえるが?
  • A: できるけど、CPUをつかうので計算の邪魔になってダメかも(検証してないけど)。ストレージサーバにするのがいいのでは?

[2020-10-09 16:07]

[2020-10-09 16:11]

DDN ExaScalerのさまざまな性能改善について
株式会社データダイレクト・ネットワークス・ジャパン 井原 修一

  • lustreベース
  • exascalerはソリューション名
  • lustre 2.10と2.12 がよくつかわれている (つぎは2.13)
  • パッチはアップストリームになげていて、プライベートなパッチはあまりない
  • 最近はシングルクライアントの性能も重視される (DGXみたいなファットクライアントがでてきたため)
  • strided single shared file writeは性能がでていない lusterのもんだいもあるがblockアドレッシングのもんだいもある byteアドレッシングにたいおうしたい
  • ページキャッシュのせいでネットワーク帯域がつかいきれてなかった???
  • データベースではO_DIRECT+aioがよくつかわれる (lustre 2.10はサポートしてなかった 2.12はAIOがつかえるけど同期モードでうごく)
  • gpfsとくらべてlustreはシングルスレッドの性能が低い問題 readaheadを並列化して改善 writeはまだ改善してない
  • lustre IB multi-rail構成だとネットワークをつかいきれてないことがわかった。
  • GPUダイレクト
  • 4x DNN AI400 --(16xIB-EDR) Mellanox (8xIB-HDR200)-- 1x GDX A100
  • CPUのアグリゲート帯域が100Gしかない問題を回避できる
  • CPU:シーケンシャル(fio): write 94GB/s read 107GB/s
  • GPU:シーケンシャル(gdsio): write 154GB/s read 178GB/s

[2020-10-09 16:38]

  • Q: strided-SSF-Hardで何をかいぜんした?
  • A: over stripe (OSTの数をこえてストライプできる) ロックのコンテンションを減らせた。 2.13で入る機能。
  • Q: byteアドレッシングでなにをやる?
  • A: プロジェクトredをやっている。deosにちかいアーキ。deosとちがって提供するサービスはブロックストレージ(kv-storeではなくて)。
  • Q: gpu direct はai トレーニングで流行りそう?
  • A: nvidiaとしてはやろうとしている。
  • Q: gpu directは?
  • A: ファイルシステムとしてつかえる。シャドーメモリとしてみえる。apiをlustreで実装するかんじ。

[2020-10-09 16:50]

[2020-10-09 16:51]

次世代のストレージ・ ファイルシステム技術
富士通株式会社 住元 真司

  • NGACI(次世代先端的計算基盤)でwhite paper執筆中
  • CXL: Compute Express Link
    • pcie 5から入る
    • キャッシュコヒーレンシあり
    • アクセラレータアタッチドメモリ
  • redfish
    • DMTF
    • IPMI KCSのおきかえ
    • サーバの管理
  • RPMA: remote persistent memory access
    • librpma
  • 次世代:
    • アプリケーション特化ストレージ
    • OSバイパス
    • オフロード
  • OSがクライアントとサーバで一体化したストレージになる?
  • computational network:
    • MPIで転置行列はストライドアクセスできつがバイトアドレッシングできるとうれしい。
  • LLIOのはなしはなし

[2020-10-09 17:31]

  • Q: persistent memory, cxlは富士通としてはどう?
  • A: 標準技術ははいるはず
  • Q: グローバルなファイルシステムはひつよう? ローカル(テナント的なのが)なのがあればよい?
  • A: daosみたいにがらっとかえるのもあるが、古いファイルシステムものこるはず。ユーザがえらぶ。

[2020-10-09 17:36]

クロージング

[2020-10-09 17:37]

懇親会

Journey×Journey 2号店にて。(参加者7名)

IMG_20201009_180642

リモートデスクトップで光学ディスクを焼く

コメント 2020-06-27 103319

久しぶりに出社して会社のPCで納品CDをつくろうとしたら、CD-Rを違うものに変えてみたりUSB外付けドライブをつないでみたり再起動したり何度試しても空CDが書き込み可能だと認識されずに壊れたCDと認識されてしまい焦った。

いろいろ検索してやっと原因がわかって、それはPCをリモートデスクトップ経由で操作していたということ。初期設定ではリモートデスクトップだと光学ドライブは書き込み不可になっている。おそらくリモートデスクトップでつないでいるのに物理的なアクセスが必要な光学ディスクに書き込みしようということはないだろうというフールプルーフだろう。

設定方法
  • ローカルグループポリシーエディターを開く
    • コンピュータの構成
    • →管理用テンプレート
    • →システム
    • →リムーバブル記憶域へのアクセス
    • →すべてのリムーバブル記憶域:リモートセッションでの直接アクセスを許可するを有効に
  • 再起動

いつもおもうことだが、期待した操作ができないときにどの設定が効いてそうなってるのかわかるような仕組みが発明されないかな。自分で作ったプログラムでさえ、しばしば調査は困難である。

新型コロナウイルス接触確認アプリ COCOA

ついに日本でも濃厚接触確認アプリの配布が始まった。アプリの名前がCOCOAというありきたりな名前なのが残念だが Contact Confirming Application の略だそう。バージョン1.0だけどプレビュー版という謎なバージョニングが気になるな。

オープンソースで開発されたようだ。

それとは別の接触確認アプリもあったようだ。

ちょっと前になるがアプリの概要を説明したビデオが公開されている。

このビデオとかいくつか資料を読んだ感じだと、かなりプライバシー重視で政府ができるだけ個人情報に触れなくて済むようになっているようだ。(だけど、寿命の長いIDがつかわれてたりして、実はちょっとあやしいかも)

さっそくAndroid版をインストール。

Screenshot_20200621-015053Screenshot_20200621-015112Screenshot_20200621-015131Screenshot_20200621-015152

インストールしたので起動。

Screenshot_20200621-015313Screenshot_20200621-015316Screenshot_20200621-015320

ちゃんと読んでないけど利用規約とプライバシーポリシーに同意。

Screenshot_20200621-015326Screenshot_20200621-015345Screenshot_20200621-015512

bluetoothをONに。問題はノイキャンヘッドホン WH-1000XM3 の接続をスマホからPCに切り替えるのにスマホのbluetoothをoffにする必要があるので、接触確認アプリのためにbluetoothを常時onにしておくのが難しいことだ。そういう残念仕様はソニーらしいところであるが、今回ばかりは非常に残念仕様である。

Screenshot_20200621-015517Screenshot_20200621-015524

通知もONに。

Screenshot_20200621-015618

設定完了。

Screenshot_20200621-015651Screenshot_20200621-015657Screenshot_20200621-015736Screenshot_20200621-015830

初期状態で権限がまったくなしで動作するようだ。

Screenshot_20200621-020048

現時点では陽性者DBがまだ動いてないので各スマホで接触情報を集めるだけのようだ。

[設定]→[Google サービスと設定]→[COVID-19 (新型コロナウイルス感染症) の濃厚接触の可能性の通知] でON/OFFの状態が見られるようだ。位置情報もONにしないといけないのか。位置情報は収集してないとかいてあるが信用するしかないのだなぁ。

Screenshot_20200622-131023Screenshot_20200622-131043

Kernel/VM探検隊 online part1

スクリーンショット (423)

[2020-06-06 13:30]

オープニング @satoru_takeuchi

  • 時間どおりスタート
    • ぐだる配信が多いなか、時間どおりにトラブルなく始まるのはすごい
  • zoomからyoutube liveの遅延が1分ほどあるのでリアルタイムはむり
  • 質問はtwitterでうけつけて、発表がおわったあとに回答する形式で

[2020-06-06 13:32]

Network Boot from Bell Labs / @retraga

  • 資料
  • 動画
  • pxe(ピクシー) boot, http bootの2つがある。
  • pxeはtftpサーバが必要
  • http bootはuefi2.5からサポート
  • httpsもつかえる
  • UEFIで3行で書ける。
  • UEFIでモジュールはプロトコルとよばれる。ネットワークのプロトコルとは関係ない。
  • simple file system protocolはデフォルトではFATしか対応してない。
  • rootkit: rkloader, LoJax はNTFSをあつかえる。
  • ネットワークFSがつかえるとうれしい。
  • そこで9P (Plan 9 File Protocol)
  • 9Pはつかわれている: v9fs, virtio-9p, WSL2
  • 世の中は9Pの支配下にある!
  • UEFIドライバ: 9pfsPkgをつくっている。
  • それだけだとおもしろみがない。
  • proxy bootをつくってみた: GCS(google cloud platform storage)のバケットをあつかえる。
  • gcsfuseをつかった。
  • bitvirorをロードできた。
  • あくまでもローカルファイルシステムにみえている。

[2020-06-06 13:58]

  • 質問なし
  • root fsは

[2020-06-06 13:58]

ipftrace: A Linux Function Tracer for Network People / @YutaroHayakawa

  • 資料
  • linuxのネットワーク機能のデバッグツール
  • 関数コールトレーサー
  • パケットの処理をトレースできる。
  • timestamp, cpu id, funcname, user defined data
  • ネットワーク機能はソースコードをよんでもわかることがすくない。
  • systemtap, bpftraceは手がかりがない状態だとトレースする対象を絞りにくい。
  • ftraceは楽につかえるが特定のドメインだけのトレースがとれない。
  • TCP 80版のパケットだけトレースをとりたい。
  • 関数トレーサ + パケット処理だけ + パケット単位で + スクリプトが書ける
  • sk_bufを引数にとる関数をすべてフックして
  • sk_bufにマークがついていたらログをだす。
  • DWARF or BTFで一覧を得る。
  • kprobeでフックしてeBPFをさしこんでperf_eventでログをだす。
  • マークはskb->markがあり自由につかえる。netnsをまたぐと消える(コンテナ内のトレースにつかえる)。
  • Luaで拡張を書ける: emit()->追加のデータをあつめるeBPFのバイトコードを吐く, dump()->文字列にする。
  • sk_bufは安定した構造体ではない問題: デバッグ情報をLuaから参照できる: iptf.offsetof,sizeof,typeof.
  • SRv6のデバッグにつかえた。

[2020-06-06 14:18]

  • Q: メモリが再利用されてskbアドレスがぶつかったら?
  • A: キャッシュのヒット率上げるために再利用するのでこまる。人間がみればわかるが。

[2020-06-06 14:21]

[2020-06-06 14:22]

コンテナ目線で考えるmicroVMとunikernelな構成の話 / @_inductor_

  • 資料
  • コンテナとは雑に言えばすごいchroot
  • dcokerがはやったのはdockerfileと配布技術がつかい勝手がよかった
  • runC: イメージを展開するおしごと
  • runCに特権が必要だけど避けたい→MicroVM(Firecracker:Rust製 by Amazon)
  • ホストOSをいじるかわりにVMをたてちゃう。
  • AWSではFargate。
  • リソース割当が柔軟
  • VMレイヤの起動オーバヘッドになる。
  • Unikernel: ライブラリOS
  • カーネルのレイヤをうすくする
  • IBM Nabla Containersでつかわれている。
  • 既存のdocker imageがつかえないので専用のイメージをつかう。
  • runnc -> hostos - SoloS - libOS - app
  • 環境を分離せずプロセスとしてつくられるので早い
  • 不要なカーネル機能をふくまないのでホストOSとの接点がすくない
  • gVisor: ...
  • kata container: コンテナがvmのうえでうごく
  • 結論: 課題がなければdockerでいいんじゃない?

[2020-06-06 14:44]

10分休憩

  • 表示されてる時計と比べると遅延は35秒くらいか。
  • 早送り再生するとライブにおいつけるらしい。しらんかった。

[2020-06-06 14:55]

俺の仮想マシンルーターがこんなに遅いはずはない / @tnishinaga

  • 資料: 未公開
  • トラブルで前録り動画を再生
  • 在宅ワークがふええてPPPoE IPv4がおそい、DS-Lite(v4 over v6)も速くない。ルータの性能限界。
  • devianをいれてKVM上で構築。
  • 速度低下は問題ないと予想していたが、そうでもなかった。
  • 物理ホスト上:
    • iperでNICスループットを測ったが問題なかった。
    • ブリッジでも問題なし。
    • パケットフォワードも問題なし。
    • ipip6 tunnelも問題なし。
  • VM上:
    • 6割程度の性能しか出てない。
    • 結論: 物理マシンをつかうのがよい。

[2020-06-06 15:19]

  • Q: 市販のルーターとLIVA Zとでランニングコストはどうちがう?
  • A: 測ってないけどファンレスなのでそんなに違わないのでは?
  • Q: VMにちょくせつPCIさわらせたら?
  • A: PCIeパススルーはいけそう、SRIOVは対応してなさそう(realtekなので)。

[2020-06-06 15:20]

[2020-06-06 15:21]

Architecture Overview of Fuchsia OS / @kurun_pan

  • 資料
  • フューシャ
  • Flutter: 言語Dartで UIフレームワーク。
  • Fuchsia: googleのOS。 Google Nest Hubでつかわれてるらしい。カーネルはZiron(linuxとはちがう)
  • far: Fushia archive
  • 各アプリはURLをもつ manifestあり
  • アプリはsandboxで実行される capabilityはmanifestに書く
  • FIDL(Fuchsial IDL): gRPCみたいなもの IPC用
  • Zircconはマイクロカーネルではない(モノリシック)。POSIX非互換だがlibcはある。fork,pthread一部はない。
  • Zirconにはhypervisorがはいっている。linux KVMにちかいかんじ。linux runnnerがあり動かしてみたが例外でおちてしまった。

[2020-06-06 15:33]

[2020-06-06 15:33]

RISCVマイコン情報アップデートと Tang FPGA試用メモ / @takeoka

  • 資料
  • RISC-Vが焼かれている 日本で2600円くらい
  • キャッシュはないが ITCM,DTCM (SRAM)がある。
  • ESP32はicacheぽいがlongjmpできない(大変残念)
  • PDP-11 セグメントをまたぐサブルーチン呼び出しはセグメントローダ経由が必要
  • IDEは中華製 あやしくはなさそうだが 念のためにVMでうごかした。

[2020-06-06 15:48]

[2020-06-06 15:49]

BCCをRubyからも使えるようにした話 / @udzura

  • 資料
  • eBPF
  • gdb,straceはptraceでシステムコールをおいかけるがプログラムが一瞬止まるのでパフォーマンス影響がある。本番環境ではつかいにくい。
  • perfは中間 ユーザランドの負荷が高まる。
  • bpftraceは副作用がすくない。
  • BCC: BPF Compiler Collection. Python,LuaのFFI経由でバインディングを用意している。
  • Rubyでもつかえるようにした。
  • BPFQL: SQLライクにトレースポイントを指定できる

[2020-06-06 16:03]

休憩10分

[2020-06-06 16:15]

HVFの中身 / @Mach0xFF

  • 資料
  • hypervisor framework
  • apple製hypervisor
  • kextをくみこんだ形 prelinkedkernel
  • kext: kernel module
  • XNU
  • machdepでマシン非依存のシステムコール

[2020-06-06 16:30]

  • "0x"を「ゼロエックス」じゃなくて「オーエックス」といってるとおもったら「Nought-X」だとのこと。

[2020-06-06 16:30]

Falling down from FreeBSD / @yamori813

  • 資料
  • FreeBSDは16MBのRAMと4MBのflashがあれば動くらしい。
  • YABM: mrubyをベアメタルで動くようにした。 yet another bare metal
  • ARMはMMUサポートないと35倍くらい遅いので(0を0にマッピングするのしかしてない)

[2020-06-06 16:41]

[2020-06-06 16:41]

HSEとは何か / @fadis_

  • 資料
  • 動画
  • heterogeneous-memory storage engine
  • KV store
  • ストレージエンジンはトランザクションを提供する
  • ファイルシステムとストレージエンジンの両方で構造化ログをもつ構造
  • FTL(flash translation layer)でも構造化ログ相当のものがある。
  • ログ構造化ファイルシステムはflashメモリにやさしい。
  • F2FSはログ構造化ファイルシステムを採用。
  • Don't Stack your Log on My Long: 構造化ログのつみかさねが性能低下
  • メタデータが各層で追加されていくため。
  • ブロックサイズが一致しない可能性。
  • TRIMしてない
  • 上のGCが下に負荷をあたえる
  • 酷いケースで書き込みが2倍にふえる。
  • mpool: ファイルシステムに似ているがVFSを提供しないカーネルモジュール。
  • mpoolはblock_idでアクセス 要アライン
  • mlogはobject_idでアクセス メモリはアラインしてなくてよい
  • mdc: gcできるmlog mlog2本使用 (copy gc?)
  • mcache: 上のレイヤがつかえるキャッシュ
  • kvdb:
  • 古典的SSD,zoned namespace(100MBオーダーのブロックでFTLの仕事を減らす),
  • dm-zonedが4KiBページをみせるもがある。

[2020-06-06 17:05]

  • Q: mpoolのアラインメントは自動?
  • A: 作成時にSSDのブロックサイズを指定する。(SSDがブロックサイズを公表してるのが前提)

[2020-06-06 17:07]

クロージング

[2020-06-06 17:08]

あたまおかしい発表があると観衆からおぉ〜って声があがるのがkernelvmのライブだが、オンラインだとその反応がtwitterだけなのがちょっとさみしい。

VEGAS Proの手振れ補正

vegaspro17動画編集には動作が軽いということでVEGAS Proをつかっているのだが、手振れ補正をかけようとしてもぜんぜん処理が進まなくてこれまで利用を断念していたのだが、ネットを検索してみたところ解説動画で「ウィンドウを最小化すると処理が進む」という回避方法がのっていてびっくり。最小化するとサクサクと処理が進む。やったね。レンダリングのときもウィンドウを最小化すると処理が速くなるので、なにか根本的な作りの悪さがあるのかもしれない。

やっとつかえるようになったので試してみた。手持ちで歩きながら撮った動画(GH4 + 12-35/1.2)はブレブレだが、スムージングを最強(10)に設定するとかなりぬるぬるした動きになった。GH4は4Kで撮るとローリング歪みがひどくなるのでピッチング方向(上下方向)のブレがひどいと動画に手振れ補正をかけたときに上下につぶれたりひきのばされたりして、ブレはとまっても絵がこわれてしまったのだが、補正方法をアフィンにしたらつぶれたりひきのばされたりしなくなった。

プレビューしながらパラメータいじってるとときどき手振れ補正が切れてしまうことがあって、なんか完成度が低いな。いちどクラッシュもしてるし。

iijlabセミナー: 狭義のTeXと広義のTeX、それぞれの進化

IMG_20190521_174225

午前中は酷い雨だったけど夕方にはやんでくれた。

IMG_20190521_174613

[2019-05-21 18:01]

  • 日本人の知らないTeX/八登崇之 at TeXユーザの集い2010 を読む前提知識を提供するかんじで。
  • クヌースがつくったTeXはもうつかわれてない。つかってるのはクヌースだけ。
  • XeTeXはジーテックとよむ。
  • LaTeXはいじらない方針だったけどTeX Live 2015からは変えていく方針になった。
  • TeXのレイヤー: 文章を入力する人/文章を組版する人/仕組みを開発する人
  • webに対応させると HTML/CSS/JS
  • いきなりマクロ言語のところをいじるのは無謀
    • コアの部分をいじろうとしてハマるパターン
  • 図を書けるようにした: TikZ/PGF
  • LuaTeX: JSでDOMをいじるようなことがTeXでできる。
  • XeTeX(2004),LuaTeX(2007)でUnicodeに対応した。それまでは8bit化されてただけ。
  • pdfTeXにinputencパッケージでエンジンそのままでUTF-8(ただしグリフは255文字まで)対応してしまった。
  • TeXは \foo というコマンドだけでなく文字もコマンンドとしてあつかえる。
  • CJKパッケージもおなじ戦略だが文字が256文字におさまらないので256文字でサブフォントとして対応。
  • フォントはコマンドできりかえる。
  • tfm: 昔はフォントは印刷所にしかなかったり。フォントの概要だけを納めたファイル。
  • コミックだと漢字はゴシック、ひらがなは明朝だったり、フォントをくみあわせる需要がある。
  • DVIもフォントを仮想化する -> VF
  • NFSS: LaTeXにおける抽象化: encoding,family,series,shape,size
  • fontenc
  • フォントの設定だけで4つもファイルを用意する必要がある。
  • システムフォントをつかいたかった -> XeTeX
  • 日本語ならBXjsclsパッケージをつかうとすべてそろう。
  • pxchfonというパッケージをつかうとDVIをハックしてフォントがえらべるようになる。

[2019-05-21 19:08]

  • Q: uplatexじゃなくても日本語はつかえる?
  • A: luatexでも日本語処理のパッケージがあるので使える状態になっている。
  • Q: 若者育成は?
  • A: 若い人もいる。ptexを開発している日本人は25歳。

[2019-05-21 19:11]

_1240217x

記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    ギャラリー
    • Primavista LONG-LASTING PRIMER FOR VERY OILY SKIN
    • Primavista LONG-LASTING PRIMER FOR VERY OILY SKIN
    • Primavista LONG-LASTING PRIMER FOR VERY OILY SKIN
    • Primavista LONG-LASTING PRIMER FOR VERY OILY SKIN
    • Primavista LONG-LASTING PRIMER FOR VERY OILY SKIN
    • Primavista LONG-LASTING PRIMER FOR VERY OILY SKIN
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード
    • ライブドアブログ