sw

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]

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

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

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 ということまでは覚えていなかった。

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

    タグ絞り込み検索
    ギャラリー
    • 今日の練習 2024-03-17
    • zozo: いつでも買い替え割
    • zozo: いつでも買い替え割
    • zozo: いつでも買い替え割
    • zozo: いつでも買い替え割
    • zozo: いつでも買い替え割
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード