Windows 10 Pro・EnterpriseでWSL2のVHDファイルサイズを最適化する

WSL2上のLinux内のファイルコンテンツはWindows上の仮想ハードドライブ(VHDファイル)に格納されている。このドライブは可変サイズのため、Linux側のファイルが増えると自動的に拡張される。しかしLinux側のファイルを削除しても、この仮想ドライブのサイズは縮小されず、削除したファイルに割り当てられた領域は確保されたままとなるため、仮想ハードドライブのサイズは増加しつづける。 以下にWindows 10 Pro・Enterpriseで仮想ハードドライブのサイズを最適化する方法を示す。 VHDファイルのパスを探す。 wsl --shutdown Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName --- PackageFamilyName ----------------- CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc VHDファイルのパスは以下。 %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx 以下のコマンドでVHDファイルを最適化する。 optimize-vhd -Mode full -Path "$($env:USERPROFILE)\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"

2021-09-08 Wed ·     "Masahiro Hiramori"

Apple AirPods Maxを買った

タイトルどおり、AirPods Maxを買った。 Web会議/英会話用にLogicool G733、外出用にWH-1000XM3を持っているが、これらを置き換える目的で買った。 以下は感想とか。 着け心地はそれなり Logicool G733の倍ぐらいの重さがあるが、それより軽く感じる 側圧が強いので、長時間(1時間ぐらい)装着してるとメガネのツルが食い込んで痛い Jabra Link 370 USB Adapterとの相性は今のところ良い ただ、Jabra Link 370はUSBポートに繋いでいると常にペアリング済みの機器に繋ぎに行こうとするので、iPhoneに繋げなくなる(iPhoneに接続しようと試みてもすぐにJabra Link370に接続が奪われる) 音漏れはかなりひどい 同じぐらいの音量でもWH-1000XM3、G733はそうでもないが、AirPods Maxは明らかに聞こえる 朝9時から夜9時まで1日12時間ぐらい付けてる つけっぱなしだと頭が痛くなるので、2時間ごとに5分ぐらいの休憩をとっている キャリングケースとシリコンケースはそれぞれ以下を買った Geekria ヘッドホンケース Ztotop AirPods Max 対応 保護カバー シリコン ケース レビュー件数が少なくて不安だったが、かなり満足している シリコンの素材がAirPods Maxのツルの部分とほとんど同じに見えるので、違和感がない

2021-06-26 Sat ·     "Masahiro Hiramori"

Raspberry Pi 4上のUbuntu 21.04でFirecrackerを動かしてみた

手順メモ。 公式のInstructionはここ。 firecracker/getting-started.md at main · firecracker-microvm/firecracker KVMは有効済みなのでOK。 拡張ACL設定 /dev/kvmにアクセスするための設定。 sudo apt install acl sudo setfacl -m u:${USER}:rw /dev/kvm Firecrackerバイナリ取得 ダウンロード。 release_url="https://github.com/firecracker-microvm/firecracker/releases" latest=$(basename $(curl -fsSLI -o /dev/null -w %{url_effective} ${release_url}/latest)) arch=`uname -m` curl -L ${release_url}/download/${latest}/firecracker-${latest}-${arch}.tgz \ | tar -xz バイナリを/usr/local/bin/に移動。 cd release-${latest} mv firecracker-${latest}-${arch} firecracker chmod +x firecracker sudo mv firecracker /usr/local/bin/ Firecracker実行 Firecrackerプロセスを起動し、API呼び出しを受け付ける準備をする。 sudo rm -f /tmp/firecracker.socket firecracker --api-sock /tmp/firecracker.socket 以降は別の端末を起動して実行。 MicroVM起動 以下のスクリプトを実行してKernelとRootFSを取得。 arch=`uname -m` dest_kernel="hello-vmlinux.bin" dest_rootfs="hello-rootfs.ext4" image_bucket_url="https://s3.amazonaws.com/spec.ccfc.min/img" if [ ${arch} = "x86_64" ]; then kernel="${image_bucket_url}/quickstart_guide/x86_64/kernels/vmlinux....

2021-05-29 Sat ·     "Masahiro Hiramori"

