マルチスレッド対応の圧縮コマンド

SDカードのイメージファイルを作成し、圧縮ファイルを作った。このとき、結構時間がかかった。システムモニタを見ていたところ、マルチコアにもかかわらず、1つかせいぜい2つのスレッドしか使われていなかった。そこで、マルチスレッド版の圧縮コマンドがないかぐぐったところ、やっぱりあった。(^^)

qiita.com

シングルスレッドなgzip だとこんな感じ。

$ time sudo dd if=/dev/sda bs=8M | gzip -c > sdcardimg_org.img.gz
1910+0 レコード入力
1910+0 レコード出力
16022241280 bytes (16 GB, 15 GiB) copied, 710.228 s, 22.6 MB/s

real 11m50.237s
user 4m30.003s
sys 0m13.834s

 これに対して、マルチスレッドの xz だと

$ time sudo dd if=/dev/sda bs=8M | pxz -c > sdcardimg_org.img.xz
1910+0 レコード入力
1910+0 レコード出力
16022241280 bytes (16 GB, 15 GiB) copied, 278.309 s, 57.6 MB/s

real 4m39.045s
user 78m52.949s
sys 0m40.581s

 と、約3倍の速度がでた!このときのシステムモニタの様子がこれ。

f:id:kzono:20190125202436p:plain

pxz マルチスレッドでの圧縮

 

Rust の REPL を Google さんが作っていた

jupyter-notebook の Rust 用カーネルを探していたら、なんと Google さんが開発して、公開していた。

github.com

qnighy.hatenablog.com

qiita.com

evcxr_jupyter というのが Rust 用 jupyter-notebook のカーネル

https://github.com/google/evcxr/blob/master/evcxr_jupyter/README.md

これで、Rustの勉強記録を jupyter-notebook で記録できる。楽しい!

Vivado/Vivado HLS/ peta linux

  • HWロジックの開発環境:Vivado
  • HWロジックの高位合成(HLS:High Level Synthesis)開発環境:Vivado HLS
  • SW開発環境:peta linux

という位置づけらしい。

今日は時間切れだが、今後は下記のサイトを参考にしてツールの使い方を学ぶ。

qiita.com

www.tech-diningyo.info

公式ドキュメントでは、VIvado Design Suite ユーザガイド

https://www.xilinx.com/support/documentation/sw_manuals_j/xilinx2017_4/ug910-vivado-getting-started.pdf

が、見るべきドキュメントらしい。

ESP-IDFの WiFi サンプルが動いた!

WiFiサンプルは、

  • ESP32がアクセスポイントになるもの
  • WiFiのクライアントとしてAPに接続するもの

の2つが用意されていた。どちらも問題なく動いた。(嬉

 

ただし、VSCode からだと example プロジェクトとしてメニューに表示されず、import できなかった。ターミナルからコマンドラインでビルドし、USBシリアルでフラッシュROMに書き込み、動作確認を行った。

 

大きく嵌まることなく、いい感じで進んでいる。

threadripper と ubuntu でのスクリーンショット

プログラムをビルドするとき、結構時間がかかる。そんなとき、 make コマンドに -j4 などといったオプションをつけると、make コマンドは4スレッド起動して並行処理してくれる。

 

開発用マシンとして先日組み立てたPCでは AMD ryzen threadripper 2050 なので、32スレッドをサポートしている。なので、 -j32 とオプションをつけて make してみた。

オプション無しと比べると雲泥の差で早く終わった!

f:id:kzono:20190120021546p:plain

threadripper で make -j32

-j オプションを指定しないとCPUが1つしか使われないが、-j32 を指定すると上記のグラフでわかるように、全部のCPUコアが同時に使われるため爆速となった。(^^)/~

 

Ubuntuスクリーンショットを取るには、Psc(Print Screen)キーを押せばよい。

ウインドウを指定するには、対象ウインドウを選択した後、 Alt + Psc を押す。すると画像ファイルがホームディレクトリ下のピクチャディレクトリに作成される。

esp-idf と freeRTOS

ESP32 のたくさんある機能(特にネットワーク関連)を使うには、フレームワークとして ESP-IDF, そのコンポーネントとして FreeRTOS を使うのが良さそう。

 

もちろん、ツールチェーンとBSP(ペリフェラルのドライバソースコード)だけ用意し、他は自分で書く、といったマイコンチックな開発もできるはずだが、折角 ESP32 を使うならば無線ネットワーク(WiFiBluetooth)で http や websocket などを使いたい。その場合は、RTOSフレームワークといった使えるエコシステムに乗っかったほうが良い。

FreeRTOSはAWSに正式採用されているし、ESP-IDF のサンプルには AWS-IoT 用のものも含まれている。まだ動かせてはいないが、大変楽しみである。

ESP-IDF と platform.io

esp-idf のサンプルは、インストール後すぐにビルドできた。

 

一方、platform.io が ESP32に対応していることを知った。その上、VSCode に platform.io 用の extention があることもわかった。

platformio.org

kunsen.net

発見した記事は esp-idf ではなく arduino-IDE なものだったが、ちゃんと設定さえすれば、VSCode + platform.io extention + esp-idf な環境を作れるはず。