問題タブ [disk-io]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - FAT32 を読み取るための C# での低レベル C++ スタイルの i/o
ハードディスクの FAT32 エントリの読み取りに取り組んでおり、これまでのところ、CreateFile
、ReadFile
、およびSetFilePointer
API を使用してエントリの読み取りに成功しています。これまでのところ、私のコード (C# で記述) は次のとおりです。
---DLLのインポート-----
------コード----任意の .NET アプリケーションで動作します---------
上記のコードはF:\
ドライブを読み取ります。試行目的で、最初のファイル ディレクトリ クラスターを読み取り、各ファイル エントリをクエリして、ファイルが削除されている場合はファイル名を表示するようにしました。
ただし、バイト配列を頻繁に使用し、FAT32 仕様に従って指定されたデータ構造にマップする必要がある本格的なアプリケーションにしたいと考えています。
データを読み取るバイト配列を効率的に使用するにはどうすればよいですか? filestream と binaryreader を使用して同じコードを試してみましたが、動作しますが、次のような C 構造があるとします。
C# で同様のデータ構造を持ちたいのですが、データをバイト配列に読み取るときに、それを構造にマップしたいと考えています。多くのオプションを試しましたが、完全な解決策は得られませんでした。クラスを作成してシリアル化も試みましたが、それも機能しませんでした。FAT エントリからデータを読み取るときに使用する、これらのような構造があと 3 つほどあります。どうすれば望ましい結果を得ることができますか?
linux - 多数のファイルの高速Linuxファイルカウント
非常に多数のファイル(100,000を超える)がある場合に、特定のディレクトリ内のファイルの数を見つけるための最良の方法を見つけようとしています。
ファイルが多い場合、実行ls | wc -l
にかなりの時間がかかります。これは、すべてのファイルの名前が返されるためだと思います。ディスクI/Oをできるだけ少なくしようとしています。
私はいくつかのシェルとPerlスクリプトを試しましたが無駄になりました。どうすればいいですか?
c - 一連の同じサイズのファイルの作成/削除後に NTFS ディスクのスペースが不足する
大規模なプロジェクトに取り組んでいるときに、非常に奇妙な問題に遭遇しました。同じサイズのファイルをパーティションに書き込みます (RAM ディスクと で作成した仮想ディスクの両方を試しましたdiskmgmt.msc
)。別のファイルを収めるのに十分な空き容量がない場合 ( で報告されているように)、以前に作成したファイルの 1 つ(1 つだけ)GetDiskFreeSpaceExW
を削除し、新しいファイルを書き込みます。次に、別の古いファイルを削除し、無限に新しいファイルを書き込みます (したがって、パーティションは同じサイズのファイルのリング バッファーと考えることができます)。一連の書き込みと削除 (数百から数千) の後、新しいファイルの書き込み中にエラーが発生しました (その前に、十分なスペースが報告されます)。私は何人かの同僚に、彼らのハードウェアで問題を再現するように依頼しましたが、問題はno free space
GetDiskFreeSpaceExW
再浮上しませんでした。
物事を少し明確にするために、正確なアルゴリズムは次のとおりです。
- ファイルサイズを選択してください (たとえば、S バイト)
- GetDiskFreeSpaceExW で空き容量を確認する
- free_space > S の場合: サイズ S の新しいファイルを書き込み、2 に進む
- Else: 1 つのファイルを削除して 2 に進む
サイズが 4096 バイトのブロックでファイルにデータを書き込むことに注意することが重要です (ブロック サイズによっては、問題が再発生する場合と発生しない場合があります)。ファイルサイズは5MBです。NTFS パーティション サイズは 21 MiB です。クラスタ サイズは 512 B です (ここでも、これらのパラメータを変更すると結果に影響します)。これらのパラメータでは、684 番目のファイルの作成中にエラーが発生します。RAM ディスクと仮想ディスクのどちらを使用するかには依存しません (したがって、特定の実装の問題ではありません)。
障害発生後に得られたディスク イメージ ダンプを分析したところ、ファイルが大幅に断片化されていることがわかりました。Chkdsk では、実験の前後に問題は報告されていません。システム ログにエラーは見つかりませんでした。
私のネットブック(Dell Inspiron 1110)のおそらく関連するパラメータ:
- Pentium SU4100、比較的遅いデュアルコア x64 CULV CPU (1.3 GHz)
- Windows 7 アルティメット x64 エディション
- 2GBのRAM
何が起こっているのか、それをデバッグする方法について何か知っている人はいますか? 追加情報はどこで確認できますか? 私はすでにアイデアが尽きており、できるだけ早くこの問題を解決する必要があります...
UPD:ファイルを作成するときではなく、ファイル データを書き込んでいるときに問題が発生します (つまりwrite()
、失敗します) 。したがって、MFT エントリが不足しているようには見えません。
UPD2:寄せられたいくつかの質問に答える
- パーティションは新しくフォーマットされたものであるため、ファイルの特定の属性、ディレクトリ構造、何もありません
- 権限はデフォルトです
- .lnk もハードリンクもありません - 私が書いたファイルのみ
- すべてのファイルはルート ディレクトリに書き込まれ、それ以上のディレクトリは作成されません
- ファイル名は単純にファイルの序数です (つまり、1、2、3、...)
- 代替データ ストリームはありません。ファイルは `fopen()` を使用して作成され、`fwrite()` で書き込まれ、`fclose()` で閉じられます。
- 確かに $Txf が作成されます
- 不良クラスタはありません。これは仮想 (または RAM) ディスクです
windows - Windows 用のディスク I/O ベンチマーク ソフトウェアを推奨できる人はいますか?
さまざまな条件下でファイルシステムのパフォーマンスをテストしたいと考えています。
具体的には、「通常のハードディスク」と USB ディスクの両方で、圧縮なしと圧縮ありの Windows 仮想マシンのパフォーマンスをテストしたいと思います。違いが何であるかを正確に確認することは興味深いでしょう。
私が必要としているのは、ファイル システムのさまざまな側面 (ランダム アクセス、シーケンシャル読み取り/書き込みなど) をテストし、私のブログに適したきれいなグラフを作成できるプログラムです。できれば、アプリケーションを自動化してスタートアップに追加できるようにする必要があります。これにより、実行ごとにタイミングが同じになり、検証のために実行を繰り返すことができます。
テストに取り掛かったら、結果へのリンクをここに投稿できます。今はちょうど計画段階です。
macos - プロセスごとの CPU とディスクの使用量を一定期間監視するための Mac (OS X Lion) 用のユーティリティはありますか?
CPU 使用率とディスク I/O のプロセスごとの概要を表示する、OS X Lion で実行する優れたユーティリティを探しています。瞬間的な使用状況を監視したくはありませんが、各プロセスの一定期間 (1 日の作業時間など) の CPU とディスクの平均使用量を調べたいのです。
また、VMWare Fusion で WinXP を実行している Mac 上に VM を持っているので、PC 用の同様のユーティリティを知っていれば、役に立つでしょう。
operating-system - grepの最初の実行が連続した実行よりも数倍遅いのはなぜですか?
プロジェクトディレクトリからプロジェクトをビルドするたびに、次のコマンドを実行します。
そして、なぜ連続実行が最初の実行よりも最大10倍速いのか理解できません。実際、この動作は、大きなディレクトリ(ディレクトリサイズの計算、コードコミットなど)を含む他のディスクIO操作で見られました。オペレーティングシステムのディスクIO内部に関係していると思います。おそらくそれはあるレベルでキャッシュしています。誰かが私の鼻を正しい方向に向けることができますか?
mysql - Webapp:Mysql:行レベルのセキュリティ。長所/短所?これを行うためのより良い方法は?
MySQLを使用して開発しているWebアプリで行レベルのセキュリティをエミュレートしようとしています。
この方法の使用:必要なテーブルを使用してデータベースを作成します。このデータベースには、テーブルの列に適切なインデックスを付けて、すべてのユーザーに関連するデータが格納されます。
ユーザーIDに基づいて特定のユーザーにmysqlの「ビュー」を作成します。
行レベルのセキュリティを実現するには、すべてのユーザーにmysqlアカウントを作成し、ビューに「grant」権限を設定する必要があります。
Webインターフェイスには、PHPベースのMVCフレームワークが使用されます。
しかし、私の調査によれば、次のようになります。
1] Having separate mysql account per user "make the webapp less secure".
2]Having separate mysql account per user "increases the disk I/O".
質問:
1] How does creating mysql user per webapp user make the webapp less secure?
2] Does the disk I/O increase considerably?
3] Is there a better way to implement row-level-security in MySQL?
4]What are the pros/cons of implementing row-level-security by the above method?
行レベルのセキュリティを検討しているのはなぜですか?
I need row level security because there are rows which will be shared between multiple users & have 1 or 2 owners to it. Only these owners can delete/modify them.
python - データ構造の保存/取得
全文検索を行うために Python でサフィックス ツリーを実装しましたが、非常にうまく機能しています。しかし、問題があります。索引付けされたテキストは非常に大きくなる可能性があるため、構造全体を RAM に格納することはできません。
IMAGE:単語のサフィックス ツリーBANANAS
(私のシナリオでは、100000 倍大きいツリーを想像してください)。
それで、それについて少し調べてpickle
みると、ファイルから/へオブジェクトを「ロード」および「ダンプ」するための優れたPythonモジュールであるモジュールが見つかりました。それは私のデータ構造で素晴らしく機能します。
長い話を短くすると、この構造をディスクに保存したり、ディスクから取得したりするための最良の戦略は何でしょうか? つまり、解決策は各ノードをファイルに保存し、必要なときにディスクからロードすることですが、これは最善の方法ではありません (ディスク アクセスが多すぎるため)。
脚注:この質問にpythonというタグを付けましたが、プログラミング言語は質問の重要な部分ではなく、ディスクの保存/取得戦略が実際の要点です。
database - 増え続けるリストを含む動的オブジェクトをディスクに保存する
さて、私はこれまでメインメモリで多くの異なるオブジェクトを持ち、各オブジェクトがシステム内の他のオブジェクトのリストを格納するシステムを開発してきました。これを永続ストレージに移動したいと思います。システム用のカスタムデータベースを作成していることがポイントであるため、DBMSを使用するという明白な答えを探していません。
次に、オブジェクトごとにIDを割り当てます。IDをテーブルで検索して、そのオブジェクトのデータの場所のブロックとオフセットを見つけることができます。これで、各オブジェクトには、システム内の他のオブジェクトを指すリスト/セットがあります。したがって、明らかにストレージには、他のオブジェクトを見つけるために使用できる8バイト(IDにlongを使用)IDのリストがあります。ここでの私の質問は、リストが時間の経過とともに成長することを知っているので、リストを成長させる余地が必要であるということです。リストを保存して、オブジェクトが大きくなったときにオブジェクトを移動する必要がないようにするためのこれまでの私の最善の考えは、各リストにオブジェクトと同じようにIDを割り当てて、オブジェクトと同じようにテーブルで検索できるようにすることです。それらはディスク上にあります。
これで、各リスト部分に10個のオブジェクトを格納するためのスペースが割り当てられ、さらにオブジェクトが含まれている場合は、最後に次のリスト部分のIDになります。これは、それを実行し、絶えず成長するオブジェクトを処理するための適切な方法のように思えますが、より良いアプローチがあるかどうか疑問に思っています。インデックスをメモリに保存する(スペースが許す限り)ので、オブジェクトIDが与えられると、ルックアップはメモリ内にあり、ディスクからデータとリストIDを取得するのに1 I/Oかかります。次に、トラバースするリストごとに、ブロックがキャッシュされている場合、リスト内の10個以下のオブジェクトごとに別のルックアップとI/Oが必要になります。
I / Oの数はひどくなく、リスト部分の局所性を維持して不要なI / Oを排除しようとしますが、これを行うためのより良い方法はありますか?リストをオブジェクトとは別に保存しようとするのは正しいですか、それともオブジェクトのデータと一緒にリストを保存する方法を検討する必要がありますか。それを行うことについての私の心配は、あるリストが大きくなるにつれて、それは別のリストにぶつかり、次に断片化する必要があり、これはより複雑になる可能性があるということです。どんな提案でもありがたいです、そして前もって感謝します。
mysql - 名前付きFIFOパイプはディスクの書き込みと読み取りを使用しますか?
MySQLの一般的なログを解析し、その情報を別のサーバーに保存したいと思います。
ログファイルを移動して解析するだけでなく、MySQLにログをLinuxの名前付きパイプFIFOに書き込むと、パフォーマンスが向上するのではないかと考えていました。
私の目標は、ハードディスクアクセスを削除し、MySQLサーバーのパフォーマンスを向上させることです。
これはすべてLinuxのcentosで行われます。
では、FIFOはディスクアクセスを使用しますか、それともすべてがメモリ内で行われますか?
MySQLをFIFOに書き込み、その情報を解析するプロセスをメモリ内で実行し、それを別のサーバーに送信する場合、ディスク書き込みを節約できますか?
また、これはMySQL一般ログをMySQLデータベースに保存するよりも優れています。insertステートメントがスクリプトに0.2秒追加される可能性があることに気づきました。したがって、MySQLのロギングをオンにすると、実行されるすべてのクエリに.2が追加されるのではないかと思います。