Raspberry Pi Pico向けのミニマムC++プロジェクト

Raspberry Pi Pico向けのC++プロジェクトテンプレートを作った。 mshr-h/pico-cpp-minimum-example: A minimum C++ example for Raspberry Pi Pico raspberrypi/pico-examplesをベースに最小限のプロジェクトを作成した。 マイコン向け環境構築は大変なイメージがあったが、Raspberry Pi Picoは非常に簡単だった。 これをベースにRaspberry Pi Picoで色々遊びたい。

2021-04-29 Thu ·     "Masahiro Hiramori"

TVM VTAに関するメモ書き

TVM VTAに関してのメモ書き。2021/4/29現在の情報。 Q. どのボードを選ぶべきか A. PYNQ-Z1がおすすめ 現時点VTAのInstallページには、PYNQ-Z1とDE10-Nanoのセットアップ手順が書かれている。 しかしDE10-Nanoは手元で試した限り、LinuxのCMA(Contiguous Memory Allocation)周りが正しく設定されていないようで動かなかった。 TVM Community Discussionを見ても動かない旨の報告がある。 一方PYNQ-Z1は、セットアップ手順通りに進めれば動いた。 VTAをとりあえず試してみたいという目的であれば、PYNQ-Z1がおすすめ。 mainブランチで動かない可能性がある 最近VTA周りの変更が多く、かつVTAのテストケースが貧弱のため、mainブランチでVTAが動かない事がよくある。 手順通りに進めてもエラーが出るのであれば、古いコミットを試すとよい。

2021-04-29 Thu ·     "Masahiro Hiramori"

DE10-NanoにTVM VTAのRPC Serverを導入する

Terasic DE10-NanoにTVM VTAのRPC Serverを導入したので作業メモ。 DE10-Nanoセットアップに従う 必要なもの DE10-Nano microSDカード 8GB以上推奨、microSDXC非対応な気がするので注意 microUSBケーブル シリアル通信に必要 LANケーブル ネットワークに繋ぐのに必要 DE10-Nanoのセットアップ まずはTerasicのページからAngstrom Linuxイメージをダウンロードする。 de10-nano-image-Angstrom-v2016.12.socfpga-sdimg.2017.03.31.tgz ダウンロードしたファイルをmicroSDに書き込む。Win32DiskImagerを使用。 DE10-Nanoに電源ケーブルを接続、microSDをDE10-Nanoに挿入、microUSBケーブルでDE10-NanoとPCを接続する。 PC上でターミナルエミュレータでDE10-Nanoに接続する。TeraTermを使用。 ユーザ名:root、パスワードなしでログインする。 以降はDE10-Nano上で実行する。 パッケージ導入 システムパッケージをアップデートし、必要なパッケージを導入する。 opkg update opkg upgrade opkg install cmake coreutils Python導入 Angstrom Linuxに入っているPythonは古すぎるので、Pythonソースビルドする。 ソースコードをダウンロードし、ビルド、インストールする。 mkdir ~/workspace cd ~/workspace curl -O https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tgz tar xvf Python-3.8.8.tgz cd Python-3.8.8 ./configure make make install python、python3コマンドのシンボリックリンクを導入したPythonに置き換える。 rm /usr/bin/python ln -s /usr/local/bin/python3.8 /usr/bin/python rm /usr/bin/python3 ln -s /usr/local/bin/python3.8 /usr/bin/python3 pipを最新バージョンに更新する。 /usr/local/bin/python3 -m pip install --upgrade pip Git導入 Angstrom Linuxから導入できるGitはバージョンが古いので、これもソースビルドする。...

2021-04-12 Mon ·     "Masahiro Hiramori"

ONNX-MLIRにmacOSのCI設定を追加したときの試行錯誤メモ

