cstream - クラウドでオンライン

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド cstream です。

プログラム:

NAME


ストリーム — 帯域幅制限、FIFO、オーディオ、複製、および
拡張レポートのサポート。

SYNOPSIS


ストリーム [-b NUM] [-B NUM] [-i ファイル名] [-I 文字列] [-l] [-n NUM] [-o ファイル名] [-O 文字列]
[-p ファイル名] [-t NUM] [-T NUM] [-v NUM] [-V] [ファイル名]

DESCRIPTION


クストリーム UNIX ツールと同様に、データ ストリームをフィルタリングします。 dd(1)。より伝統的なものがあります
コマンドライン構文、正確な帯域幅制限とレポートのサポート、および
FIFO。データ制限とスループット レートの計算は、4 GB を超えるファイルに対して機能します。

クストリーム ファイル名が指定されていない場合は、標準入力から読み取り、標準出力に書き込みます。
与えられた。必要に応じて、データを「生成」または「シンク」することもできます。

オプション:

-b NUM 読み取り/書き込みに使用されるブロック サイズを設定します。 NUM。 デフォルトは 8192 バイトです。

-B NUM バッファ入力最大 NUM 書き込む前のバイト。デフォルトはブロックサイズです。それは
これをブロックサイズ未満に設定するとエラーが発生します。テープに書き込むときに便利です
および、多数の小さい書き込みのうち、少数の大きい書き込みを優先する同様の機能もあります。

-c NUM 同時操作。出力には別のプロセスを使用します。これは特に便利です
-B オプションと組み合わせて使用​​します。
0 = XNUMX つのプロセスのみを使用します (デフォルト)
1 = 読み取りプロセスはバッファリングされます
2 = 書き込みプロセスはバッファリングされます
3 = 両方のプロセスがバッファリングされます。
大きなバッファ サイズと組み合わせると、メモリに負荷がかかることがよくあります。
リーダーが収集したバッファを
作家。 -c 3 を使用し、バッファ サイズが 128 メガバイトの場合、256 MB
記憶が一気に触れられます。

-i NUM

-o NUM 入力または出力に使用するファイル名をそれぞれ設定します。出力ファイルの場合
名前が「-」の場合、データは単に破棄されます。入力ファイル名が「-」の場合、データは
「虚空から」生成される。これらのオプションが指定されていない場合、stdin/stout は次のようになります。
使用済み。与える必要がある場合 -o or -i オプションと stdin/stdout が必要な場合は、
次のような空の文字列:

cstream -i''

TCP サポートがコンパイルされている場合 (デフォルト)、hostname:portnumber は次のことを試みます。
指定されたポートで指定されたホストに接続すると、:portnumber が開きます。
ローカル マシン上の TCP ソケットにアクセスし、接続が到着するのを待ちます。安全
注: cstream には、これに接続できるホストを制限するメカニズムが含まれていません。
ポート。マシンに他のネットワーク フィルターがない限り、誰でもアクセスできます。
接続します。

-I 文字列

-O 文字列
入力ファイルと出力ファイルのタイプをそれぞれ指定します。
文字列の場合
「f」が含まれる場合、FIFO が作成されます。
文字列の場合
「a」が含まれる場合、ファイルは opensound 互換のオーディオであるとみなされます。
デバイスは CD のような設定に切り替わります。
文字列の場合
「t」が含まれる場合、ストリームのコピーがファイル記述子 3 に送信されます。
文字列の場合
「N」が含まれる場合、名前に「:」が含まれていても、そのファイルには TCP は使用されません。

-l 行数を統計に含めます。

-n NUM データの総量を制限する NUM。利用可能な入力がさらにある場合は、
捨てられる、 ストリーム 制限に達すると終了します。少ない場合は
入力しても、制限に到達せず、エラーは通知されません。

NUM 末尾に「k」、「m」、または「g」が付く場合があります。これはキロバイト、メガバイト、または
ギガバイト (キロ = 1024)。これはすべての数値オプションに適用されます。

-p ファイル名
cstream のプロセス ID を書き込みます ファイル名。 cstream が別のライターを使用する場合
process (オプション -c)、これは親 (リーダー) プロセスの PID です。

