20210110のLinuxに関する記事は4件です。

簡易ネットラジオもどき

簡易ネットラジオもどき

サーバから PCM データを送信し,手元のクライアントで再生してみるテストです. 容量のない PC で音楽を聞きたいときに使えるかもしれません (?)

下ごしらえ

音声ファイルを〆ます. ffmpeg で wav に変換して sox で裸にします. とりあえず CD 音質に.

$ ffmpeg -i hoge.m4a hoge.wav
$ sox hoge.wav -r44100 -c2 -b16 hoge.raw

FIFO 作成

FIFO のうまい使い方が未だにわかりません. この FIFO にはあとで .raw を書き込みます.

$ mkfifo queue

サーバ

nc を利用して接続を待ち受けます. さっき作った FIFO の中身を (ちょっと細工して) 送信します.

この人は Ctrl-C しないと戻ってきません. この記事の上から順番にやってきた人はここでこの端末が使えなくなります. 次の仮想端末を立ち上げてください.

$ tail -n99999999 -f queue | cat | base64 | nc -l 50000

tail -f で FIFO への追記 (後述) を監視します. -n99999999 は初回の内容を全部吐いてもらうためのおまじないです.

続く cat は気休めのおまじないです. バッファの真似をしているつもりです.

base64 でデータを 7-bit な感じにします. 受け取り側が 8-bit なデータを受け取れるかわからないのでとりあえず 7-bit な感じにしています.

nc -l 50000 で 50000 番ポートを listen します. nc を雰囲気で使っているのでよくわかりません.

クライアント

telnet でサーバを突きます. 音声再生には aplay を利用します.

$ telnet サーバアドレス 50000 2>/dev/null | sed '1,3d' | base64 -d | aplay -f cd

telnet はサーバに接続します. エラーは捨てます.

sedtelnet の吐くログ “Connecting <サーバアドレス>...” とかを切り捨てます. 必要に応じて変更してください.

base64 -d でデコードします.

aplay で音声を再生します. -f cd は CD 音質を意味します. スピーカのエイジングとかに興味のある人は cat /dev/urandom | aplay -f cd とかするとホワイトノイズを聴けますよ.

曲の再生

まずはサーバを起動します. ついでクライアントを起動します.
曲を再生するには,作成した FIFO に .raw ファイルを (追加で) 書き込みます.

$ cat hoge.raw >> queue &

この操作はもしかしたらすぐに戻ってこないかもしれないので & を添えてバックグラウンドで動いてもらうことにしました. 続けて曲を追加したい場合は次のように実行すると良いと思います.

$ wait; cat fuga.raw >> queue &

このコマンド行が返るのはおそらく一つ前の曲が再生し終わる頃でしょう.


おわりに

おわりです.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】ディレクトリ内の複数のgzipを一括でgrepする

すぐ忘れるのでメモ

結論

 find . -name \*.gz -print0 | xargs -0 zgrep "keyword"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

KVM ゲストの Windows ディスク性能が KVM ホストの Linux のファイルシステムの違いで変わるかテストしてみた

新しい PC を買ったのでファイルシステム毎のIO性能の測定を軽くやってみました。KVM ホストの環境は以下の通り。

KVM Host: Ubuntu 20.04 (Linux kvm 5.4.0-60-generic)
CPU: AMD Ryzen 5 3600 6-core
Memmory: 128 GB
SSD: WD_BLACK SN850 2TB

EXT4, XFS, ZFS でフォーマットしたディスクを /test にマウントしてそこに qcow2 のイメージをコピーして CrystalDiskMark で簡単に性能を比較してみた。

フォーマットのパラメーターはすべてデフォルト。CrystalDiskMark は 1 GB を一度計測したのみ。

------------------------------------------------------------------------------
CrystalDiskMark 8.0.0 x64 (C) 2007-2020 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

EXT4:

[Read]
  SEQ    1MiB (Q=  8, T= 1):   897.182 MB/s [    855.6 IOPS] <  9310.23 us>
  SEQ    1MiB (Q=  1, T= 1):   882.161 MB/s [    841.3 IOPS] <  1183.96 us>
  RND    4KiB (Q= 32, T= 1):    36.359 MB/s [   8876.7 IOPS] <  3472.53 us>
  RND    4KiB (Q=  1, T= 1):    33.073 MB/s [   8074.5 IOPS] <   120.00 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   835.608 MB/s [    796.9 IOPS] <  9726.00 us>
  SEQ    1MiB (Q=  1, T= 1):   872.855 MB/s [    832.4 IOPS] <  1196.97 us>
  RND    4KiB (Q= 32, T= 1):    36.836 MB/s [   8993.2 IOPS] <  3518.83 us>
  RND    4KiB (Q=  1, T= 1):    33.367 MB/s [   8146.2 IOPS] <   119.12 us>

XFS:

