Milk-V Vegaを買った

Milk-VからRISC-Vを搭載したL2スイッチが出るということで購入してみた。 10Gポートが2つしかないがとりあえず自分の環境ではサーバとデスクトップ用で十分だ。 購入はAraceを使ったが春節なのとFedexだが途中までは4pxを経由したので、注文してから届くの…

Reverse Engineering x86 Processor Microcodeを読んだ

この頃、Zenbleed、Inception、Downfall などのプロセッサーの脆弱性が話題になっている。 これらの脆弱性にはベンダーからの microcode アップデートで対応できると言われている。 はて、microcode とは何だったか。なんとなく雰囲気はわかっているものの勉…

X470D4U に OpenBMC を移植する

はじめに ASRock Rack から発売されている X470D4U に対して OpenBMC を移植した。 X470D4U は IPMI 機能を搭載しており、管理用イーサネットポート(またはホスト共有ポート)を通じて Web ベースの管理インターフェースにアクセスできる。 こうした機能は…

ublk ドライバを試す

Linux の 6.0 では Userspace block device driver(ublk driver)という機能が追加された。 名前の通り、ユーザーランドでブロックデバイスを実装するためのドライバになっている。 ドキュメントは以下にある。 https://github.com/torvalds/linux/blob/v6.0/…

nftables メモ

nftables は iptables と比べて色々変わっているのでメモ。 ドキュメントは man と wiki を読んだ。 ruleset はカーネル内に存在する nftable のすべての情報を書き出す。iptables-save に相当するもの。 table はチェインやセットなどを保持するためのコン…

Arch Linuxでath10kドライバーを使って11acフルチャンネル対応したAPを立てる

Linuxを利用して、11acに対応したAtherosのWiFiモジュールを使って、全対応チャンネルを有効化したAPを建てる方法を記録しておく。 ここで記載する内容は、カーネルバージョンやコンフィグレーションに強く依存するため、他のバージョンなどでは動作が異なる…

Pin/Unpinについて

Rust の async 周りでは Pin/Unpin というものが使われている。 ユーザーレベルでは、直接使うことは少ないが、ライブラリ使用時にトレイト境界を書くときとか、自前でコンビネータを書こうとすると理解する必要がある。 ということで自分が理解した範囲の P…

リンカースクリプト入門

RISC-Vのベアメタル環境向けに実行ファイルを作りたかったが、 どうやってコードの配置を行うかわからなかったので、 既存のリンカスクリプトを参考にしつつリンカスクリプトを調べてみた。 参照するのは riscv-test-env に入っている、 ベアメタル環境向け…

Mellanox ConnectX-3 VPIのセットアップ

サーバ、クライアント間の帯域を上げたくて、Mellanox ConnectX-3 VPIをセットアップした。 入手したのはMCX354A-FCBTで、スペック上40Gの帯域がある。 購入は、ebayでbrand newのものが送料含めて7000ほどで買えた。 また、接続用のケーブルはfiberjpで汎用…

FOSS でハードウェア開発を行う

ハードウェア開発につかうツールチェインはベンダー製ソフトウェアが多いが、 利用する FPGA によっては FOSS ツールチェインでも可能なようだ。 Fomu に載っている iCE40 はビットストリームの解析が完了しているため、 すべての工程を FOSS ツールで完結で…

Fomu 事始め

USBスロットに収まるサイズののFPGAデバイスで6000円ぐらいでCrowd supplyで購入できる。 自分の場合はストックがあったので、発注してからUPSで3日ぐらいで届いた。 搭載しているFPGAはLatticeのiCE40UP5kというものを積んでいるらしい。 全然わかっていな…

CMU 15-445 Logging Protocols + Schemes

バッファプールの書き出しは2つのポリシーに分解できる Steal はコミット前のデータを書き出すか Force はコミット時にダーティなデータを書き出すか Shadow paging master copy と shadow copy を作って、書き込みを shadow に行い、commit 時にスワップす…

CMU 15-445 Multi-Version Concurrency Control

MVCC は複数バージョンを持つことで、writer は reader をブロックせず、reader は writer をブロックしない writer がロックを取っていても reader は前のバージョンを読めば良いのでブロックされない 逆に read していても writer は新しいバージョンを作…

CMU 15-445 Timestamp Ordering Concurrency Control

Timestamp Ordering Concurrency Control optimistic な方法 2PL がロックを使ってserializableになるのに対して、serializableでないならアボートしてリトライする トランザクションの実行時にタイムスタンプをふって、自分が触ったオブジェクトが、より新…

EFI system partition を拡張する

EFI system partition(ESP) の容量が足りなくて、ファームウェアアップデートが失敗したので拡張した。 今回は、ESP の後ろに別のパーティションが存在し、そのままではパーティションのサイズ変更ができなかった。 そのため、ESP を空き領域に作り直して内…

