読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(writeboost report) ログリプレイ再設計+ 並列フラッシュ 実装終了〜

微妙にくじけたが, 1.5日かけて実装終了した. 現在のdevelopブランチ(0f758a78e08900761f6d160f94345311506fa96c)に実装を反映した.

ログリプレイは, 検討通りに実装するだけだし, 並列フラッシュも, kthreadでやっているものをwqを使うように変更するだけなのだが, 精神的にすり減った.

wqのmax_activeを変更するのは, messageを使うという案だったが, 調べてみると, workqueue自体が設定をユーザランドから行うsysfsをすでに提供しているようなので, こちらを使うことにする. https://lkml.org/lkml/2013/3/1/629 実際に, ライトブーストのコード上でmax_activeを変更するmessageを提供するのは, コードが若干穢れる意味があるのでやりたくない.

たぶんしばらくは, 性能改善とかではなく, コードの改善に務めると思う. たぶん, migrate daemon自体もworkqueueを使う方が良いと思う(dm-cacheはそうしている)が, ライトブーストのライトバックアルゴリズムとはそぐわない意味がある. 何かいい案が思いついたらこの点は改善しようと思うが無理くさい.

基本的にはコードの改善. コメントはぐちゃぐちゃだし, flush daemonという名前ももう正しくない(singleじゃないから)から変更する必要があるかも知れない.


完了. create_workqueueの代わりにalloc_workqueueを使って, フラグにWQ_SYSFSを追加すればよい. workqueue_sysfs_registerを直接使うのは推奨されていない. 実際に, ただ使っただけではsysfsは現れなかった.

root@Hercules:/home/akira# cd /sys/bus/workqueue/devices/wbflusher
root@Hercules:/sys/bus/workqueue/devices/wbflusher# ls
max_active  per_cpu  power  subsystem  uevent
root@Hercules:/sys/bus/workqueue/devices/wbflusher# cat max_active
1