sw

Nextbeat Tech Bar:第一回ライブラリ開発について考える会

久しぶりに恵比寿で降りたかも。

P_20240524_183214P_20240524_183246

オープニング / @kmizu

19:06

  • 趣旨
    • ライブラリ開発における苦労話を共有したい。
    • 大体が暗黙知のまま
    • 書籍になってない
    • #NextbeatTechBar
  • 会社紹介

19:13

Rubyの標準添付ライブラリを開発する / @soutaro

19:15 リモート発表

  • gem = ライブラリ
  • RubyGem = ツール or ホスティングサービス
  • Bundler = インストール管理ツール Gemfileをよんで
  • なぜツールが2つあるのか? → rubygemがすごく古いから 2004年 mavenがでたあたり
  • bundler 2010年 5年間で必要なことがわかった
  • ライブラリ分類
    • embedded: 必須 Cで書かれている
    • standard lib: gemになっていない 歴史的に標準添付
    • deefault gems: core-teamが管理 openssl yaml
    • buldled gem: rubyをインストールするとはいるがruby本体との関係は緩い (bundled_gems)
  • rbs gemの開発
    • ruby 3.0からbundled gemsになっている
  • rbs: プログラムの型を表現する
  • rbs gemの中には組み込みの型が定義されている
    • rbsの定義はそのときのrubyリリース版のもの
    • なのでruby開発版ではCIのrbsテストが失敗したりする。
    • なのでプルリクエストを出しにくくなっている。
  • rbsをリリースしなくても最新rbsをcommit+pushしておけばCIでテストできて、それからrbsをリリースできるようになった。
  • rbs_skip_testsに書いておくとテストをスキップできるようにできる。

19:31

  • embededはrubyで書かれてないのでそのための解析機をつくるのはめんどくさい。

19:33

趣味のBlenderアドオン/ライブラリ開発で、Pythonエコシステムが想定する開発プロセスを無理やり導入する / @saturday06

19:33

  • キャラの物理テクスチャを共有する共通規格がない。
  • poetry/pyproject.toml
  • mypy --strict
  • blenderは一般的な書き方とはちがっててうまくとおらない。
  • bar: intProperty(main=0,...)
  • pythonの文法は簡単だからregexでがんばって回避
  • __init__.py
    • そのフォルダがパッケージになる。
    • どこでgit cloneするかでパッケージ名がかわってしまう。
  • blenderの型定義を書いた
    • 3000行になった
  • 3Dデータを不用意に公開してしまわないように工夫が必要だった
  • 一般人はgithubのページをみてもわからない
    • ファイルをへらしたreadmeブランチをつくって "download" をみつけてもらう。
  • blenderはZIPファイルのままでインストールしないといけない。
    • でも無意識にunzipしてしまう。。。
  • pull requestもらってもコードのクセがちがってマージしにくい。
    • そのままマージしてからlinter/formatterをかける。
  • github issueがそのサポートスレッドになってしまう。
    • 1issue=1バグにしてほしい。
  • バグ報告をgithubにだしてくれなくてdiscordに書かれてしまう。

19:51

  • libreofficeのバグを2chであつめて直してて粘着するひとがいて、それにくらべたら楽。
  • jarファイルも同じ経緯で拡張子を変えてて、おなじようにしてみてはどうか?
    • いまのところ変わらなさそう。
    • webstoreから入れる方向になりそう。

19:56

個人開発OSSが世界に勝てなかった話 / @yukinarit

19:56

  • pyserde パイセルデ
  • Rustのserdeはpyserde にインスパイヤされている
  • 証券会社: transportが multicastつかったりでgRPCつかえず → 自前
  • pydantic: データバリデーションライブラリ
  • なぜ勝てなかったか?
    • 1. 一人 vs 企業 開発力の差は問題ではないとおもっている
    • 2. 広報活動
    • 3. Rust スクリプトもRustで書くようになって pythonをつかわなくなった キャッチアップしなくなってしまった dogfooding重要
  • ドキュメントは英語で readme, tutorial/guide, API.
  • とことん自動化している CHANGELOG 作成も自動化している
  • 全部自分でやらない
    • OSS活動をしたいひとがいて、簡単なissueをのこしておくとやってくる。
    • Good first issueラベルをつけておくとよい。
  • プロジェクトの方針に合わないプルリクは入れない。
  • おもいきって互換性は捨てる。
  • 機能ごとの超簡単なexampleを作る。テストにもなるしshowcaseにもなる。
  • 無理をしない。家族優先にして空いた時間に。

