問題タブ [raid]
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++ - 高速ファイルコピーの書き込み速度を向上させますか?
私は、ファイル コピー ルーチンをコーディングして大きなファイルを RAID 5 ハードウェアにコピーする最速の方法を見つけようとしています。
平均ファイル サイズは約 2 GB です。
2 つの Windows ボックスがあります (どちらも win2k3 を実行しています)。最初のボックスは、大きなファイルが配置されているソースです。2 番目のボックスには RAID 5 ストレージがあります。
http://blogs.technet.com/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx
上記のリンクは、Windows コピー、robocopy、およびその他の一般的なコピー ユーティリティの書き込みパフォーマンスが低下する理由を明確に説明しています。したがって、CreateFile、ReadFile、および WriteFile API のNO_BUFFERING
&WRITE_THROUGH
フラグを使用する C/C++ プログラムを作成しました。プログラムは ESEUTIL.exe をシミュレートします。つまり、読み取り用と書き込み用の 2 つのスレッドを使用します。リーダー スレッドは、ソースから 256 KB を読み取り、バッファーをいっぱいにします。16 個の 256 KB ブロックがいっぱいになると、ライター スレッドはバッファ内の内容を宛先ファイルに書き込みます。ご覧のとおり、ライター スレッドは 1 ショットで 8MB のデータを書き込みます。プログラムはこのような 8MB ブロックを 32 個割り当てます。したがって、書き込みと読み取りを並行して行うことができます。ESEUtil.exe の詳細については、上記のリンクを参照してください。注: を使用する際のデータ配置の問題に対処してNO_BUFFERING
います。
ATTO などのベンチ マーキング ユーティリティを使用したところ、8 MB のデータ チャンクを書き込むときに、RAID 5 ハードウェアの書き込み速度が 1 秒あたり 44 MB であることがわかりました。これは1 分あたり約 2.57 GBです。
しかし、私のプログラムは毎分 1.4 GBしか達成できません。
誰でも問題が何であるかを特定するのを手伝ってもらえますか? より高速な API はCreateFile
ありReadFile
ますWriteFile
か?
windows - Windows アプリケーションから Intel コントローラの RAID アレイのステータスを監視するにはどうすればよいですか?
Windows アプリケーションから Intel コントローラの RAID アレイのステータスを定期的に確認する必要があります (または、ステータスの変更について通知を受ける必要があります)。具体的には、RAID 5 アレイが正常かどうか、またはそのディスクの 1 つが欠落しているかどうかを確認する必要があります。
の出力を解析しようとraidcfg32
しました (インテルのサイトから入手できます。この readmeを参照してください)。ただし、アプリケーションが監視する必要があるサーバーの 1 つとしか機能しません。他のサーバーraidcfg32
では、「サポートされていないハードウェア」エラーが報告されます。も試しCmdTool2
ましたが、コントローラーを完全に見つけることができませんでした。
Intel が提供する RAID アレイ監視の残りのオプションは、一連の GUI アプリケーション (Intel Matrix Storage Management Console、Intel Rapid Storage Technology) だけです。
問題のコントローラーは、ESB2、631xESB/632xESB です。
私の問題に関連する Stack Overflow のいくつかの投稿を読んだことがあると思いますが、どれにも答えが含まれていません。「<a href="https://stackoverflow.com/questions/2501855/can-i-get-raid-disk-status-by-using-ps">質問への回答で、レイドディスクのステータスを取得できますか?たとえば、提案されていることは、アレイではなくコントローラーが正常であるかどうかを実際に確認することを可能にします (常に正常です)。
私が探しているのは、(具体的には、.NET アプリケーションから) ステータス情報にアクセスする自動化された方法です。WMI、.NET またはネイティブ API、コンソール出力の解析など、どのオプションでもかまいません。
RAID の状態を監視する方法として GUI アプリケーションを使用する方法が推奨されているのは、ややこしいと思います。これをプログラムで行うために、数十台のサーバーを備えたエンタープライズ展開でどのようなアプローチが使用されていますか?
python - Pythonを使用してディスクから大量のデータを処理する最も効率的な方法は何ですか?
他の方法では再構築できなかった障害のある RAID5 アレイからデータを読み取って再構築するための簡単な Python スクリプトを作成していました。私のスクリプトは実行されていますが、ゆっくりです。私の元のスクリプトは約 80MB/分で実行されました。その後、スクリプトを改善し、毎分 550MB で実行していますが、それでも少し低いようです。Python スクリプトは 100% の CPU を使用しているため、ディスク制限ではなく CPU のように見えます。これは、最適化の機会があることを意味します。スクリプトはそれほど長くないため、効果的にプロファイリングすることができません。そのため、何がすべてを食い尽くしているのかわかりません。これが現在の私のスクリプトです(または少なくとも重要な部分)
この巨大なテキスト ブロック内の実際の質問を太字で示します。
これをより速く/より良くするためにできることはありますか? 何も思い浮かばない場合、これが遅くなる原因をよりよく調査するためにできることはありますか? (行ごとのレベルで python をプロファイリングする方法さえありますか?) 私はこれを正しい方法で処理していますか、それとも大量のバイナリ データを処理するためのより良い方法がありますか?
私が尋ねる理由は、3 TB ドライブの再構築があり、正常に動作しているにもかかわらず (イメージ ro、loop をマウントし、ファイルを正常に参照できます)、長い時間がかかっているためです。古いコードでは 1 月中旬までかかると測定しましたが、今ではクリスマスまでかかるようになっています (したがって、はるかに良くなっていますが、それでも予想よりは遅いです。)
質問する前に、これは mdadm RAID5 (64kb ブロックサイズ、左対称) ですが、mdadm メタデータが何らかの形で欠落しており、mdadm ではメタデータをディスクに書き換えずに RAID5 を再構成することはできません。 、私は何かを台無しにしてデータを失う危険を冒したくありませんが、可能性はわずかです。
linux - Linux で複数のファイルから構成されるループバック デバイスをプログラミングする
ねえ、
losetup
Linux でブロック デバイスをエミュレートするためにファイルを使用するのは比較的簡単です。
コンテンツを取得している複数のファイルに基づいて独自のブロックデバイスをプログラムしたい場合に、何を探すべきかについてのヒントを教えてください。ご理解いただくために、file1 からバイト 1 ~ 500 および 1.000 ~ 3.000 を取得し、file2 からバイト 501 ~ 999 およびバイト 3.001 ~ 5.000 を取得して、それらを組み合わせたブロックデバイスとして提供するとしましょう。私の好みのプログラミング言語は Python で、できるだけユーザー空間でプログラムを書きたいと思っています。
Windows の場合、そのような実装を見つけました。これは FileDisk および HttpDisk と呼ばれ、次の場所にあります。
よろしくお願いします、ライナー
performance - 部分的なドライブ障害に関連するPAGEIOLATCH_SH?
関連するテクノロジ:SQL Server 2008 R2 RAID 5(4ディスク)Windows Server 2008
はじめに、RAID5アレイのディスクに部分的な障害が発生しました。障害は検出されませんでしたが、週末の計画外の停電とUPSの障害の後、ドライブライトが定期的に黄色に点滅しました(黄色に点灯はドライブの障害を示します)。停止は土曜日で、「PAGEIOLATCH_SH」エラーに気づき、SQL ServerのPAGEIOLATCH_SH待機タイプとは何ですか?という投稿を読んだ後、火曜日にライトが見つかりました。(とりわけ)。ドライブを交換して再構築しましたが、まだエラーが発生しています。
クエリは、基になるテーブルにいくつかのインデックスがあるビューを介して大きなテーブルに対して行われます。インデックスを再構築し、実行パスを改善するためにビューを再保存し、クエリを簡略化しました。問題を解決したものはありません。クエリは2006年以降問題なく実行されており、SQLServer2008またはR2へのアップグレードに問題はありませんでした。どちらも最初に利用可能になったときに適用されました。
当初、実行プランはかなり均等な分布を示していましたが、現在は2番目の項目「並べ替え(個別の並べ替え)」で過半数を示しており、インデックスシーク間で約30%が分割されています。以前は2〜10秒でしたが、現在は2分以上になっています。
この時点では、問題の原因を特定する方法がわかりません。私が見つけていないのは破損したデータであるか、クエリが最適とはほど遠いものに再最適化されているか、RAIDに問題があり、ライトや警告が表示されないと思います。
PAGEIOLATCH_SHや同様の問題が通常必要とすることを実行しました。インデックスは正しいように見えるだけでなく、この時点まで何年も機能しています。ドライブが機能していることを確認するために、私が知っているすべてのことも行いました。私の質問は、基本的に、この状況で問題の根本を診断するにはどうすればよいですか?
編集:サーバーは実際には停電でダウンしなかったが、その横のラックはダウンしたことがわかりました。ドライブが部分的に故障した理由はわかりませんが、現時点では停止と一致しているようです。
cassandra - cassandraレプリケーションまたはRAID
従来のRDBMSでは、ほとんどの場合RAID10に慣れていますが、cassandra RF = 2を使用している場合は、バックアップとして正確に1つのコピーがあります。この場合、RAID10を使用しない理由または使用する理由です。
レプリケーションのためのcassandraからのオーバーヘッドが削減されると思います。
さらに、RAID10では、ハードドライブに障害が発生した場合、ノード全体が機能し続けますが、レプリケーションが使用されている場合、1つのハードドライブに障害が発生すると、ノード全体がダウンしますか?
RAID10を使用すると、書き込みごとにオーバーヘッドが発生すると思いますが、フラッシュはSSTABLEがいっぱいになると実行されるため、常に感じられることはありません。
amazon-web-services - EBSを使用してRAID10をセットアップする方法のガイドを知っていますか?
記事http://alestic.com/2009/06/ec2-ebs-raidを見つけましたが、EBSでRAID 10をセットアップするにはどうすればよいですか?
io - カスタム C プラットフォームで実行されるカスタム C アプリのパフォーマンスの最適化
この質問は、ソフトウェアとハードウェアに関連する問題が混在しています。
VS2010 を使用して c で記述されたカスタム アプリがありますが、これにはハイエンド ハードウェアが必要です (アプリは 1 分間に約 50 ギガのデータを噛み砕く必要があります)。64 ビットの Win 7 で動作します。現在、デュアル キセノン 5690 チップ (各 16 コア) を搭載した Dell t7500 を使用しているため、12 個の物理コアと 24 個の論理コアがあります。アプリには一度に約 30 ~ 40 ギガのデータが使用されるため、セットアップには 48 ギガの RAM が必要です。
アプリはマルチスレッド化されているため (24 個の論理コアすべてが 100% に達しているのを見るのは素晴らしいことです!)、CPU バウンドから IO バウンドになりました。(アプリをマルチスレッドとして書き直す前は、データのバックロードに約 36 時間かかりました。現在は約 1.5 時間かかりますが、それでも 15 分未満に短縮する必要があります)。
マルチドライブ構成を利用できるように、ソフトウェアを変更できます。
24 個のコア間で io 作業を分割できます。約 3 TB のストレージが必要です。非現実的ではありますが、48 個の個別の SSD を使用して、実行中の 24 個のスレッドのそれぞれに読み取りと書き込み用の専用ドライブを用意するのが最善のシナリオでしょうか? (アプリは小さなファイルの読み取り/書き込みをあまり行いません。代わりに、1 ~ 2 GB のチャンクで読み取り/書き込みを行います。)
単一のシステムでこれほど多くのドライブを取得することが不可能であると仮定すると、ドライブの数に関して、この種のセットアップの制限はどれくらいになるでしょうか? t7500 マザーボードには 5 つのスロットがあります。そして、ここではどのような種類のコントローラー/構成が最速でしょうか? SATA? SCSI? レイド0?
それとも、ハードウェアの問題の多くをそれほど重要でなくするソフトウェアでできることはありますか? ありがとう。
c - ディスクへの大量の書き込みを最適化する
デュアルxeonチップを搭載したマシンで実行されているCアプリ(VStudio 2010、win7 64ビット)があります。これは、12個の物理コアと24個の論理コア、および192ギガのRAMを意味します。編集:OSはwin7(つまり、Windows 7、64ビット)です。
アプリには24個のスレッドがあり(各スレッドには独自の論理コアがあります)、計算を実行し、大規模なC構造の異なる部分を埋めます。すべてのスレッドが終了したとき(およびスレッドがすべて完全にバランスが取れているため、同時に完了するとき)の構造は、約60ギガバイトです。
(ハードウェアのセットアップを制御できるので、RAID 0を実行する6台の2TBドライブを使用します。つまり、書き込みの物理的な制限は、平均シーケンシャル書き込み速度の約6倍、つまり約2ギガ/秒になります。)
これをディスクに保存する最も効率的な方法は何ですか?明らかに、i/o時間は計算時間を小さくします。このトピックに関する私の調査から、(fwrite()ではなく)write()が進むべき道のようです。しかし、バッファサイズの設定などに関して、ソフトウェア側で他にどのような最適化を行うことができますか?mmapの方が効率的でしょうか?
linux - コンポーネントデバイスにext2ファイルシステムがすでに含まれている可能性がある場合のmdadmのスクリプト
mdadmを使用してm1.largeEC2インスタンス上の2つのエフェメラルストレージデバイスのストライピングをスクリプト化したい(明らかに、amisにはデバイス情報が常に含まれているとは限らないため、アレイが開始されたら新しいamiを作成することはできません)。
問題は、EC2インスタンスのエフェメラルストレージは通常、ファイルシステムで事前にフォーマットされているため、mdadmが次のように言うことです。
そして、入力を待ちます。非対話型の状況(たとえば、fsck -yなど)のmdadmでこれらのタイプのプロンプトに対して自動的にyesと答える方法があると確信していますが、理解できないようです(--forceではありません)。ddを使用してデバイスをゼロにすることができることは知っていますが、それは簡単に実行できると確信していることに対するかなり大ハンマーのような解決策のようです。