1057003 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

緑のボタンを押せ! Press the green button

緑のボタンを押せ! Press the green button

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Category

Keyword Search

▼キーワード検索

Archives

2024.04
2024.03
2024.02
2024.01
2023.12

Comments

 effelpist@ kilovermek.es effelpist &lt;a href=&quot; <small> <a href="http…
 Jun@ Re:「いっちゅう」さんのiEPG用ソフト入れてみた(09/15) TVdeIEPG Ver.1.2.1.0がリンク切れしてい…
 スター@ Re:hauppauge HD PVR 速報(08/25) スタービーチ <small> <a href="http://c…
 ASOBO@ Re:hauppauge HD PVR 速報 ASOBO攻略 <small> <a href="http:/…
 ハッピーメール@ Re:hauppauge HD PVR 速報 ハッピーメール <small> <a href="http:/…

Freepage List

Favorite Blog

まだ登録されていません
2009.04.03
XML
テーマ:私のPC生活(7398)
カテゴリ:Hauppauge HD PVR

 Linux上で、キャプチャするための簡易ソフトの話。

いままで。ずっとvmplayer上のubuntu server 7で動かしていましたが、新しいドライバの不調の原因を突き止めようと、ubuntu desktop 8に移行というか変更して調査していました。不調の原因はつまなるミスで、動くようになりましたが、並行してディスクにアクセスしたりすると、キャプチャが止まってしまう、という新たな問題が出てきました。

というのが、ここまでの経緯です。キャプチャ用の簡易ソフトはやってることは、つまるとこファイル間のデータコピーなのですが、ソースとなるHD PVRからはリアルタイムでデータを引き抜く必要があり、一方ディスティネーション側のHDDは本質的にはリアルタイム性はないわけです。で、ソースから一定量データをバッファ読む、ディスティネーションにそれを書く、をシーケンシャルにやっていると瞬間的に間に合わなくなることがある、というのが考察です。

このような場合の常套手段としては、バッファを複数もって読み出しと書き込みを並行してやるわけですが、そのためにはスレッド・プログラミングとかをするのですが、なにせ私がc言語を真面目に使っていたのは、MS-DOSの時代なので、概念はわかっているつもりでもちょっとチャレンジングでした。ハイ。

プログラムは今のところ問題がないレベルに仕上がったのですが、ものはついでなので、topとか動かしながら、システムに負荷をかけたりしてすこし様子をみてみました。以下、雑多な考察。

簡易キャプチャソフトの負荷は、topで見ている限りは1~2%なので、一応合格でしょう。vmplayer上のlinuxでも問題ないでしょう。 

意外にsambaが重い。linuxのシステムは、C2D7200,メモリ2GB,HDDはHGSTの725050VLA360とファイルサーバーには豪華仕様です。Windows機からsambaで公開しているボリュームにビデオのファイルのような巨大(数GB)なファイルを読み書きすると、40kB/sec位は出るのですが、このときサーバー機上のsambaデーモンはCPUを30%くらい喰ってます。Atomベースのマザーボードにそのうち切り替えようと思っていたのですがちょっと考え物かもしれません。LANを100Mに設定するとか、Jumboフレームを導入するとかすれば状況は変わるでしょうが、我が家はまだ100Mの機器もあるので、悩ましいです。

一番キツクなるタイミングは、数GBとか巨大なファイルをまとめて消したりするときのようです(ファイルシステムはext3)。HDDの音を聞いていても、「カッ、カッ、カッ、」と音がします。

バッファサイズの適正量とその運用。いま一本のバッファを4096Byteにし、1024個のバッファを用意しています。プログラムにちょっと細工をしてどれくらいのバッファが埋まっているか調べるようにしました。ピークでは450くらいまでいくのでもう少しバッファの個数を増やしたほうがよさそうです。
一本のバッファの大きさは「何の考え」もなく4096にして、スタティック変数にしてあります。ほぼ100%ページバウンダリをまたぐので、I/Oはスキャッタ・ギャザーDMAだとしてもあまりよろしくないかも・・・
あと今の実装ではソースデバイスからのデータの読み出しスレッドは全速力で読んでますが、一回のread()関数の読み出しでバッファがすべて埋まらない可能性があります。usleepとかで少し「待ち」をいれた方がいいかもしれません。

 

で、「PAC3」は本当に当たるのか?

 






お気に入りの記事を「いいね!」で応援しよう

Last updated  2009.04.04 02:22:12
コメント(0) | コメントを書く



© Rakuten Group, Inc.