20:15

  • github sponsorはまだ早いかなぁとおもってやってない。

20:17

(休憩)

ライブラリをパブリッシュせずにすばやく試す方法 / @exoego

20:31

  • ライブラリ開発でよく困ること
    • プルリクおくってもマージしてもらえない。
    • マージされたけどpublishされない。
    • forkすると、つかっている他のライブラリも対応しないといけなくなる。
  • maven centrall, npm, pypi, rubygems なしにつかえるといいなぁ。
    • 1. local publishする。CIはうごかない。
    • 2. gitリポジトリを指定する(とつかえるようにしてくれるツールがある)
      • VMのようなソースコードだけで動く言語ではないと
  • gitpackというツールがあるよ

20:40

SRE領域におけるライブラリ開発の取り組み / @sre_yamakita

20:40

  • site reliability engineering
  • 属人化させない
  • トレンドにながされない
  • バージョン管理はしっかりと SREはAPIよびだしが多くてバグると被害がおおきい

バニラJS開発ライブラリー事情 / @piro_or

20:46

  • 昔のfirefoxはJS注入になってて、静的解析しにくい。名前汚染とかも。

20:54

セキュアなライブラリ開発〜OpenSSFの取り組みについて〜 / @kamiazya

20:54

  • ts-graphviz
  • 依存関係の脆弱性
  • OpenSSF linuxfundation サプライチェーンの安全化
    • 1. OpenSSFガイド 資料集
    • 2. OpenSSFベストプラクティス バッジ
    • 3. OpenSSFスコアカード CLIツール

21:00

クロージング

〜21:01

懇親会

JS,TS,Rustとかいまどきの話ばかりで話の輪にバリアが...

懇親会終了まぎわにC++でもりあがってるところがあって、やっと話に入れたわ...

P_20240524_221110

ACRiルーム・ハンズオン【対面】:初心者限定FPGA入門セミナー

FPGAは会社の勉強会でだれかボードを買ってたような気もしたり(10年くらい前か?)、派遣の仕事で大きなプロジェクトでFPGAをプログラムするスクリプトをたたくのはやったことがあるが、FPGA自体をさわったことはまだなかったので、体験セミナーに参加してみた。

ひさしぶりに東工大 大岡山へ来たような気がする。P2P SIPとかPlan9の勉強会とかでちょくちょく行ってたのは10年ほど前になるのか。駅前でなにかイベントやってたけどスルー。

P_20240323_143820

正門を入ってすぐのところにきれいな建物ができててびっくり。

P_20240323_143855P_20240323_172155P_20240323_144317

受付で名刺が必要とのことだったが1枚もいらなかったとか、ACRiのアカウントを開設するのにメールを読めないといけないとか、ちょっとトラップあり。

利用方法はちょっとめんどくさい。

  • webからユーザー登録する
  • メールが届いて、サーバーのパスワードとACRiルームのパスワードが書いてある。
  • ACRiルーム(FPGA利用環境)の空きをさがして予約する。
  • 踏み台サーバーにsshでログインしてリモートデスクトップのポートフォワーディングする。
  • リモートデスクトップのクライアントを起動してACRiルームのデスクトップ(ubuntu)を開く。
  • Vivado起動

端末はMacだったので操作になれてなくて緊張した。キーボードも日本語配列だし。

P_20240323_144707

VivadoをつかってAND回路を実装する。手元にFPGAボードはないので入出力はVIOというのをつかってGUIで入力信号を変化させると出力が表示されるという仕掛。2入力のAND回路だけならすぐ終わるらしいがVIOがあるのでちょっとした時間がかかる。

メモ

  • ACRiは「あくり」とよむ。
  • Artyは3万円くらいの入門用でちょうどいい。
  • 試行錯誤してるときにビルド(っていうんだろうか?)が短時間で終わったら、ミスしてて最適化でごっそり回路が消えた可能性が高い。
  • XDC制約ファイルはベンダーが配布してる。

P_20240323_172415

USBの接続規格を調べる方法

bluetoothとUBS3が干渉するという話があって、今回買ったbluetoothアダプタはちゃんとUSB2でつながってるのか気になったので調べてみた。

Windows SDKのインストーラーからDebugging Tools for Windowsだけをインストールする。

スクリーンショット 2023-07-04 202758

"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\usbview.exe" を実行。ちゃんとUSB2でつながってた。

スクリーンショット 2023-07-04 235013

RootHubが1つしかないのは意外だ。

Windows11でオーディオデバイス名についた「2- 」を消す

