WSLのファイルシステムアクセス速度をマシにしようとしたが失敗した話

背景

WSLはファイルシステムアクセス速度がめちゃくちゃ遅い((わたしのマシンでは数 [MB/s]くらい)のをなんとかしたかった。

やったこと

WSLにおいて通常のファイルシステム上、tmpfs上、およびWindows上で作ったメモリ上に構築したファイルシステム上でlinux-4.18.5.tar.xzの展開したときの所要時間をとった。

結論

残念ながらどれも通常のファイルシステムを使う場合と大して変わらず。

測定環境

  • OS: WIndows 10 Home, version 1803, build 17134.228
  • WSL: Ubuntu 16.04

測定コマンド

$ time tar xf linux-4.18.5.tar.xz

測定結果と考察

まずは通常のファイルシステムとtmpfsについて。

real    10m59.151s
user    0m19.984s
sys 1m28.875s
  • tmpfs
real    10m37.472s
user    0m21.031s
sys     1m22.344s

処理中にWindowsのリソースモニタを見ると、どちらももwriteは5 [MB/s]くらいだったので、WSLのtmpfsは、実は裏側にはメモリではなく何らかのファイルがいる、および、そいつへの書き込み速度はWSL上の通常のファイルと同等なためtmpfsを使っても何も嬉しくない、という推測ができる。WSLはLinuxのエミュレーションに過ぎないので文句は言えないんだけど、かなしい。

続いてWindowsの機能でメモリ上にファイルシステムを作って、その上で上記のソースを展開することにした。WIndowsにはメモリ上に仮想ディスクを作れるImDiskというツールがあるので、これを利用した。管理者権限でこのツールを使えば、たとえば次のように2GBのサイズを持つ仮想ディスクをRドライブとして作成できる。

C:\WINDOWS\system32>imdisk -a -m r: -s 2G
Creating device...
Created device 2: R: -> Image in memory
Notifying applications...
Done.

C:\WINDOWS\system32>

後はこいつをNTFSでフォーマットしてWSLから/mnt/rからアクセスすればよい。

Rドライブ上でソースを展開した場合の所要時間は次の通り。

real    8m12.778s
user    0m18.859s
sys     0m52.031s

ちょっとは速くなったけど大して変わらない。処理中のwrite I/Oは200 [KB/s]くらいだったことより、Rへのアクセス時にはストレージへのアクセスはほとんどしていないようだ。つまりファイルシステムの裏にあるものがストレージデバイスだろうとメモリだろうと、そいつらにアクセスする以前のファイルシステムエミュレーションレイヤがめちゃくちゃ遅いということだろうか。かなしい(2回目)。

最後にImDIskで作った仮想ディスクを削除して終わり。

C:\WINDOWS\system32>imdisk -d -m r:
Notifying applications...
Flushing file buffers...
Locking volume...
Dismounting filesystem...
Removing device...
Removing mountpoint...
Done.

C:\WINDOWS\system32>

linuxカーネルのビルドが謎の失敗 ~ こんにちは、そしてさようならkbuild cache

linuxカーネルのmake実行時に、途中で呼ばれるshellコマンドをキャッシュしておくkbuild cacheという機能がlinux v4.15に追加されました。

github.com

しかしこの機能は色々なコーナーケースに対処しきれておらず、原因不明のビルドエラーが発生することがわかったためにlinux v4.18では早くも削除される見込みです。

github.com

キャッシュした結果はソースディレクトリの直下、.cache.mkファイルに保存されているため、これまで起きなかった謎のビルドエラーが発生した場合は当該ファイルを削除すると問題が起きなくなる可能性があります。

なぜ私がこんなことを知っているかというと、自分がまさにkbuild cacheが原因のビルドエラーに遭遇したからです。具体的にはlinux v4.17.4においてmakeコマンドを実行したら" Compiler lacks asm-goto support."というメッセージと共に失敗しました*1。手持ちのコンパイラは"asm-gcc"機能をサポートしているにも関わらず、です。この事象は上記の通り.cache.mkを削除すると起きなくなりました。

このトラブルシューティングによって30分溶けました。みなさんもお気を付けください。以上

*1:make helpやmake cleanでさえも動かない

WIndowsからWSLへのカットアンドペーストができなくなった(解決済)

手元のマシンでWIndows UpdateかけたらWindowsからWSLへの右クリックによるカットアンドペーストができなくなりました。WSLからWIndows,WSLからWSLではOKでした。色々調べた結果、

  1. WSLの窓の左上にあるUbuntuのアイコンをクリック
  2. 「プロパティ」をクリック
  3. 「オプション」タブを選択
  4. 「Ctrlキーショートカットを有効にする」のチェックを外す

という手順によって問題が解決しました。

この話には続きがあって、別のPCでは上記のチェックは有効であるにもかかわらず右クリックによるカットアンドペーストができるんですよね。なんでだろう。しかし

  • 既に問題は回避できている
  • 回避方法によるデメリットはとくに感じていない

ことによりこれ以上の追求はしないことにしました。時間は有限をもっと大事なことに使います。

技術書典4に出す本の宣伝

はじめに

明日開催される技術書典4に参加いたします。第二回に初めて参加してから連続して3回目の参加です。

techbookfest.org

以前はサイボウズのご厚意でサイボウズブースを間借りしていましたが、今回は独立してwindholeブースです*1。場所は「け51」です。

techbookfest.org

今回は次の5冊を頒布いたします。

上から4冊は同人誌で、いまのところ一般販売はしていません*2。一番下は同人誌ではなく技術評論社から出て書店に並んでいる本ですが、ついでに売ります。本エントリではそれぞれについてコメントを付けて宣伝しておきます。

図解でわかるMeltdown(新刊。紙&電子)

f:id:satoru_takeuchi:20180422071409j:plain

2018年の年明け早々世間を騒がせたMeltdownという脆弱性についての解説書です。この脆弱性は前提知識さえあれば理解は決して難しくありません。しかし必要な前提知識の数が多い、かつそれぞれOSカーネル以下あたりの低レイヤのものが中心なため、一般的なソフトウェア開発者にとってはなかなか敷居が高いのが実情です。

本書はレイヤを問わずあらゆるソフトウェア開発者のためにMeltdownおよびその理解に必要な前提知識をひっくるめて図解しています。「この脆弱性について興味はあったもののなんだか難しそうなので手付かずだった。最短距離で手っ取り早く理解したい!」というかたにおすすめです。

Btrfsの薄い本(既刊。紙&電子)

f:id:satoru_takeuchi:20180422071406j:plain

BtrfsというLinuxファイルシステムについての解説書です。Linuxファイルシステムといえばext4やXFSが有名です。Btrfsはこれら2つと同様の使い方もできますが、通常「Linuxファイルシステム」と言われて普通の人が思いつくものとは大きく異なる豊富な機能を備えています。Btrfsはまた多くのLinuxディストリビューションで実際にサポートされています。

本書はこのファイルシステムが一体どういうものなのかという概要を書くと共に、それを読んでさらに興味が出たかたむけに使い方、トラブルシューティングから歴史までを説明しています。ファイルシステムについて新しい知識を得たいかた、刺激が欲しいかたにお勧めです。きっと「こんなことができるの?」と思うはずです。

カーネルモジュール作成で学ぶLinuxカーネル開発の基礎(既刊。電子のみ)

f:id:satoru_takeuchi:20180422071359j:plain

Linuxカーネルを自分で改変するためには覚えておかなければならない作法があります。これらの作法は一旦わかってしまえば大したことはないのですが、やたらと数が多いので参入障壁が高いです。本書ではそのお作法をカーネルモジュールの作成という方法を通して学びます。まずは単純な機能を追加してから次第に複雑な機能を作り込んでゆくというインクリメンタルな説明方法になっているので、カーネルになじみのないかたにもとっつきやすくなっています。お作法のうちの大して重要ではないところについては自動化して飛ばすツールを紹介しているのもポイントです。

Linuxカーネルをいじってみたいけど、何をすればいいのかさっぱりわからない」というかたにおすすめです。

Linuxカーネルで学ぶC言語マクロテクニック(既刊。電子のみ)

f:id:satoru_takeuchi:20180422071402j:plain

Linuxカーネルのソースを読むにあたっての大きな障壁のひとつがトリッキーなC言語マクロたちです。本書はこれらのうちの多く使われていて、かつ初見殺しなものを抜粋して解説しています。これからLinuxカーネルソースを見てみたいというかた、およびC言語マクロ黒魔術の世界をのぞいてみたいかたにおすすめです。

Linuxのしくみ

これについては技術評論社のWebサイトにある紹介ページをごらんください。

gihyo.jp

おわりに

いかがでしたでしょうか。1冊でも興味のあるかたはお手数ですが当日ブースに来ていただければと思います。試読もできるようになっていますのでお気軽にお立ち寄りください。紙の本は数に限りがあるので「絶対に電子版は嫌」というかたは早めにお越しください。

*1:私だけでなく@uchan_nosさんも3冊出します

*2:そのうちWebで電子版を売るかもしれません

Ubuntu 16.04のVagrantでpublic Vagrant boxにアクセスできなくなった問題(解決編)

下記の過去記事の解決編です。

satoru-takeuchi.hatenablog.com

現状を確認したくて久しぶりにこの問題の再現試験をしたところ、なにもworkaroundを使わずに期待した動作をしました。しかしupstreamのissueはcloseしていませんでした。

vagrant box update - Fails with 404 Not Found error · Issue #9442 · hashicorp/vagrant · GitHub

ではdistroで修正したのかなと思い、Ubuntu 16.04のvagrantパッケージのchangelogを見ると、次のような項目を見つけました。

...
vagrant (1.8.1+dfsg-1ubuntu0.1) xenial; urgency=medium

  * debian/patches/0013-Switch-to-vagrantcloud.patch: Switch from Atlas
    to Vagrant Cloud.  Closes LP: #1747426.

 -- Daniel Watkins <daniel.watkins@canonical.com>  Mon, 05 Feb 2018 18:00:06 -0500
...

これに対応するUbuntuのissueは次の通り。

Bug #1747426 “Vagrant <2.x can no longer fetch box metadata from...” : Bugs : cloud-images

Ubuntuのひとたち、ありがとう。

出版物の原稿の管理方法について

わたしは自分が作成したソフトウェアのソースコードをすべてgithubにおいてOSSとして公開しています。これは自分がプログラマとして生きていられるのは先人が作ったOSSのおかげという思いがあるから、自分も先人と同じようにしようという考えからです1ソースコード以外にもいくつかのドキュメントもgithubやqiita上で公開しています。

qiita.com

これらは利害関係者が自分しかいない、無償で見てもらって誰も困らない記事や同人誌の原稿です。

最近は書店で売る書籍も書くようになったので、githubに課金して($7/month)、本の原稿をプライベートリポジトリとして管理するようにしました。ソースコードと同様に原稿を公開するという手もあるのですが2、色々考えた結果、プライベートリポジトリで管理することにしました。

  • できれば一人で書きたい。執筆方針は執筆開始時点のものから変えたくないし、それを貢献してくれる意図がある人に逐次わかってもらうコストをかけられない
  • ソースコードと違って、公開したいという強いこだわりが無い
  • なるべく多くの人に読んでもらいたいという思いはあるが、これまで溜めてきた知見を導入して膨大な手間をかけて書いたものなので、対価は得たい
  • 原稿を公開することが売り上げに良い影響をもたらすのか否かという判断材料を持っていない。売れなくなると自分だけではなくて出版社を含めた利害関係者すべてが困る

では読者の意見は無視するのかというとそうではなくて、たとえば最近書いた本ですと、twitterなどから直接いただいたりエゴサしたりして集めたりしたご意見をまとめて共有のgoogle spreadsheetとして公開しています。公式サイトのフォームからもご意見を受け付けています。

とりあえずこのように運用して、困ったことがあればやりかたを変えていきます。


  1. と、偉そうなことを言っているものの、今のところ世界中で使われているような大物は無いですが…

  2. 最近だと江添さんが書かれた江添亮の詳説C++17が有名です

拙著"[試して理解]Linuxのしくみ "が発売されました

わたしの初めての著書が本日出版されました。

gihyo.jp

副題の通り、実験と図解によってOSとハードウェアの基礎知識について学ぶのが本書の目的です。難解な理論の話やカーネルソースコードは一切出てこないこと、および、サンプルソースの中身を見なくても読み進められることによって、プログラマ以外のかたがたにも理解できるようにしています。

本書を執筆しようとした動機は次のようなものです。

  • あまねくITエンジニアはOSやハードウェアについて少しばかりの知識があるだけでコンピュータシステム全体への理解が一気に高まると思っている
  • OSについての既存の書籍は開発者向けの理論や実装詳細の解説を主としているものがほとんどなため、OS開発者以外にとってはしきいが高い
  • わかった気にさせて終わるのではなく、実際に読者自身が実験によって知識を体得できるようなものがいい
  • 無いなら自分で書こう

このコンセプトを実現できたかどうかは読者の審判をあおぎたいと思います。もしよろしければ書店で本書を手にとって、一瞥してみて、よさそうだと思えば買っていただけたらなと思います。

最後になりましたが、本書の編集を担当してくれた風穴江さんと技術評論社の細谷謙吾さんに深く感謝いたします。おふたりの協力がなければこの本の完成はありえなかったでしょう。それに加えて推薦文を書いていただいた小崎資広さん、発売前に本書をレビューしていただいた皆さまにも感謝いたします。