CMU 15-445 Two-Phase Locking Concurrency Control

dependency graph はスケジュールを与えられたときにserializeかどうかを判定する方法 クエリをserializeに実行するにはどうするか? lock を使う 2 Phase Locking grow phaseとshrink phaseがある 前者ではロックを取ること、後者は開放することしかできな…

CMU 15-445 Concurrency Control Theory

トランザクションの性質としてACIDがある 一番簡単な方法はシングルスレッドで実行して、データベースファイルをコピーして、書き換えてスワップすること Aを守る方法としては shadow paging と logging がある schedule について serial schedule とはトラ…

The Ubiquitous B-Treeを読んだ

B+-Treeのデリート時のロジックがいまいちわからなかったので、B+-Treeに最初にフォーマルに言及したというこの論文を読んだ。 この論文自体はサーベイみたいな感じで、B-Treeのアルゴリズムやそのバリエーションなどを記載している。 複数ユーザーが平行に…

CMU 15-445 Query Optimization

query rewrite rule based optimizer 一般に可能なクエリの書き換えを行う selection は可能な限り先に行うと上で扱うデータ量が減る cost based optimizer 実データをもとにクエリプランを考える データの分布を一様分布として扱うと楽だけど実際はそんなこ…

CMU 15-445 Joins

特にequal joinを扱う N =num of outer table blocks, M = inner nested loop join simple nested loop join outer table のタプルごとにinterのblockを舐める block nested loop join outer tableのblockごとにinterのblockを舐める 仮にouterを保持してお…

CMU 15-445 Sorting + Aggregationsのメモ

データがメモリに収まらない場合を想定する Sorting 結果セットをページ内でソートしてディスクに書く 2つのソート済みページを取り出して比較してページを埋めて、溢れたらディスクに書く 利用するページは入力2つ、出力1つで3ページしか使わない Aggregati…

CMU 15-445 Query Processingのメモ

processing model iterator/volcano model タプルを一つ一つ返すモデル materialization model 一気にデータを返すモデル vectorized model バッチでデータを返すモデル optimization zone map page内のタプルにアグリゲーションを予め行ったページを記録し…

CMU 15-445 Hash Tablesのメモ

ここ最近のRDBはhashに次のものを使っている murmurhash cityhash farmhash clhash static hashing linear probe hashing コリジョンがあればその後ろの空きスロットを使う robin hood hashing 自分が入りたかったところからいくつ追い出されたかの値を持っ…

CMU 15-445 Buffer Poolsのメモ

buffer poolの要素をframeという in memory heap file の page がそのままメモリに乗ったもの page table は in memory データ構造で page id から frame を参照するもの 複数スレッドから触るので適切に pin する コンテンションになりやすいのでよく分割さ…

CMU 15-445 Database Storage Iのメモ

ハードウェアページは典型的には4kb この単位で書き込む場合、all or nothingで書ける DBのファイルはheap fileをよく使う ページ単位で読み書きできるAPI heap fileの実装はpage dictionaryをよく使う link listだと効率が悪い page layoutはslotted pageを…

systemd-resolvedで特定ドメインのDNSSEC検証を無効にする

arch linuxのsystemd 239から、systemd-resolvedでDNSSECでの検証がデフォルトで有効になったらしい。 手元の環境では、自分で所有しているが、実際に存在する名前を使って権威サーバを立てているために、DNSSECでの検証が失敗してアドレスが引けない問題が…

distrobuilder で lxc 用のイメージを作る

lxc 3.0 ではコンテナイメージ作成に使われていたテンプレートスクリプトが削除されて、 https://github.com/lxc/lxc-templates に移動された。 今後は distrobuilder を使うのがおすすめらしい。 ということで distrobuilder でイメージを作ってみる。 dist…

linux kernel library で遊ぶ

AsiaBSDCon 2018 で linux rumpkernel についての発表があったらしく気になっていた。 Linux rumpkernel - ABC2018 (AsiaBSDCon 2018) from Hajime Tazaki www.slideshare.net 当日は参加していないのでわからないが、linux kernel をライブラリとして使って…

Ceph storage backend bluestore について

分散オブジェクトストレージ Ceph はそのバックエンドとして、ファイルシステムを使う filestore の他に、ブロックデバイスを使う bluestore をサポートしている。 bluestore については公式ブログの記事 や slideshare に概要がある。 大雑把に書くと、メタ…

LevelDB のルックアップ

今更という感じだが、LevelDB について調べた。 table_format にあるように、LevelDB の SST の中身は block に分かれている。 block のなかは key-value の組が複数個入っている。 block ではキーのプレフィックスを圧縮したり block そのものを圧縮してい…