Bluetooth USBアダプタをあちこち差し替えてたらオーディオデバイス名の頭に 2- がつくようになったキモいのでデバイスマネージャから 2- がついているやつを消しまくったら再ペアリングできなくなって詰んだかとおもったがBluetoothアダプタを削除してから物理的に刺しなおしたらすべて解決した。

たぶんこの手順でいけるとおもう。

デバイスマネージャを開いて(めっちゃ自然言語はむづいなってかんじる)「非表示のデバイスの表示」にチェックをいれる。

スクリーンショット 2023-07-02 233221

オーディオ関係のデバイスがぶら下がってそうなところを開いていって

スクリーンショット 2023-07-02 233304

2- がついてるやつとついてないやつをひとつずつ「デバイスのアンインストール」(Alt-A Alt-U)する(上の画面キャプチャではもう消した後なので 2- のやつはなくなってしまってるけど)。ひとつ消すと画面が再描画されて選択位置が先頭に戻ってしまうのでかなりめんどくさい。範囲選択してまとめてアンインストールできるといいんだけど。

スクリーンショット 2023-07-02 233452

BluetoothにぶらさがっているオーディオデバイスをぜんぶアンインストールしたらタスクバーのBluetoothアイコンからBluetoothデバイスの表示を選択して

スクリーンショット 2023-07-02 235306

Bluetoothアダプタを「デバイスの削除」。

スクリーンショット 2023-07-02 233106

あとはBluetooth USBアダプタを刺しなおせば作業完了。ペアリング情報は残っているようですぐに使える。

AWS Summit 2023

AWS Summitが幕張メッセで開催されて大学時代の友人がくるというので行ってきた。五反田→海浜幕張まで1時間11分。そんなに遠くないな。東京駅での山手線→京葉線のりかえは速足で6分くらい?

P_20230421_123121P_20230421_124314

会場。片方のホールはなぜか煙い。

P_20230421_124837P_20230421_130615

ぐるっと一周して何か見たいものがあるわけでもないので外に出てベンチでプアな昼食。朝からくるとタダ弁がもらえたらしい。お店で食べると高いし。まぁAWSのエンジニアくらい金もらってたら屁でもないんだろうが。

P_20230421_131751

せっかくなのでabemaの動画配信のセミナーをきいた。予約しておかないとみれないのかとおもってたら、どうも席があいてれば自由にきけるようだ。ちょっと用語がわからんかったけどメインの映像は5nine(99.999%)の信頼性を確保してるとかいってた。もともとcodec以外は自前で作り込んでたけど変化に追従するのがつらくなってきたとかでAWSにのっかってしまったらしい。まとめ記事→ABEMAの「サッカーW杯配信」が安定していた理由、CTOが明かすインフラの舞台裏 ABEMA Developer Confenrence 2023くわしく話してたらしい。

P_20230421_135919

ほんと暇だ... 各ブースではいろんなノベルティを配ってるけどビール配れや。

P_20230421_160827

さいごにサイレントセミナーをきいた。ホールにずらっとスクリーンがならんで音声はワイヤレスレシーバーで聞くというスタイル。ここではじめて受付でもらったイヤホンをつかう。音が小さいなぁとおもってボリュームをMAXにしても小さくて接触不良かとおもってグイっとプラグを押し込んだらいきなり爆音になった。どうやらグラウンドが浮いてたっぽい。f*ck

P_20230421_162424P_20230421_165901

スクリーンに映し出された映像がちょっと遅れてるので音声と同期してなくて違和感ありで、詰めがあまいな。

P_20230421_162528

ホールが煙かったのはこの演出のためだな。アマゾンは顧客優先というポリシーらしいが、この煙はいらんやろ。

P_20230421_161237

撤退。ぞろぞろAWSから帰る人たちと入れ替わりで野球観戦の人たちが駅からでてくる。時間つぶしにアウトレットを一周した。平日なのでお客もまばら。

P_20230421_171305

駅前で大学時代の友達と合流して飲み会。1軒目は鶏肉メインの居酒屋。

P_20230421_180108P_20230421_195625P_20230421_182305P_20230421_184629P_20230421_190050

2軒目は名前がおもしろそうだってことで入ったが、どうも若者向け安さが売りの店で雰囲気がおっさん向けではなかった。蛇口からお酒がでてくるセルフ。

P_20230421_213810P_20230421_201626P_20230421_202258

終電になんとか乗って帰宅。海浜幕張→東京→茅ヶ崎→上溝で2時間41分1518円。