-t NUM データ ストリームのスループットを次のように制限します。 NUM バイト/秒。制限は次の時点で行われます
入力側では、cstream がこのレートを超えるものを受け入れないことに依存できます。もし
指定した数値が正の場合、cstream はエラーを蓄積し、
セッション全体の、指定された値での全体的なレート。マイナスを与えると
この数値は、各読み取り/書き込みシステム コール ペアの上限です。言い換えると:
負の数はその制限を超えることはありませんが、正の数はそれを超えます
これは、以前の十分に活用されていなかったものを補うためのものです。

-T NUM num 秒ごとにスループットをレポートします。

-v NUM 詳細レベルを次のように設定します NUM。デフォルトでは、0 に設定されており、メッセージは送信されません。
エラーが発生しない限り表示されます。値 1 は、データの総量を意味します。
プログラム実行の最後にスループットが表示されます。値 2 は、
最初の読み取り/書き込みペアの終了以降の転送速度もレポートされます。
(初期遅延がある場合に役立ちます)。値 3 は、次のものも存在することを意味します。
読み取りと書き込みの個別の測定。このオプションはリソースを消費するため、
現在は実装されていません。値 4 は、各シングルについて通知することを意味します
読み取り/書き込みが表示されます。高い値には、それより低いすべてのメッセージ タイプが含まれます。
値。

-V バージョン番号を標準出力に出力し、0 で終了します。

ファイル名 オプションスイッチなしの最後の引数として単一のファイル名が使用されます。
-i が使用されていない場合は入力ファイル。

シグSR1

署名情報 SIGUSR1 (または SIGINFO、通常はキーボードの Control-T にマップされます) の送信
cstream に送信すると、スループット レートが標準エラー出力に表示されます。ストリームは
何事もなかったかのように続けます。

シグSR2 要求に応じて、終了してスループット レートを報告します。

シグアップ 誤って SIGHUP を送信する頻度が多すぎることに気づきました。しかし無視したり悪用したり
SIGHUPは私にとって選択肢ではありません。したがって、いつ ストリーム SIGHUPを受信した場合は5秒待ちます
もう一度 SIGHUP するまで数秒かかり、ユーザーに潜在的な間違いを修正する機会を与えます。
追加の SIGHUP が受信されない場合、 ストリーム SIGHUPで自殺する。


ストリーム -o tmpファイル -v 1 -n 384m -i -
384メガバイトの不特定のデータをファイルに書き込みます tmpファイル そして詳細を表示します
スループット率。良いベンチマークになります。 / dev / null と違いすぎます
システムからシステムへ。

ストリーム -i tmpファイル -v 1 -n 384m -o -
同じファイルを再度読み取り、データを破棄します。

ストリーム -b 2000 -t 10000 / var / log / messages
多少なりとも視聴可能な速度でファイルが表示されます。

ダンプ 0sf 400000 - / | ストリーム -v 1 -b 32768 -o /dev/rst0 -p pidファイル

