問題タブ [solid-state-drive]
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.
linux - カーネル モジュールの SSD に scsi 書き込みコマンドを送信する方法
SSDにできるだけ速く書き込もうとします。データが電源障害に対して安全に書き込まれるかどうかを知る必要があるため、同期書き込みを行うことは非常に重要です。
Linux カーネル ブロック IO スタック (このユースケースでは必要ありません) のほとんどを回避するために、scsi コマンドを自分で送信することを考えました。カーネルの開始/終了のオーバーヘッドを回避するには、カーネル モジュールにする必要があります。
- scsi 書き込みをデバイスに送信する方法の例を知っていますか?
- これをどのように実装しますか?
- または、なぜ SCSI レイヤーが間違ったエントリポイントなのですか?
java - SSD の破損によって txt ファイルの文字が変更されることはありますか?
一連のテキスト ファイル (約 50 GB 相当) から読み取る Java アプリケーションがあります。各ファイルは 5kb から 35mb の範囲です。ファイル自体は、オンデマンドで実行されますが、約 1 週間実行されていない別の Java アプリケーションから作成されます。ファイルは次のような多くの区切り記号を使用します
| | ; 、
私のアプリは正常に動作していましたが、最近数値形式の例外でエラーをスローし始めました。調べると、コンマの 1 つが $ に反転されていることがわかります
0.43916,22970.43081,6.76182$527640691.38786,|10,
私の質問はこれです。ドライブの破損が原因で、この「反転」が発生している可能性はありますか? ファイル全体で 1 文字だけが変更されるというのは、少し大げさなようです。ファイルのタイムスタンプは、別のプログラムによって「誤って」変更されていないことを確認します。
私は本当にこれに頭を悩ませています。
hadoop - EMR 用の hi1.4xlarge SSD EC2 インスタンス
EMR で実行する Hadoop ジョブがいくつかあります。これらのジョブのいくつかは、ログ ファイルを処理する必要があります。ログ ファイルは、それぞれ .gz 形式で最大 3 GB と巨大です。ログは S3 に保存されます。
現在、処理には m1.xlarge を使用していますが、S3 から HDFS にログ ファイルをコピーするだけで約 3 時間かかります。ここで、ボトルネックは S3 からの読み取りですか、それとも HDFS への書き込みですか?
私が計画していたのは、m1.xlarge ではなく、新しい SSD ベースの hi1.4xlarge を使用することです。これは、I/O が高速であるためです。しかし、それはコスト削減に役立ちますか?
しかし、hi1.4xlarge のコストは m1.xlarge よりもはるかに高くなります。
m1.xlarge - 8 EC2 コンピューティング ユニット @ 各 0.614$ = 4.912 $ /時間 h1.4xlarge - 35 EC2 コンピューティング ユニット @ 各 3.1$ = 108.5 $ / 時間
価格上昇は約 23 倍です。そんなにパフォーマンスが向上するでしょうか?私の Hadoop ジョブは I/O バウンドが高いと考えてください。
hi1.4xlarge インスタンスを起動して自分でテストすることはできないので、StackOverflow で質問してください。両方のインスタンス タイプを比較するベンチマークはありますか? Google は役に立ちませんでした。
よろしく。
windows - ATAコマンドデバイスIDENTIFY
ATA_PASS_THROUGH_EXを使用してデバイスを識別しようとしています。
出力バッファを見ると、すべて無効なデータが含まれています。誰かが私が間違っていることを助けてくれますか?
更新:エラー値を確認すると、5です。これは、アクセス違反であることを意味します。管理者モードで実行しています。私は何か間違ったことをしていますか?
-ニック
java - SSD でのキー/バリュー ストアの速度が非常に遅い
私が確信していること:
- Linux で Java/Eclipse を使用しており、それぞれ 16/32 バイトの非常に多数のキーと値のペアをディスクに格納しようとしています。キーは完全にランダムで、SecureRandom で生成されます。
- 速度は、約 100 万エントリに達するまで、約 50000 挿入/秒で一定です。
- この制限に達すると、Java プロセスは 1 ~ 2 秒ごとに CPU 使用率が 0% から 100% まで、メモリが 150MB から 400MB まで、1 秒あたり 10 回の挿入から 100 回まで変動します。
- Berkeley DB と Kyoto Cabinet の両方、および Btrees と Hashtables の両方で試しました。同じ結果です。
何が貢献するか:
- SSDに書き込み中です。
- 挿入ごとに、平均で 1.5 回の読み取りが行われ、常に読み取りと書き込みが交互に行われます。
キャッシュ/バッファの制限に達するまで、ナイスな 50000 レートが上昇していると思われます。次に、この質問で提案されているように、SSD が読み取り/書き込みを混在させて処理しないことが原因で、大幅な速度低下が発生する可能性があります: Low-latency Key-Value Store for SSD。
質問:
この極端な速度低下はどこから来るのでしょうか? すべてが SSD のせいではありません。多くの人がSSDを快く高速なDB処理に使用しており、読み取りと書き込みが混在していると思います。
ありがとう。
編集:メモリ制限を確実に削除しました。Javaプロセスには、より多くのメモリを割り当てる余地が常にあります。
編集:読み取り値を削除して挿入のみを行っても、問題は変わりません。
最終編集 :レコードの場合、ハッシュ テーブルの場合は、初期番号バケットに関連しているようです。京都のキャビネットでは、その数は変更できず、デフォルトで 100 万以下に設定されているため、作成時に適切な数を取得することをお勧めします (保存するレコードの最大数の 1 から 4 倍)。BDB の場合、バケットの数を徐々に増やすように設計されていますが、リソースを消費するため、事前に数を定義しておくことをお勧めします。
java - JavaでSSDにジャーナルを書き込む最速の方法は何ですか?
Java プログラム内の SSD 上のファイルシステム (ext4) に同期する必要がある小さなトランザクションがあります。
各トランザクションの後にファイルシステムと同期する必要がある場合、これらのトランザクションを順次ファイルに書き込む最速の方法は何ですか? トランザクションあたりのデータは非常に小さいですが、トランザクション/秒が増加する場合は、(たとえばページを埋めるために) もっと書き込んでも問題ありません。
データが一度書き込まれた後は、読み取りのみです。
また、パフォーマンスを向上させるファイルシステムへの微調整はありますか? そのタスクにより適した安定したファイルシステムはありますか?
更新:これはファイル システムの問題のようです。同期を使用する場合、Ext4 は Ext3 よりもはるかに遅いですか? 提案? 更新問題の解決策は、ファイルを事前に割り当てることです ( java _file.setLength(size) で)。これにより、ext4 でスペースが事前に割り当てられ、すべてのメタデータが 1 回書き込まれます。この後、ファイルへの書き込みはユーザー データのみを編集し、メタデータは変更されません。これにより、私の場合は 10 倍高速化されました。
solid-state-drive - IDEのディレクトリ(ワークスペース)をCaching SSDに強制的に含めることは可能ですか?
ハイブリッドストレージドライブ(HDD 500GB+およびSSD32GB)を使用しています。Eclipse IDEとEclipseの作業ディレクトリ(Workspace)をSSDドライブ(デフォルトでキャッシュに使用されます)に強制的に含めることはできますか?
linux - アプリケーション コードを RAM のパーティションに配置できますか?
SSDの代わりにRAMを使用したい。これについてアドバイスをくれる経験者を探しています。パーティションをマウントして、そこに Rails アプリを配置したいと考えています。
何か案は?
UPD: SSD と RAM をテストしました。4x4Gb Kingston @ 1333 RAM、Intel Core i3 @ 2,8 Ghz、OCZ Vertex3 @ 120Gb、HDD Seagate ST3000DM001 @ 3Tb を搭載した OSX を使用しています。私のOSはSSDにインストールされ、ルビーはSSDのホームフォルダーに配置されています。sqlite で 10.000 個の製品項目を持つ新しい Rails アプリを作成し、コードでコントローラーを作成します。
ABでテストしました。
SSD
羊
HDD
ですから、SSD に配置された gem を含む ruby のことを考えて、このスクリプトをゆっくりと取得します。実際のサーバーでテストし、より複雑なコードまたは実際のアプリケーションを使用してすべての ruby スクリプトを RAM に配置します。
ps: 私の英語でごめんなさい :)
java - メモリスワップのないSSD用のJava最速の同時ランダムファイルR/Wメソッド
私は32GBのRAMと4つのSSDのセットを備えたLinuxボックスをRAID0構成で使用しており、最大スループットは約1GB(ランダムな4k読み取り)であり、それらのファイルにランダムかつ同時にアクセスするための最良の方法を決定しようとしています。 javaを使用します。これまでに見た2つの主な方法は、ランダムアクセスファイルとマップされた直接バイトバッファを使用することです。
ただし、ここで注意が必要です。私はオブジェクト用の独自のメモリキャッシュを持っているので、ファイルに保存されているオブジェクトへの呼び出しは、ページングされたメモリではなくディスクを経由する必要があります(これを防ぐためにLinuxボックスのスワップスペースを無効にしました)。マップされたダイレクトメモリバッファはおそらくスワッピングに依存する最速ですが、これは適切ではありません。A)オブジェクトキャッシュにすべての空きメモリを使用していますが、代わりにマップされたバイトバッファを使用すると、オブジェクトキャッシュの目的である大量のシリアル化オーバーヘッドが発生します。 (私のプログラムはすでにCPUに制限されています)B)マップされたバイトバッファを使用すると、OSはデータがディスクに書き込まれるタイミングの詳細を処理します。つまり、これを自分で制御する必要があります。write(byte [])を実行すると、すぐにディスクに送信されます。これは、ACIDトランザクションを使用していないため、電源障害が発生した場合のデータ破損を防ぐためです。
一方、私は大規模な並行性が必要です。同じファイル内の複数の場所に同時に読み取りと書き込みを行う必要があります(データの破損を防ぐためにオフセット/範囲ロックを使用している間)mappedbytebuffersなしでこれを行う方法がわかりませんが、常に読み取りをキューに入れることができます/書き込みますが、これがスループットにどのように悪影響するかはわかりません。
最後に、読み取りまたは書き込み用に新しいbyte []オブジェクトを作成しているときに状況が発生することはありません。これは、1秒あたりほぼ100000の読み取り/書き込み操作を実行するためです。これらのオブジェクトをすべて割り当ててガベージコレクションすると、プログラムが強制終了します。機密性が高く、すでにCPUが制限されているため、byte[]オブジェクトを再利用しても問題ありません。
私がそれらのほとんどを試したので、DBソフトウェアを提案しないでください、そしてそれらは多くの複雑さとCPUオーバーヘッドを追加します。
誰かがこの種のジレンマを持っていましたか?