nested Tmux

tmuxを入れ子にするとプレフィックスキー操作が煩雑になるのでこれまでつかわないでいたが、1つのリモートサーバーに複数のシェルを立ち上げたいときにいちいちsshログインするのはやっぱメンドクサイ。リモートでtmuxがうごいていればnew-windowやsplit-windowでさっとシェルを立ち上げられるのに。

tmux公式としては内側のtmuxでprefix2を設定するかprefix連打で対応しろってことだとおもっている。

ちょっと調べてみたがnested tmuxのイケてる実装はなさそうで、でもアイデアはこのnested Tmuxからいただいて、ちょっと作ってみた。

bind-key -n F7 run-shell 'NESTED=$(tmux show-option -v @nested); tmux set-option @nested "X$NESTED"; tmux set-option prefix None; tmux set-option status-style bg=red; test "$NESTED" = "" || tmux send-keys F7'
bind-key -n F9 run-shell 'NESTED=$(tmux show-option -v @nested); tmux set-option @nested "${NESTED#X}"; if test "$NESTED" = "X"; then tmux set-option prefix C-l; tmux set-option status-style bg=white; else tmux send-keys F9; fi'
bind-key F7 send-key F7
bind-key F9 send-key F9

set-option -g status-left "[#S]#{?@nested, #{@nested},}"

使い方

  • F7とF9がホットキーになっている。なぜF7/F9なのかというと、HHKBだと押しやすいから。ちなみにHHKBのFnは左Altにしている。
  • F7をおすと外側のtmuxのprefixが無効化されてprefixキーが内側のtmuxに直接届くようになる。
  • F9を押すと外側のtmuxのprefixが有効になる。

問題点

  • prefixは外側と内側で同じになってる想定。ちがってても動くけど。
  • prefix,F7,F9,bg=が決め打ちなのはダサい。
  • F7連打すると最内側のシェルにF7が貫通する。
  • マウスでwindow/paneの移動をされると厄介。

Kernel/VM探検隊online part6

オープニング / nekomatu(主催者)

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

FPGA Subsystem in Linux Kernel / Masanori Ogino

  • FPGAのくみあわせ: CPUとバス接続、FPGA上にCPU(ソフトコア)、パッケージ(SoC)
  • drivers/fpga 12000行
  • fpga manager: プログラムの抽象化
  • fpga bridge: プログラム中の安全をまもる仕組み
  • fgpa regeon: フレームワーク
  • Q: partial reconfigはできるか?
  • A: partialはむつかしい→ライブでソースコード探検→デバイスによるが管理できそう
  • tokei: https://t.co/bAmHhEuR6k
  • Q: fpgaデバイスはcpuからどうみえる?
  • A: デバイスドライバしだい。pciのレジスタだったりgpuっぽくみえたり。
  • Q: fpga subsystemはどうつかわれている?
  • A: pciのようにprobeするのではなくてdevice treeの機能の提供とか、reconfigの統一(それまではベンダー固有のツールが必要)(でもまだメジャーなdistributionには入ってない)
  • u-dma-bufとudmabufはデータのながれる向きが逆
  • 低位合成: レジスタ、配線、ロジックを書くとFPGAの回路が出てくる
  • 高位合成: circt.llvm.org: PyTorch→ MLIR→systemc, systemverilogが出てくる

Ethernetのお話 / Hiroki Mori (yamori813)

  • XEROXが原型をつくってIEEEが承認したかたち
  • MAC,PHY,Trans,RJ45で構成される
  • etherヘッダは14バイトなのでIPヘッダが4バイトバウンダリにならないのでこまる。
  • switch接続の形: スイッチのPHYを本体のMACでつなぐものや、スイッチのMACと本体のMACをつなぐものも。
  • FreeBSDにはetherswtichがある。

「QEMUのバグを見つけてパッチを送った話」 / だいみょーじん

  • 自作OSをQEMUでうごかしていたらGDBをアタッチしてレジスタをみると値がおかしい逆ハイゼンバグに遭遇。
  • gdbにgdbをアタッチして調査
  • gパケットがqemuからgdbに送られてくる。
  • gパケットの構想はXMLで記述されていてqemu→gdbに送られている。
  • XMLの記述が矛盾していた。
  • gパケットの仕様ではレジスタの相対指定が正しいがqemuは絶対位置指定で送っていた。

休憩 10分

