物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

catchしなかった例外が発生した際の ***は動作を停止しました「WerFault」を表示させない・表示させる

f:id:onsanai:20160912070612p:plain

問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知されます。

を表示させないプログラムは以下のとおり。

#include <exception>
#include <Windows.h>
void main()
{
    SetErrorMode(SEM_NOGPFAULTERRORBOX);
    throw std::exception(); //例外を投げる
}

表示させたい場合は以下の通り。

#include <exception>
#include <Windows.h>
void main()
{
    SetErrorMode(0);//なくてもよいが
    throw std::exception(); //例外を投げる
}

ただし、レジストリで以下の設定をしておかないと SetErrorMode を変えても表示されないので注意

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting
Disabled DWORD 00000000
DontShowUI DOWRD 00000000

Windows Error Reporting がない場合は自分でキーを作成すべし。変更後は要再起動。

参照

SetErrorMode function (Windows)

逆引きWIN32API: 一般保護例外ダイアログを出さなくする方法 - seclan のほえほえルーム

[VC]子プロセスが落ちたのを検出する。(6) うずまき の なんとなくでいいのかも?

xxxEXEは動作を停止しました メッセージを表示させない | きりんの雑記

マルチスレッドにおける例外処理の受け渡し (VC++)

別スレッド中の例外を、本スレッドに渡す方法のメモ。動作確認はVisual Studio 2013 C++で行っている。

詳しい説明は スレッド間の例外転送 を参照してね。

#include <thread>
#include <iostream>

//マルチスレッド用の関数
void f1(std::exception_ptr &eptr) {
    try {
        throw std::exception("test");
    }
    catch (...) { //すべての例外を受ける
        eptr = std::current_exception();
    }
}

int main() {
    std::exception_ptr eptr;
    std::thread t1(f1, std::ref(eptr)); //スレッドを作成し参照でeptrを渡す
    t1.join(); //終了待ち

    try {
        if (eptr) {
            std::rethrow_exception(eptr); //例外を投げなおす
        }
    }
    catch (std::exception &ex) {
        std::cout << ex.what() << std::endl;
    }
    ::system("pause"); //デバッグ用のpause
}

WiMAX 2+は下り速度4.5Mbpsしか出ない

タイトルで何もかも終わったんだが、下り速度を測定してみた。まずは一番重要な速度の一つ、アニメのHD画質が見れるかどうか。

f:id:onsanai:20160904144227p:plain

確かにアニメのHD画質は見れるようだ。4.5Mbpsしか使っていないので、そもそも大したことはないんだが。

Re:ゼロから始める異世界生活のアニメ見放題 | dアニメストア

 

真面目に下り速度を測定してみる。

f:id:onsanai:20160904144535p:plain

6Mbpsか。これ、測定の時だけブーストしてないか?って疑いがあるので、信用しない方がいいと思う。

 

とにかく、速度制限に入ると本当に下り速度は4.5Mbpsになるから、WiMAX 2+を家庭用固定回線代わりに使うのはやめよう。遅すぎる。

 

次回、応答速度を測定予定

高速・安全・格安100TB ストレージを構築する

高速・安全・格安100TBストレージを構築してみよう。

安全なデータ領域を確保するためには、最低でもRAID1が必須だろう。

RAID 10を構築したいが、100TBもの領域をRAID0で構築しようとすると実データ領域で4倍必要になる。100TBの領域のために400TBの領域を確保するのは馬鹿らしい。

RAID 5では、大量のデータを高速で書き込む時に急激に速度が遅くなる問題が発生したので、ここでは除外する。

 

RAIDカードの選定だが、市販のRAIDカードでそこそこのクオリティなのがこの製品。

HighPointのページに詳細は書いてある。6 Gb/sで24ポート。バスインターフェースはPCIe 2.0 x 16。ポートはSFF-8087 (Mini-SAS) x6なのでこのタイプのケーブルが6本必要である。

HighPoint Global website

 

HDDはどうしよう。NAS対応縛りは必須だよね。

 

WD Red。以前は6TBまでだったが、執筆時点で8TBまで出たので容積あたりの容量がだいぶ増えた。35,725円(執筆時)。安いのはいいが、最近のHDD故障率レポートを見ると、安かろう悪かろうになりつつある。WD頑張れ。

Seagate IronWolf NAS。使ったことはないが10TBまで出ている。54,800円(執筆時)。今まで安かろう悪かろうのイメージだった海門ことSeagateの故障率が減っているのが特徴。

 WD傘下のHGST UltrastarAmazon価格で71,188円(執筆時)。故障率は非常に低いらしいが、高い。

 

ここではSeagateの10TBとWDの8TBを使ってみよう。

 

Seagateの10TB 54,800円を20台買って、110万円、RAID 1を考慮せずに200TB。

WDの8TB 35,725円を24台買って、86万円、RAID 1を考慮せずに192TB。

 

格安でいくならWDだけれど、故障率で交換のコストを考えるとSeagateの方がいいのかなあ。サーバー本体とRAIDカードを含めても130万ほどで収まるので、本当に安くなったものだ。

 

リンクはアフィを含むので注意。

10 Gbpsのテスト

10 Gbpsを導入したのでテストしてみた。

使ったのはIntelイーサネットサーバーアダプター X520-2とNETGEARのスイッチングハブGS752TXS。

www.intel.com

GS752TXS | Product | Support | NETGEAR

 

NETGEARのCuのSFP+のケーブル

とてもいいサーバー用パソコン

RAMディスク経由でCrystalDiskMark

以上。

 

さて、結果。

 

f:id:onsanai:20160819230537p:plain

 

CrystalDiskMarkを2プロセス同時に走らせて、左半分が2プロセスともRead、右半分が2プロセスともWrite、真ん中は片方がReadでもう片方がWrite。

 

送受信ともほぼ10 Gbpsを達成。うちもバックボーンが10 Gbpsになりました。気軽に10Gbpsを導入できる時代が来て感動。

 

次は、10GBASE-T対応のカテゴリ7のLANケーブルを使ってテストしてみる予定。