VC++を使って、Windows2000,XPのプログラムを作成しています。
現在、1秒間に70MB程度のデータを書き込む必要があり、RAID0を使っているのですが、RAID0を使っていない、普通のハードディスクの方が書き込みが早いです。
方法としては、
CFile::SetLengthでファイルの大きさを決めて
CFile::Writeで書き込んでいます。
RAID0に高速書き込みする方法があれば、教えてください。よろしくお願いします。
使っているマシンのスペックは低くありません。
CPUは2GのXEONが2つついています。
HDBENCHというベンチマーク用ソフトウエアでRAID0のハードディスクを確認したところ、100000KB/sec以上の結果が出ました。
しかし、なぜか私の作ったプログラムでは、RAID0を使っていないHDで、ベンチマークの結果も50000KB/sec程度のHDの方が結果が良かったです。
書き込みブロックも変更して試したのですが、良い結果は出ませんでした。
現状の感じとしては、RAID0に書き込むと、遅延書き込みが起きているけれど、RAID0でない場合は、遅延書き込みの頻度が少ない感じがします。
書き込むたびに、CFile::Flushを呼ぶことで遅延書き込みはなくなるのですが、書き込みは早くありませんでした。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
Win32API の CreateFile と WriteFile を使って、書き込む単位を何種類か(64K、1M、10Mくらい)で計測してみてはどうでしょう。
ソースが公開されていないベンチマークの結果は参考にしかなりません。
確かにソースが公開されていないと、何をやっているんだかわかりませんね。
私が使っているCFile::Writeの中は、下記です。
void CFile::Write(const void* lpBuf, UINT nCount)
{
ASSERT_VALID(this);
ASSERT(m_hFile != (UINT)hFileNull);
if (nCount == 0)
return; // avoid Win32 "null-write" option
ASSERT(lpBuf != NULL);
ASSERT(AfxIsValidAddress(lpBuf, nCount, FALSE));
DWORD nWritten;
if (!::WriteFile((HANDLE)m_hFile, lpBuf, nCount, &nWritten, NULL))
CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);
// Win32s will not return an error all the time (usually DISK_FULL)
if (nWritten != nCount)
AfxThrowFileException(CFileException::diskFull, -1, m_strFileName);
}
結局WriteFileを使っていました。また、書き込む単位も、クラスターの倍数でいろいろ試してみたので、他に何か問題があるかもしれないと思ってます。
とりあえず、自分がテストしたソースを公開してみます。
No.3
- 回答日時:
#2には、誤字がありましたね。
失礼しました・普通のHDDとRAID用のHDD[は]同型品ですか?
ですね
RAIDのHDDのキャッシュが少ないのですね。
まあそれでもベンチマークではRAIDの方が早いので影響はないようですね
さて、
テストプログラムでは、クラスターの大きさのメモリの書込みということですが
実際はどうやっておられるのでしょうか
小さすぎる可能性はないでしょうか?
他に考えられる原因は、
HDDが異なる型の場合には、たまに同期がとれなくて余分に時間がかかる場合がありますが
ベンチマークの結果からしても、そうではないようですね
それ以外にRAIDに影響が多い場合というと、ランダムアクセスでは遅くなる可能性はありますが、
大丈夫でしょうか?
RAID上には、出力データだけでプログラムファイルなどは無いのですよね?
構成と入力データを聞いたのは、たとえば入力データがRAID上にある場合だと、
今回のような現象がおきる可能性があるためです
メモリ上のデータを書き込んでいるのならば、そうではないようですが。
上記で原因が判明しない場合には、
テストプログラムのソースを出せば、他のひとからもっとレスが得られる気がします
No.2
- 回答日時:
C++は遅いとはいえ、同じプログラムでRAID0が遅いのはおかしな現象ですね
・機器構成(HDDの接続やメモリなど)はどうなっていますか?
・普通のHDDとRAID用のHDDの同型品ですか? 仕様は?
・比較試験の入力元データは何でしょうか?
>・普通のHDDとRAID用のHDDの同型品ですか? 仕様は?
違います。ベンチマークの結果、HDのキャッシュが多い方が書き込みが早かったので、普通のHDDというのには、キャッシュが8Mのものを使っています。
>・比較試験の入力元データは何でしょうか?
このデータは何にしても変わりありませんでした。
例えば、テストプログラムで、クラスターの大きさのメモリを確保して、ループを回してそれを書き込んだ場合も、RAID0の方が遅かったです。
HDBENCHというソフトウエアでの書き込みが毎秒100MBを超えているので、構成が悪いとはどうしても思えません。
No.1
- 回答日時:
RAIDにはソフトウェアRAIDとハードウェアRAIDがありますが、貴殿の環境はソフトウェアRAIDなのではないでしょうか?
もし、ハードウェアRAIDであれば、キャッシュの設定(遅延書き込みの有無など)とかが出来る可能性がありますよね。
また、複数のハードディスクを別のバスに繋げ、RAIDチップが制御することでRAID0の高速化が望めるのだと思います。
例えば、IDEのハードディスクを一つのケーブルでプライマリーとオルタネートのように繋いで、ソフトウェアRAIDでRAID0では、高速化は望めないどころか、低速になってしまうのではないでしょうか?
この回答への補足
”遅延書き込み”と書いたのは、私(質問者)の勘違いでした。
プログラムにバグが存在していました。
結局のところ、ただ、書き込みが遅くなっているというのが現状です。RAID0を使えば、ただ書き込みが早くなると思ったのに。。。
下記のRAIDカードを使用しています。
3ware Escalade 7000 Series ATA RAID Controller
ベンチマークソフトでは、結果が出ているので、自分のプログラムが最適化されていないか、問題があるように感じています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- USBメモリー・SDカード・フラッシュメモリー microSDカードに追記出来ない 9 2023/06/18 17:19
- 哲学 《自性清浄心》と《聖なる甘え》――ブッダとは目が覚めたという意味である―― 0 2023/05/23 04:15
- SSL・HTTPS 掲示板サイトへの書き込みができない件(ブラウザソフトを変えてもできない) 2 2022/11/20 10:48
- カードローン・キャッシング 楽天カードの増額の申し込みについて 昨日、 楽天カード株式会社から→ 拝啓 平素は楽天カードをご利用 1 2022/03/23 10:34
- その他(コンピューター・テクノロジー) スマホのデータを外付けSSDに書き込む時って外付けSSDの書き込み速度がいくら早くても (例えば70 2 2023/07/11 20:59
- その他(家計・生活費) カード会社の銀行登録中の遅延損害金 5 2023/05/27 10:18
- ドライブ・ストレージ 外付けCDドライブだけ音楽CDが読み込まない 3 2023/08/18 21:28
- その他(コンピューター・テクノロジー) 外付けSSDにスマホのデータを書き込むのではなく、外付けSSDをスマホに接続した状態でスマホを使って 4 2023/07/18 19:32
- その他(コンピューター・テクノロジー) データの転送速度は何で決まるのでしょうか?読み込み3000MB/Sで書き込み2000MB/Sの外付け 3 2023/07/14 22:13
- システム 外付けHDDの初期化について 4 2023/03/05 21:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
「Outlookが他のプログラムによ...
-
Excelで4096点以上のFFTの方法
-
読み込み中にアクセス違反が発...
-
VBAにてメール作成した際、一部...
-
このプログラミング誰か教えて...
-
binファイルってiphone専用です...
-
VBAでユーザーフォームが自動的...
-
Excelに埋め込んだVBAのプログ...
-
プログラムを斜めに並べる
-
次のプログラムは、円周率だの...
-
C言語で移動平均のプログラムを...
-
XnViewにwebpを「いつも開く」...
-
UWSCで指定のフォルダを開きたい。
-
Javaで2の0乗から-8乗まで表示...
-
画像を読み込むのと取り込むの...
-
テキストボックスのエンターキ...
-
3つの整数を読み込み昇順に並べ...
-
バンドパスフィルタのプログラ...
-
AutoCADを用いて板金展開図を自...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelに埋め込んだVBAのプログ...
-
Notepad++の関数リスト表示でC...
-
あるプログラムのコマンドライ...
-
これってほんとにみますか?
-
Excelで4096点以上のFFTの方法
-
「Outlookが他のプログラムによ...
-
自動クエリとはどういうもので...
-
VBAでユーザーフォームが自動的...
-
VBAにてメール作成した際、一部...
-
PICマイコンのコピー(クローン...
-
テキストボックスのエンターキ...
-
読み込み中にアクセス違反が発...
-
特定のwebサイトのタイトルや記...
-
未使用の変数を一括検索する方法
-
モジュール、アプリケーション...
-
COBOLの連絡領域について
-
Google カレンダーの商用利用
-
エクセルとワードをデスクトッ...
-
ドロップダウンリストの文字を...
-
binファイルってiphone専用です...
おすすめ情報