「低レイヤーから始めるGUI」 / Fadis

  • GPUの2つの機能: メモリの内容をディスプレイに送るののと計算。
  • RRM/KMS: 複数のレンダーノードが計算できるが表示はプライマリノードしかできない(Xサーバはプライマリノード)。
  • アプリが1つならプライマリノードで描画できる。
  • サーフェスは2画面以上用意されている(ダブルバッファリング用)
  • UIの基本形: 長方形、画像(長方形にテクスチャをはっただけ)、文字、記号(ベクトル)
  • インスタンシング: こまかい要求をなげるとGPUがひまCPUはいそがしくなるので、メモリにまとめてかいとく。
  • GPUでベクタ画像をレンダリングするのはなかなかむつかしい。
  • でも極端なサイズで描画されることはすくないので三角形に事前に分割してしまう。
  • 生成したglTF(json)の確認にはblenderがつかえる。
  • フォントはトポロジがちがうのでインスタンシングはつかえない→インダイレクトドローをつかう。
  • HarfBuzz: 文字列からグリフの置き場所をおしえてくれるライブラリ.
  • ICU: UBIDI: 文字の向き(LTR, RTL)を判断するライブラリ
  • ICU: UBRK: 折り返しできる文字列を返してくれる。
  • ubidi→ubrk→harfbuzz→折り返し処理
  • 文字: 1em, offset(カーソルから描画する位置の指定), advance(カーソルの移動量)
  • 入力はlibinput
  • xkbcommon: キーボードレイヤを指定するとキーの位置から文字がわかる。
  • 日本語はdbusでfcitx(ファイテックス)で。
  • 未実装: 半透明、縦書き、アンチエイリアス、OpenType、sdbus(LGPL)、RaspberryPiでクラッシュ
  • 2ヶ月でつくった。
  • VulkanはGPUを直たたきできるAPI。
  • VulkanはOpenGLの下半分という認識。OpenGLは古いので上半分はエミュレーションレイヤになっている。
  • VulkanはむつかしいAPIなので簡単につかうにはOpenGLが今でも便利。
  • アラビア文字ではコードポイントの置き換えが必要になってくる。どこかで処理が必要...

「Zigはうっかりコーディングミスを絶対に許さない!」 / @tetsu_koba (小林哲之)

  • Zig言語: 静的型付きのコンパイル言語。C言語に今までの知見で再構成したもの。
  • 5分でざっと理解するZig言語: https://zenn.dev/tetsu_koba/articles/2da58bd66586aa
  • うっかりミスをふせぐ: 自動チェック & アノテーション
  • a +% b とかくとオーバーフロしたときにエラーにならずwraparound。飽和演算もある。
  • 関数引数はimmutable。
  • グローバル変数をローカル変数でshadowingは禁止。
  • 未使用引数は明示的にすてないとだダメ。
  • zigはひよったりしない。
  • 夏ごろに流行った。

「機械語で書くRuby処理系のその後」 / monochrome

  • monoruby: rubyのrust実装
ruby->ast->bytecode->interpreter
                   ->JITcompilier
  • クロージャをつくるとローカル変数がスタックからヒープに移動してフレームからのポインタがつけかわる。
  • ループはLOOP_START,LOOP_ENDというバイトコードでかこまれている。
  • 再コンパイル: JITコンパイルするときに実行されてないブロックがあると型情報がないのでコンパイルできず単にインタプリタを呼ぶだけのコードを入れる。数回通るとJITコンパイルが再実行される。
  • CRuby 3.2.0-yjit デフォルトでJITはオフになっている。
  • 再コンパイルで枝だけをコンパイルするのは難しいのでメソッド全体をコンパイルしなおしている。
  • rubyのスタックとCPUのスタックを両方ハンドリングするのはむつかしいのでCPUスタックに統一している。
  • JITコンパイル: いらなくなったコードを消す部分が本来は必要。
  • JITに対する攻撃 jit spraying

休憩 10分

「異世界人のためのOSを作っていく(long version)」 / hsjoihs

  • 架空世界創作をやっている
  • 文字、発音、ゲームがある。
  • 低レイヤからアセンブラとかつくっていたが他人の関心をひけないので高レイヤからせめてみる。
  • グラフィカルシェルをMikanOSの上に移植したというかたち。
  • デスクトップのアスペクト比を1:√2に
  • デバッグビルドすると表示はasciiになる。
  • 時刻の異世界設定はある。物理法則はおなじ設定。
  • Rui Ueyama compilerbook any% 縛り実況
  • 縛り実況: 設定を追加してゲームをむつかしくする
  • 初見実況: はじめてのゲームを前提知識なしに。
  • 「低レイヤを知りたい人のためのCコンパイラ作成入門」をゲームにする。
  • 縛り: アセンブリではなくてELFを出力する、フォーマットを調べすぎてはいけない、ふたりで交互に実装することで可読性を担保
  • アセンブリでコードを書いてコンパイルしてstipしてcmpして吐くELFのテンプレートにする。
  • アセンブラ・リンカがいかに複雑な仕事をしていたかわかった。
  • ふたりでやるとやりすぎて学業がおろそかになるのを回避できる。
  • 異世界OSの実演
  • 異世界ボードゲームの実演