[Read]
  SEQ    1MiB (Q=  8, T= 1):   995.806 MB/s [    949.7 IOPS] <  8381.42 us>
  SEQ    1MiB (Q=  1, T= 1):   889.653 MB/s [    848.4 IOPS] <  1174.34 us>
  RND    4KiB (Q= 32, T= 1):    34.602 MB/s [   8447.8 IOPS] <  3659.19 us>
  RND    4KiB (Q=  1, T= 1):    33.413 MB/s [   8157.5 IOPS] <   118.95 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   803.229 MB/s [    766.0 IOPS] < 10384.00 us>
  SEQ    1MiB (Q=  1, T= 1):   830.395 MB/s [    791.9 IOPS] <  1258.21 us>
  RND    4KiB (Q= 32, T= 1):    34.978 MB/s [   8539.6 IOPS] <  3620.99 us>
  RND    4KiB (Q=  1, T= 1):    31.885 MB/s [   7784.4 IOPS] <   124.74 us>

ZFS:

[Read]
  SEQ    1MiB (Q=  8, T= 1):   860.625 MB/s [    820.8 IOPS] <  9697.54 us>
  SEQ    1MiB (Q=  1, T= 1):   611.799 MB/s [    583.5 IOPS] <  1707.94 us>
  RND    4KiB (Q= 32, T= 1):    33.500 MB/s [   8178.7 IOPS] <  3812.68 us>
  RND    4KiB (Q=  1, T= 1):    33.310 MB/s [   8132.3 IOPS] <   119.36 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   587.469 MB/s [    560.3 IOPS] < 14216.82 us>
  SEQ    1MiB (Q=  1, T= 1):   533.718 MB/s [    509.0 IOPS] <  1959.07 us>
  RND    4KiB (Q= 32, T= 1):    32.717 MB/s [   7987.5 IOPS] <  3937.58 us>
  RND    4KiB (Q=  1, T= 1):    28.359 MB/s [   6923.6 IOPS] <   140.57 us>

シーケンシャル I/O は ZFS が一段落ちる。ランダム I/O は EXT4 が意外と健闘してる。

ついでに以下は KVM ゲストが Ubuntu 20.04 の場合の dd でのテスト結果。/ のファイルシステムは ext4。

4k write: dd if=/dev/zero of=test1 bs=4k count=262144 oflag=direct
1M write: dd if=/dev/zero of=test3 bs=1024k count=1024 oflag=direct
image.png
上記を比較すると XFS が速いが 1M で I/O することは無いと思うので ext4 と xfs は僅差と言えるかも。

ついでに KVM ホストでの性能を fio と dd で比較してみました。fio のパラメーターは以下を参考にして

EXT4 vs XFS vs Btrfs vs ZFSをfioでベンチマークを取ってみました。

bs=4k
$ fio -rw=write -bs=4k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=seqwrite
$ fio -rw=randwrite -bs=4k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=randwrite
bs=16k:
$ fio -rw=write -bs=16k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=seqwrite
$ fio -rw=randwrite -bs=16k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=randwrite

結果はこちら。
image.png
ついでにddも計測してみた。
image.png
fio は 40 同時 I/O をしているはずなので実際の動作により近いかも。XFS がやや速い。fio の ZFS のランダムI/O性能は2回測定してみたが同じような値だった。dd だと 4k/16k が凄く速いのでこれは不思議。

I/O 性能と言いながら KVM ホストでは write しか測ってないのは read だとキャッシュに乗っているらしくメチャクチャな値が出たため。

やはり XFS で使おうかな。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

KVM ゲストの Windows ディスク性能がホストの Linux のファイルシステムの違いで変わるかテストしてみた

新しい PC を買ったのでファイルシステム毎のIO性能の測定を軽くやってみました。KVM ホストの環境は以下の通り。

KVM Host: Ubuntu 20.04 (Linux 5.4.0-60-generic)
KVM Guest: Windows 10 OS Build 19042.685
CPU: AMD Ryzen 5 3600 6-core
Memory: 128 GB
SSD: WD_BLACK SN850 2TB

EXT4, XFS, ZFS でフォーマットしたディスクを /test にマウントしてそこに qcow2 のイメージをコピーして CrystalDiskMark で簡単に性能を比較してみた。

フォーマットのパラメーターはすべてデフォルト。CrystalDiskMark は 1 GB を一度計測したのみ。

------------------------------------------------------------------------------
CrystalDiskMark 8.0.0 x64 (C) 2007-2020 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

EXT4:

[Read]
  SEQ    1MiB (Q=  8, T= 1):   897.182 MB/s [    855.6 IOPS] <  9310.23 us>
  SEQ    1MiB (Q=  1, T= 1):   882.161 MB/s [    841.3 IOPS] <  1183.96 us>
  RND    4KiB (Q= 32, T= 1):    36.359 MB/s [   8876.7 IOPS] <  3472.53 us>
  RND    4KiB (Q=  1, T= 1):    33.073 MB/s [   8074.5 IOPS] <   120.00 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   835.608 MB/s [    796.9 IOPS] <  9726.00 us>
  SEQ    1MiB (Q=  1, T= 1):   872.855 MB/s [    832.4 IOPS] <  1196.97 us>
  RND    4KiB (Q= 32, T= 1):    36.836 MB/s [   8993.2 IOPS] <  3518.83 us>
  RND    4KiB (Q=  1, T= 1):    33.367 MB/s [   8146.2 IOPS] <   119.12 us>

XFS:

[Read]
  SEQ    1MiB (Q=  8, T= 1):   995.806 MB/s [    949.7 IOPS] <  8381.42 us>
  SEQ    1MiB (Q=  1, T= 1):   889.653 MB/s [    848.4 IOPS] <  1174.34 us>
  RND    4KiB (Q= 32, T= 1):    34.602 MB/s [   8447.8 IOPS] <  3659.19 us>
  RND    4KiB (Q=  1, T= 1):    33.413 MB/s [   8157.5 IOPS] <   118.95 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   803.229 MB/s [    766.0 IOPS] < 10384.00 us>
  SEQ    1MiB (Q=  1, T= 1):   830.395 MB/s [    791.9 IOPS] <  1258.21 us>
  RND    4KiB (Q= 32, T= 1):    34.978 MB/s [   8539.6 IOPS] <  3620.99 us>
  RND    4KiB (Q=  1, T= 1):    31.885 MB/s [   7784.4 IOPS] <   124.74 us>

ZFS:

[Read]
  SEQ    1MiB (Q=  8, T= 1):   860.625 MB/s [    820.8 IOPS] <  9697.54 us>
  SEQ    1MiB (Q=  1, T= 1):   611.799 MB/s [    583.5 IOPS] <  1707.94 us>
  RND    4KiB (Q= 32, T= 1):    33.500 MB/s [   8178.7 IOPS] <  3812.68 us>
  RND    4KiB (Q=  1, T= 1):    33.310 MB/s [   8132.3 IOPS] <   119.36 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   587.469 MB/s [    560.3 IOPS] < 14216.82 us>
  SEQ    1MiB (Q=  1, T= 1):   533.718 MB/s [    509.0 IOPS] <  1959.07 us>
  RND    4KiB (Q= 32, T= 1):    32.717 MB/s [   7987.5 IOPS] <  3937.58 us>
  RND    4KiB (Q=  1, T= 1):    28.359 MB/s [   6923.6 IOPS] <   140.57 us>

シーケンシャル I/O は ZFS が一段落ちる。ランダム I/O は EXT4 が意外と健闘してる。

ついでに以下は KVM ゲストが Ubuntu 20.04 の場合の dd でのテスト結果。/ のファイルシステムは ext4。

4k write: dd if=/dev/zero of=test1 bs=4k count=262144 oflag=direct
1M write: dd if=/dev/zero of=test3 bs=1024k count=1024 oflag=direct

dd EXT4 XFS ZFS
4k write 97.7 MB/s 106 MB/s 74.9 MB/s
1M write 1.7 GB/s 2.3 GB/s 1.4 GB/s

1MBはXFSが速いが実用上は4kの性能の方が重要かもしれない。

ついでに KVM ホストでの性能を fio と dd で比較してみた。fio のパラメーターは以下を参考にさせて頂いた。

EXT4 vs XFS vs Btrfs vs ZFSをfioでベンチマークを取ってみました。

bs=4k
$ fio -rw=write -bs=4k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=seqwrite
$ fio -rw=randwrite -bs=4k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=randwrite
bs=16k:
$ fio -rw=write -bs=16k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=seqwrite
$ fio -rw=randwrite -bs=16k -size=100m -numjobs=40 -runtime=60 -direct=1 -invalidate=1 -ioengine=libaio -iodepth=32 -iodepth_batch=32 -group_reporting -name=randwrite

結果はこちら。

fio EXT4 XFS ZFS
4k seq-write 2987MB/s 3066MB/s 2393MB/s
4k rand-write 2883MB/s 2675MB/s 176MB/s
16k seq-write 2873MB/s 2907MB/s 3785MB/s
16k rand-write 2826MB/s 2834MB/s 612MB/s

ついでにddも計測してみた。

4k write: dd if=/dev/zero of=test1 bs=4k count=262144 oflag=direct
1M write: dd if=/dev/zero of=test3 bs=1024k count=1024 oflag=direct

dd EXT4 XFS ZFS
4k write 304 MB/s 264 MB/s 720 MB/s
16k write 949 MB/s 832 MB/s 1.6 GB/s
1M write 4.0 GB/s 4.1 GB/s 2.5 GB/s

fio は 40 同時 I/O をしているはずなので実際の動作により近いかも。XFS がやや速い。fio の ZFS のランダムI/O性能は2回測定してみたが同じような値だった。ZFS は dd だと 4k/16k が凄く速いのでこれは不思議。

I/O 性能と言いながら KVM ホストでは write しか測ってないのは read だとキャッシュに乗っているらしくメチャクチャな値が出たため。まあ普通はキャッシュが有効になっているはずなので参考程度ということで。

やはり XFS で使おうかな。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む