2020年10月、ONNX-MLIRという機械学習コンパイラ(ONNXモデルを実行可能バイナリへ変換するツール)に macOSのCI設定を追加するPRを送り、マージされました。 本記事では、このPRを作成してからマージされるまでの試行錯誤を紹介します。 経緯 OSS機械学習コンパイラの調査の一環でONNX-MLIRを見つけ、開発用PC(macOS; MacBook Pro 13")に導入していました。 リポジトリ内を見ていたところ、x86-Linux、s390-Linux、x86-WindowsのCIは走っていますが、どうやらmacOSのCIはないみたいでした。 Issueに「macOS向けCIパイプラインを追加しようと思ってるけどどう?」と聞いてみたところ、 メンテナの一人から是非やってやって欲しい旨のコメントがあり、作業に着手しました。 CIサービスの選定 GitHubをサポートしているCIサービスはいくつかありますが、メンテナからはTravis CIでやって欲しいとの要望があったため、 Travis CI向けの調査に着手しました。 ONNX-MLIRでは、ビルドにDockerを使っています。 単一のDockerイメージでビルドするのではなく、以下のようにビルドを2段階に分ける構成とすることで、 依存ライブラリのビルド成果物を再利用可能となり、ビルド時間の短縮を実現しています。 依存ライブラリをビルドするDockerイメージ llvm/mlirが一番大きな依存ライブラリで、ビルドに1時間程度かかる 依存ライブラリの更新時にビルドされる 上記でビルドした生成物を使ってONNX-MLIR本体をビルドするDockerイメージ このイメージはTravis-CI実行時に毎回ビルドされる Travis CIとDockerのmacOSサポート状況を調査したところ、 DockerはゲストOSとしてのmacOSをサポートしていない(多分) Travis CIのmacOS環境はDockerをサポートしていない(Using Docker in Builds) ため、Travis CIは使えないと判断しました。 ただ、実現したいことは「キャッシュ機構による高速化」であることは分かった、代替案の調査に着手しました。 別のCIサービスとしてGitHub Actionsを調査したところ、キャッシュ機構(actions/[email protected])をサポートしており、これを提案しようと考えました。 (今考えると、Travis CIのキャッシュ機構を使えば同じことができますね。。。) しかし、GitHub Actionsのキャッシュ機構は以下の制約があるとわかりました。 7日間以上アクセスのないキャッシュエントリは削除される リポジトリ全体でキャッシュサイズの上限が5GB 上記の制約があるが、GitHub Actionsは使えそうとのことをメンテナに相談したところ、 1.の制約は問題なく、2.が大丈夫ならGitHub Actionsを使おうとのコメントをもらいました。 というわけで、キャッシュ対象のファイルサイズの調査をします。 actions/[email protected]調査 キャッシュ対象のファイルサイズの調査の前に、どのようにキャッシュされているか知るためにactions/[email protected]を調査します。 GitHub Actionsは、リポジトリ全体でキャッシュサイズの上限が5GBという制約があります。 実はこのサイズは、キャッシュ対象の圧縮後のサイズを指しています。(公式ドキュメントには記載がなく、ソースコードを読むとわかりました) 以下のようにコードを読んでいくと、キャッシュ対象はGzip or zstdで圧縮されることがわかります。 キャッシュ保存時に呼ばれるメソッドはsaveCache()を呼び出しています。 https://github.com/actions/cache/blob/releases/v2/src/save.ts#L40 await cache.saveCache(cachePaths, primaryKey); 中ではcreateTar()を呼び出しています。 https://github.com/actions/toolkit/blob/main/packages/cache/src/cache.ts#L136-L189 const compressionMethod = await utils.getCompressionMethod() ・・・省略・・・ await createTar(archiveFolder, cachePaths, compressionMethod) createTar()呼び出し時の引数compressionMethodは、getCompressionMethod()で決めています。 https://github....

2021-03-13 Sat ·     "Masahiro Hiramori"

はてブ検索結果をRSSで取得する

はてブの検索結果をRSSリーダーで取得したい場合、検索結果のURLに&mode=rssを追加したURLを登録する。 例えば、キーワード「pybind11」の検索結果URLは以下。 https://b.hatena.ne.jp/search/text?q=pybind11 この検索結果をRSSリーダーで読みたい場合、&mode=rssを追加した以下のURLを登録する。 https://b.hatena.ne.jp/search/text?q=pybind11&mode=rss

2021-02-20 Sat ·     "Masahiro Hiramori"