「俺ASICと俺CPU "松竹V(しょうちくぶい)"」 / takeoka

  • OpenEDA, OpenLANE
  • ロジック部の開発フローはかなりOSSがある
  • PDK(半導体プロセスの制約条件)
  • GAFAはFPGAは遅くて電気をくうのでデータセンター利用は避けがち。
  • エッジコンピューティングのアナログ混載も視野か?
  • GNU Prologは論理推論で必要(世界でこっそりつかわれている?)
  • ハードウェアマルチスレッド (OS不要)
  • ハードウェアセマフォ
  • LR/SC もある
  • ROS2もハードウェア実装 (かなり小さな資源で実現できる)

音をアレする / KOBA789

  • ミキサーは世紀末半導体不足のため金で解決しない(しかも高い)
  • デジタルミキサーをつくるのはたいへん
  • USB Device Classes: 汎用デバイスの規格群
  • USB Audio Class:
    • terminalという概念がある
  • I2S: デジタル音声規格
  • サポートターゲット 13種類
  • apt-get install gcc-aarch64-linux-gnu でクロスコンパイラがふつうにはいる
  • gdb-multiarch でリモートデバッグ
  • PC相対で飛べないとき: range extension thunkを生成して経由する。 ベニアとかいってり
  • ARM32: ARMとThumbモードの切り替えはjumpのついでにやる。アドレスのLSBがThumbの区別になっている。リンク時にモードきりかえあり/なし命令が決まる。
  • SPARC64はCALL はMSB 01 でアドレスに30bitもつかえる。アドレスLSB2bitはアラインされていて00なので実質どこでもとべるが、命令の1/4の空間をcallにつぶしてしまったのは良いトレードオフだったかは不明。
  • RISC-Vは移植難易度が高い。range extension thunkとは逆のやりかたで近いときはリンカがjump命令を短かくする。
  • 64bit PowerPC ELFv1: では関数ポインタは関数のアドレスと%r2(GOT)のタプルになっている。
  • SH-4: ドキュメントが貧弱でまちがいもおおい
  • リンカ移植はCPUに詳しい人にまかせるよりリンカの作者がちょっと勉強して移植するのが速い。
  • MIPS, PA-RISCは標準から逸脱していて移植がむつかしいが。
  • 要望: PC相対load/store命令は必ず必要。
  • moldのプログラムはテンプレートになっているのでターゲットごとにインスタンス化される。
  • C++20の機能をつかってエレガントに移植できるようになっている。
  • ほかのリンカが複雑なのはベンダーが個別に移植しているのでどうしてもコードが増える。
  • ubuntu,suseがサポートしているarchはmoldでもサポートしたい。どのarchもサポートしていると(自動ビルドの関係から)採用してもらいやすい。
  • moldの移植コード400行が資料としての価値がでてくる。
  • 有償版: sold
  • modl: githubスポンサー $3500/月

クロージング

  • 次回4月中頃の予定

BitVisor Summit 11

東大柏キャンパスはまだ行ったことなかったので、せっかく現地参加ありなので行ってみることに。しかし遠いな。上溝から東大柏キャンパスまで片道2.5時間。交通費も片道1500円弱。(産総研つくばだと東京駅から産総研前まで高速バス一本でいけるので便利がいいんだが)

P_20221207_111132

柏の葉キャンパスから東大まではシャトルバスで。「図書館に行きます」と行ったら乗れた。

P_20221207_112702P_20221207_113820

P_20221207_114905P_20221207_115049

1時間前に着いたので食堂「プラザ憩い」で日替わりランチ(590円)。混雑してるかとおもったら案外空いてた。食べおわったあと、となりの食堂「カフェテリア」をみにいってみたらこっちは行列ができるくらい混んでた。ぱっとメニューをみたかんじこっちの方がボリュームがあるからかな。

P_20221207_120923

現地参加7人。

[2022-12-07 13:00]