kill -USR1 「猫」 pidfile`
からの出力を書き込みます ダンプ(1)テープに貼り付けます。信号が送信されるたびに、スループットが
これまでのデータレートが表示されます。

ストリーム -t 176400 -i /dev/dsp0 -I f -o -
オーディオ アプリケーションをテストするために使用できるサウンドカード エミュレータのようなものを作成します。
実際のサウンドカードと同様に、データ レートを制限する何かを書き込む必要があります。これ
アプリケーションが次を使用してデータを書き込もうとすると、明らかに機能しません mmap(2)と
アプリケーションは、次を使用してサウンドカードパラメータを設定しようとするとき、エラーを無視する必要があります。
ioctlとします。

ストリーム -t 176400 -i /dev/dsp0 -I f -o /dev/dsp1 -O f
同様のサウンドカード エミュレータですが、データを取得できる点が異なります。
アプリケーションは正確なタイミングを保ちながら、他の FIFO からそれに送信します。

ストリーム -おあ -o /dev/dsp0 myhost.mydomain.com:17324
ホスト myhost.mydomain.com のポート 3333 に接続し、そこにあるデータをすべて接続します。
CD 品質のステレオ再生に適した設定でサウンドカードに送信されます。

ストリーム -i myaudiofile.raw -o :17324
これにより、ポート 17324 で TCP サーバーが開き、誰かが接続するまで待機します (
たとえば、前の例のコマンド ライン)。その後、内容を送信します
myaudiofile.raw を TCP ストリームに送信します (前のオーディオの例では、通常、
tosha または cdparanoia ユーティリティから得られるような CD オーディオトラック)。

ストリーム -OD -o マイファイル

O_DIRECT を使用してファイル myfile に書き込みます。これは通常、ファイルシステムのバッファーが
キャッシュはこのファイルをキャッシュしようとしません。それを使用してコピーを防止できます
操作により物理メモリが消費される可能性があります。 cstream が
書き込みエラーが発生すると、出力ファイルが O_DIRECT から通常のファイルに切り替わり、書き込みが行われます。
O_DIRECT なしの書き込みが成功した場合、O_DIRECT なしのそれ以降のすべてのブロック。実際には
これは通常、ファイルシステム ブロックの倍数ではないにしても、最後のブロックを意味します。
サイズに応じてファイルに書き込まれます (書き込まれるデータの最大量)
O_DIRECT がない場合は、ブロックサイズから XNUMX を引いた値になります)。このようにして、cstream は
出力ファイルには入力の長さが含まれますが、長さが奇数であっても、問題であっても
OS が O_DIRECT 出力に課す制限。繰り返しますが、cstream はパディングしません*
出力をブロック サイズにすると、使用しない場合と同じファイルとファイル サイズが得られます。
O_DIRECT。ブロックが適切でない場合は常に非 O_DIRECT に切り替えるというコストがかかります。
サイズ。

ストリーム -i :3333 | dd obs=8192 | ./cストリーム -myfile -v7 -OD
これは、最後の cstream がバッファリングされないように、TCP 入力をバッファリングするために行う必要があることです。
読み取りが短いため、O_DIRECT から途中で切り替えます。あなたの入力ができるのであれば
短い読み取り (例: TCP から) で、O_DIRECT が有効なままであることを確認したい場合、
TCP ストリームと O_DIRECT ストリームの間にバッファが必要です。 cstream以来
は異なる入力ブロック サイズと出力ブロック サイズをまだサポートしていません。ここでは dd が適しています。
これは、OS が複数のファイルシステムを必要とする場合にのみ必要であることに注意してください。
O_DIRECT のブロック サイズ。この記事の執筆時点では、この構造は次の場所で必要です。
Linux では O_DIRECT で TCP ストリームを使用しますが、FreeBSD では必要ありません。

ストリーム -骨 -o マイファイル
O_SYNC を使用してファイル myfile に書き込みます。これは、システム コールが返されるまでに、
データはディスク上にあることがわかっています。これは O_DIRECT とは異なります。 O_DIRECT
独自のバッファリングを実行できますが、O_SYNC ではバッファリングがまったくありません。その時
この記事を書いているところによると、Linux と FreeBSD の両方で O_SYNC が非常に遅い (1/5 ~ 1/10)
通常の書き込み)、O_DIRECT は適度に高速です(通常の書き込みの 1/4 ~ 1/2)。あなた
O_SYNC と O_DIRECT を組み合わせることができます。

エラー


終了コード 0 は成功を意味します。

終了コード 1 は、コマンド ライン構文の使用法エラーを意味します。

終了コード 2 は、その他のエラー、特にシステム エラーを意味します。

バグ


最初の読み取りが終了した直後に書き込みを開始し、その後書き込みを完了するオプションがあるべきです。
バックグラウンドで読み取りを行うバッファ。現時点では、読者より先に書き込みは開始されません
初めてバッファを完全に満たしました。

バグではありません。O_DIRECT を実行するコードはかなり洗練されています。通常の状態に戻ります
エラー時の I/O。しかし、それを行う前に、両方のファイルシステムのブロックサイズ要件について知っています。
(デフォルトの I/O ブロックサイズは、出力ファイルのファイルシステムに関係なく設定されます) とページ
アライメント要件 (I/O はページアライメントされたバッファから発生します)。しかし
同時読み取り/書き込み (-c オプション) と O_DIRECT の組み合わせは、これ以降テストされていません。
いくつかのテストが正しく行われるかどうかの基本的な検証。

onworks.net サービスを使用してオンラインで cstream を使用する



最新のLinuxおよびWindowsオンラインプログラム