So-net無料ブログ作成

Raspberry Piで遊ぼう [No.17:recfsusb2nのコマ落ちを回避しよう] [Raspberry Pi]


前回はrecfsusb2nでテレビ録画をできるようにしましたが、残念ながらコマ落ちしている状態でした。
vmstatのデータを見てみると、ioのbo(ブロックデバイスから受け取ったブロック (blocks/sec))が高くなり、その次の時間には、CPU使用率が非常に小さく、wa(IOの待ち時間)に時間がさかれています。
すなわち、ファイルへの書き込みが遅く、書き込み用のバッファが溢れているかのようです。(私の解析が正しいとは限りません。)
Writeのチューニングをしようと、Debianのチューニングに関して調べて見ましたが、情報は見つかりませんでした。
そこで、どうしたら溢れる前に書き込みを実行できるのか考えてみました。
思いついたのがsyncコマンドを定期的に実施する方法でした。
syncコマンドとはディスク・キャッシュを強制フラッシュするコマンドです。

さっそく、録画している状態において、手動でsyncを打って見ると、wmstatのidleもあり、waもそこそこの値です。
そこで、定期syncをシェル化しました。

ファイル名:loop_sync.sh
#!/bin/bash

while :
do
    sync
    sleep 2
done


sync終了後、2秒周期でsyncを行います。
2秒にした理由は0秒~5秒を試してとき、vmstatのデータが2秒周期がベストだったからです。
また、録画コマンドもシェル化し、定期syncのシェルを組み込んでみました。

ファイル名:rectv.sh
#!/bin/bash

FILE=`date +%Y%m%d%H%M%S`.ts
KEY1=$1
while [ "$CH" = "" ]; do
    case $KEY1 in
        1)  CH=27;;  # NHK総合
        2)  CH=26;;  # NHK教育
        4)  CH=25;;  # 日本テレビ
        5)  CH=24;;  # テレビ朝日
        6)  CH=22;;  # TBS
        7)  CH=23;;  # テレビ東京
        8)  CH=21;;  # フジテレビ
        9)  CH=20;;  # 東京MX
        12) CH=28;;  # 放送大学
        *)
            echo "1) NHK総合"
            echo "2) NHK教育"
            echo "4) 日本テレビ"
            echo "5) テレビ朝日"
            echo "6) TBS"
            echo "7) テレビ東京"
            echo "8) フジテレビ"
            echo "9) 東京MX"
            echo "12) 放送大学"
            echo -n "チャンネルを入力してください : "
            read KEY1
            ;;
    esac
done

SEC=$2
while [ "$SEC" = "" ]; do
    echo -n "録画時間(秒)を入力してください : "
    read KEY2
    SEC=$KEY2
done

echo "チャンネル:$CH / 録画時間:$SEC"

./loop_sync.sh &

recfsusb2n --b25 --sid hd --wait 100 $CH $SEC /video/$FILE

PID=`ps -ef | grep loop_sync.sh | grep -v grep | awk '{ print $2 }'`
kill $PID

exit



このrectv.shは、引数を付けて起動すれば、その引数を用いて実行され、引数がなければ、入力を促します。

このシェルを使い、録画を実行したときのvmstatは、以下のようになりました。
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0  72208  12532 278372    0    0    42   132 1171 1152 10  7 81  3
 0  0      0  72248  12532 278372    0    0     0     0 8091  158  0  1 99  0
 1  0      0  71780  12536 278372    0    0     0    11 8207  276  1  4 95  0
 0  0      0  71780  12544 278372    0    0     0    10 9392 1050  1  5 94  0
 0  0      0  71780  12544 278372    0    0     0     0 9046  823  0  4 96  0
 0  2      0  60780  12544 279232    0    0     0   172 8733  669  8  5 70 17
 0  0      0  33576  12560 289048    0    0     0   924 8395  464 23 15 40 21
 1  0      0  16124  12576 296980    0    0     0  1625 8329  547 24 14 22 41
 1  0      0  10536  12584 302464    0    0     0  1762 8586  529 16  9 30 45
 0  2      0  12272   9528 303220    0    0     2  2622 8601  465 33 17 31 19
 1  0      0  11280   9424 304788    0    0     0  1034 8712 1114 17 14 20 49
 0  0      0  12396   9240 303468    0    0     0  1605 8509  665 27 16 43 13
 0  0      0  10792   9152 305636    0    0     0  2381 8634  610 23 14 24 38
 0  0      0  12404   8960 304340    0    0     0  1431 8478  813 27 14 33 27
 0  2      0  12404   8840 303828    0    0     0  2228 8548  564 23 12 28 37
 0  0      0  12404   8784 303840    0    0     0  1253 8511  751 22 15 38 25
 2  0      0  12280   8712 304452    0    0     0  1204 8437  859 14 11 24 51
 1  2      0  12404   8592 304028    0    0     0  2458 8603  639 28 14 21 36
 0  0      0  47308   8600 306176    0    0    11     6 8179  217  2  6 89  3
 0  0      0  47592   8608 306176    0    0     0     2 8092  153  0  1 99  0
 0  0      0  47624   8608 306176    0    0     0     0 8093  184  0  1 98  0



boもidもwaも安定しています。

出来上がったファイルもコマ落ちは見られませんでした。
どうでしょう。今回は役に立ったのでないでしょうか。自分でも満足しています。

[No.1:Raspberry Piが届いた]はこちらです。
[No.2:ブートイメージSDカードを作ろう]はこちらです。
[No.3:初期設定をしよう]はこちらです。
[No.4:環境設定をしよう]はこちらです。
[No.5:VNC接続をしよう]はこちらです。
[No.6:無線LANを接続しよう]はこちらです。
[No.7:ファイル共有サーバを作ろう]はこちらです。
[No.8:動画ファイル(mp4)を再生してみよう]はこちらです。
[No.9:音楽ファイル(mp3)を再生してみよう]はこちらです。
[No.10:firefox(iceweasel)をインストールしてみよう]はこちらです。
[No.11:Raspbian(wheezy)にXBMCをインストールしてみよう]はこちらです。
[No.12:Raspbian(wheezy)のXBMCを日本語にしよう]はこちらです。
[No.13:XBMCのWebサーバーを有効にしよう]はこちらです。
[No.14:スマホからXBMCを操作しよう]はこちらです。
[No.15:FTPサーバー(vsftpd)をインストールしよう]はこちらです。
[No.16:recfsusb2nでテレビ録画をしよう]はこちらです。

次回もお楽しみに!!

nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。