開会挨拶 / 品川 高廣

  • armがでてきたのは時代のながれ
  • bitvisor論文(VEE'09)は参照数がここ1,2年で増えてきた。セキュリティ関係か。

P_20221207_130430

[2022-12-07 13:09]

BitVisor 2022年の主な変更点 / 榮樂 英樹(株式会社イーゲル)

  • nobody cared問題の対応
  • intel nic e1000e
  • broadcom nic
  • PKRU state
  • moveabs
  • DMA_...
  • earlyprintk
  • msgregister
  • NVMe ANS2
  • NVMe namespace
  • SQLiteの時刻
  • https://bitvisor.sf.net
  • 新機能としてはearlyprintkくらい。
  • TEEとかSGXとかSEVとかVMMでは対応が必要?
    • VMMがなにかしようとしない限りはなにもしなくてよいはず。
    • いまのところ用途がおもいつかない。
    • メモリがどうつかわれるかはbitvisorからはわからないし。
    • single vmなら暗号化するのありかなぁ。(考えてないわけではない by 品川)

[2022-12-07 13:38]

[2022-12-07 13:40]

BitVisor on Aarch64 / Ake Koomsin(株式会社イーゲル)

英語リスニング能力ゼロなので雰囲気だけ感じた

  • demoあり

[2022-12-07 14:16]

  • QA

[2022-12-07 14:22]

休憩

[2022-12-07 14:32]

Thin Hypervisor on AArch64 / 森 真誠(産業技術総合研究所)

MilvusVisor 今年の進捗

[2022-12-07 14:51]

  • 高速リストアでPOSTとUEFI初期化がなくなってFX70ではブート時間が半分になった。
  • 性能としては高速リストア(カーネルの入れ替えはできない)とkexecとの比較
    • 高速リストアの目的としてはユーザがkexecでカーネル入れ替えても元にもどせる。
  • SIGOS 9月 http://id.nii.ac.jp/1001/00220014

[2022-12-07 15:00]

[2022-12-07 15:01]

BitVisorであやつるコンテナネットワーク / 中田 裕貴(さくらインターネット株式会社)

  • スライド
  • sandbox
    • kata: 起動が遅くなる
    • gvisor: アプリがおそくなる
  • sandbox tailoring
    • アプリにあわせて隔離する(過剰にならないように)
  • subaco: ネットワーク隔離
  • TCPは性能が落ちないがUDPはけっこう落ちる
  • nginx,memcachedはsubacoで速くなる(隔離の範囲が狭いから当然ともいえる)
  • virtio-netがスケールしないとコンテナ隔離でつかえない

[2022-12-07 15:31]

  • busをふやすのはpci bridgeをつくる時間がなかった
  • 基盤系の研究は有用性を示すのはけっこむつかしい
  • bitvisorのvirtio-netはメモリコピーを盛大にやっているが、subacoではいろいろコピーを削除している。

[2022-12-07 15:39]

[2022-12-07 15:40]

閉会

トイレにいったら帰りシャトルバスがちょうど行ってしまったあとだったので1時間弱ちんたら仕事して時間つぶしするなど。

P_20221207_160913P_20221207_163954

帰りのシャトルバで 先を告げよう と「駅に行きます」といったらハァって顔されたので「図書館です」っていったら何とか通じた。シャトルバス運行案内シャトルバス時刻表にちゃんと帰り方を書いておいてほしい。

P_20221207_170049

P_20221207_170152

Gfarm/実用アプリ・シンポジウム2022

  • 日時: 2022年10月28日(金) 13:30〜18:20
  • 場所: AP秋葉原 5階Aルーム + オンライン(zoom)
  • こくちーず
  • 公式

P_20221028_133837P_20221028_133930P_20221028_133946P_20221028_134119

[2022-10-28 14:00]

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

  • 資料
  • 2000年から開発しているので22年
  • JLDG,HPCI共用ストレージ(富岳),NICTサイエンスクラウドで実運用されている
  • nextcloudコンテナ gfarmを外部ストレージとしてあつかえるようになった
  • gfarm-s3-minio S3互換サービス
  • wsl ubuntu上でmountするとexplororからもファイルがみえるので便利
  • winscpでS3アクセスするデモ
  • GSI(代理証明書)はサポートがおわっている(コミュニティーベースに移行)のでOAuth/OIDCをつかうように。
  • 完全性:サイレントコラプションとおもわれる事象はいくつか起きている。

[2022-10-28 14:23]

  • Q: gfarmをwslでmountするとは?
  • A: ubuntuにgfarmのクライアントを入れてgfarm2fsでマウントされる。

[2022-10-28 14:26]

[2022-10-28 14:27]

Delivering Supercomputing File System Performance on Oracle Cloud with WEKA / Oracle Corporation Clifford Patterson

WEKA on Oracle Cloud Infrstructure (OCI) Overview / ORACLE

  • 発音: ワカ ウェカ
  • Gen2 arch: L2 virtualization, RDMA, ...
  • low-latencyを要求したりio-intensiveなアプリはオンプレに残っていた。
  • ホワイトペーパー: weka-on-oci.pdf
  • posix, nfs, smb, s3, k8sプロトコルをサポート
  • single name space
  • s3でデータを保存してposixでアクセスするとか

[2022-10-28 15:12]

  • Q:建部さん2つ質問
  • A:
  • Q:住元さん MPI-IO HPC support?
  • A:

[2022-10-28 15:21]

[2022-10-28 15:22]

研究データ管理のためのストレージシステム / NII RCOS 下山

  • 2015年オープンサイエンスに関する検討会からスタート
  • 第6期科学技術・イノベーション基本計画(2021年)
    • データポリシー策定率・メタデータ付与率100% 2025年までに
  • 研究者にとって余計な作業→必要な作業に転換してストレス削減
  • GakuMin RDM: 研究データ管理基盤
  • e-Radにひもづけ メタデータ15項目
  • データを作成したコードの管理
    • データ解析をjupyterでやる
  • 標準ストレージだけでなく外部ストレージ(public cloud, private cloud)で研究データを保管したい。
  • 外部ストレージ連携: Waterbutler
  • 標準ストレージの統計: 1MB以下のファイルが全体の80%をしめる。中央が128KBくらい。
  • WaterButler,Gfarm, iRODS, Globus?

[2022-10-28 15:53]

  • Q: 建部さん、研究データはどういうものだとおもっているか? 素粒子とか遺伝子とか。
  • A: 素粒子とか遺伝子とかはすでに必要性にせまられて整備されている。既存の管理システムと連携する必要がある。
  • REST APIだから大きいデータを置こうという気にならないだけかもしれない。
  • Q: 海外連携は?
  • A: gakunin rdmに関していえば、利用できるのが国内の研究機関(と共同研究しているところ)のみという約款になっている。
  • Q: 住元さん、さいきんつかいはじめている。mdx
  • A: gakunin rdmのデータを外に公開する機能はまだない。
  • オープンデータとの関係
  • Q: 東大 塙

[2022-10-28 16:04]

休憩

P_20221028_160823

休憩からもどったらPCのバッテリが切れてメモとれず。まさか席に電源がないとはおもわず延長ケーブルをもってきてなかった。アナログ筆記具ももってきてなかった。スマホ+HHKB+モバイルバッテリの組み合わせにしておけばよかったと後悔。

[2022-10-28 16:16]

キオクシアSSD最新テクノロジーと今後の取り組み / キオクシア株式会社 瀬戸 弘和

  • 不揮発メモリはまだ実用段階にない。
  • Q:容量そこそこで速いやつ・安いやつがほしい。
  • A:SLCからMLCに代わる製品があるが同じ性能で安価になる。

京都大学新スーパーコンピュータシステムの構成と導入アプリ検討 / 京都大学 深沢 圭一郎

  • 資料
  • 絶賛トラブル中らしい。

Pegasus ビッグメモリスーパコンピュータではじまるこれからのデータ科学・ビッグデータAI / 筑波大学 建部 修見

  • 資料
  • CHFSをつかったキャッシュ
    • 一貫性を緩和してメタデータサーバなしで性能を出す
    • 入力データはジョブ実行中に変更されない
    • ジョブの新規エントリ作成は成功する
    • ジョブが既存ファイルを更新するときは読込んでから
    • 更新はフラッシュするまで反映されない
    • フラッシュはジョブ終了までには行われる
  • CHFSは(メタデータサーバがないので)ファイルサイズを管理してない。分散ハッシュのレンジクエリでチャンクをかきあつめて計算するしかなく遅い(ls -lすると死ぬ)

クロージング / 塙

懇親会

ひさしぶりだぁ〜

P_20221028_184823P_20221028_192134P_20221028_202846

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]

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

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

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

    タグ絞り込み検索
    ギャラリー
    • ウヰルキンソン・ジン 37°
    • ウヰルキンソン・ジン 37°
    • 今日の練習 2024-06-14
    • 日傘 3本目
    • 日傘 3本目
    • 日傘 3本目
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード