- 投稿日:2021-01-10T18:19:20+09:00
簡易ネットラジオもどき
簡易ネットラジオもどき
サーバから PCM データを送信し,手元のクライアントで再生してみるテストです. 容量のない PC で音楽を聞きたいときに使えるかもしれません (?)
下ごしらえ
音声ファイルを〆ます.
ffmpeg
で wav に変換してsox
で裸にします. とりあえず CD 音質に.$ ffmpeg -i hoge.m4a hoge.wav $ sox hoge.wav -r44100 -c2 -b16 hoge.rawFIFO 作成
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
はサーバに接続します. エラーは捨てます.
sed
はtelnet
の吐くログ “Connecting <サーバアドレス>...” とかを切り捨てます. 必要に応じて変更してください.
base64 -d
でデコードします.
aplay
で音声を再生します.-f cd
は CD 音質を意味します. スピーカのエイジングとかに興味のある人はcat /dev/urandom | aplay -f cd
とかするとホワイトノイズを聴けますよ.曲の再生
まずはサーバを起動します. ついでクライアントを起動します.
曲を再生するには,作成した FIFO に .raw ファイルを (追加で) 書き込みます.$ cat hoge.raw >> queue &この操作はもしかしたらすぐに戻ってこないかもしれないので
&
を添えてバックグラウンドで動いてもらうことにしました. 続けて曲を追加したい場合は次のように実行すると良いと思います.$ wait; cat fuga.raw >> queue &このコマンド行が返るのはおそらく一つ前の曲が再生し終わる頃でしょう.
おわりに
おわりです.
- 投稿日:2021-01-10T17:16:23+09:00
【Linux】ディレクトリ内の複数のgzipを一括でgrepする
- 投稿日:2021-01-10T11:23:45+09:00
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 2TBEXT4, 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 bytesEXT4:
[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
上記を比較すると 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=randwritebs=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結果はこちら。
ついでにddも計測してみた。
fio は 40 同時 I/O をしているはずなので実際の動作により近いかも。XFS がやや速い。fio の ZFS のランダムI/O性能は2回測定してみたが同じような値だった。dd だと 4k/16k が凄く速いのでこれは不思議。I/O 性能と言いながら KVM ホストでは write しか測ってないのは read だとキャッシュに乗っているらしくメチャクチャな値が出たため。
やはり XFS で使おうかな。。
- 投稿日:2021-01-10T11:23:45+09:00
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 2TBEXT4, 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 bytesEXT4:
[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=randwritebs=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 で使おうかな。。