[FreeBSD-users-jp 89659] Re: エラ ーが発生するディスクの該当 ファイル特定方法はないで すか ?

2006-06-12 スレッド表示 Kazumaro Aoki
From: Seiichi Miyagawa [EMAIL PROTECTED]
Subject: [FreeBSD-users-jp 89657] Re: エラーが発生するディスクの該当ファイル特定方法はないですか ?
Date: Thu, 08 Jun 2006 10:39:26 +0900

  //---[[FreeBSD-users-jp 89656] Re: エラーが発生するディスクの該当ファイル特定方法はないですか ?]
 //[2006/06/07 From:Kazumaro Aoki]
 
 | エラーの出方によるかと思いますけど、実はその場所も、もう一度書き込むと
 | かすると、今後、問題が出なくなるかもしれません。
 | 
 | ddとかでread errorが必ず出ることが確認できた場所があるHDについて、ここ
 | 数年での経験では、そこに書き込みをすると、その後は問題無く読み書きが出
 | 来るようになるHDが半数以上ありました。
 | まぁ何かしらの地雷は抱えている可能性は高いので、あんまり重要な用途には
 | 使えないかとは思いますけど。
 
 最近のHDDは自動的に代替セクター処理をしているからでしょう。
 
 代替用のセクタが有るうちは書き込み時に代替処理をしてちゃんと書き込めれば
 正常終了します。

いわれてみたたら確かにそうですね。
今度、そういう状況が起きたらportsのsmartmontoolsで、置き換えセクタが増
えているかどうか確認してみたいと思います。

青木和麻呂@神奈川県在住


[FreeBSD-users-jp 89660] [HELP] bge ドライバがリンクステータス の取り出しに失敗 する。

2006-06-12 スレッド表示 Kouji Ito
こんにちは、いつもお世話になっています、伊藤です。
ちょっと長文ですが、おつき合い頂ければと思います。


bgeドライバのパッチを作成して、send-prしたのですが、
私の英語が拙いせいか、あまり相手にしてもらえないので
どなたか、応援をお願いしたいのですが。

http://www.freebsd.org/cgi/query-pr.cgi?pr=98738

「bgeドライバの問題について」

5.5-RELEASE(i386), 7.0-CURRENT(i386),おそらく、6.X(i386)も
同様だと思うのですが、SMPカーネル + マルチプロセッサ(HTT
でも可)という環境において、
複数のプロセスが同時に、bgeドライバを通してNICのリンクステータ
スを取得しようとした場合、リンク状態が正常であるにも関わらず、
ごくまれに異常を返すという現象を確認しています。

具体的には、ifconfig コマンドを同時に複数実行した場合、非常にまれ
ですが、statusフィールドが no carrierを返して来るケースがあります。
(正常であれば、activeとなる。)

カーネルオプションから、 option SMP を抜いたカーネルでは
この現象が発生しないことから、ドライバのソースを追ったところ、
リンク状態を取得する処理にロックが掛けられていなかったため、
ロックを掛ける処理を追加したところ、現象は発生しなくなりました。

「再現させるためには」
(1)SMPカーネルを使う。
(2)マルチプロセッサもしくは、HTTで論理CPUを2つに設定する。
(3)bgeドライバを使用するNICを用意し、HUBに差しリンク状態を正常にする。
(4)以下のシェルスクリプトを2つ、同時に実行する。
タイミングさえ合えば、以下の様にぐるぐる回さなくても良いと思うんですが、
かなり微妙なタイミングなので、回しちゃってます。

 #!/bin/csh
 while 1
set aaa=`ifconfig bge0 | grep active | wc -l`
if ($aaa == 1) then
echo bge0 Link OK
else
echo bge0 Link NG
exit
endif
 end
(5)しばらく待っていると、bge0 Link NGのメッセージが表示される。
ちなみに、fxpや、emでは、こういった現象は発生しませんでした。

「パッチに関して」
要は、 case SIOCGIFMEDIAの処理を、BGE_LOCKと、BGE_UNLOCKで
囲んだだけです。

*** if_bge.c.orig   Fri Jun  9 14:34:29 2006
--- if_bge.cFri Jun  9 14:34:58 2006
***
*** 3325,3330 
--- 3325,3331 
break;
case SIOCSIFMEDIA:
case SIOCGIFMEDIA:
+   BGE_LOCK(sc);
if (sc-bge_tbi) {
error = ifmedia_ioctl(ifp, ifr,
sc-bge_ifmedia, command);
***
*** ,3338 
--- 3334,3340 
error = ifmedia_ioctl(ifp, ifr,
mii-mii_media, command);
}
+   BGE_UNLOCK(sc);
break;
case SIOCSIFCAP:
mask = ifr-ifr_reqcap ^ ifp-if_capenable;

「その他」
bgeと、emでリンク状態の取り出し時間を計ってみると、
emの方が10倍程速いです。
処理的には、NICからステータスを取り出すだけなので
あまり差異はないと思っていたんですが。
ちょっと不思議です。(mii 側に処理があるからかなぁ。)


[FreeBSD-users-jp 89661] Re: [HELP] bge ドライバがリンクステータス の取り出しに失敗する。

2006-06-12 スレッド表示 Hajimu UMEMOTO
  梅本です。

 Tue, 13 Jun 2006 11:03:36 +0900 の刻に「kouji」、すなわち
 Kouji Ito [EMAIL PROTECTED] 氏曰く

kouji bgeドライバのパッチを作成して、send-prしたのですが、
kouji 私の英語が拙いせいか、あまり相手にしてもらえないので
kouji どなたか、応援をお願いしたいのですが。

kouji http://www.freebsd.org/cgi/query-pr.cgi?pr=98738

  9日に出されたばかりですよね。気軽にもう少し待たれてみては如何がでしょ
うか。:)
  反応がなさげなら、current@, net@ あたりに、PR 投げてあるのでよろしく
みたいなメールを投げてみると良いかも。

kouji 要は、 case SIOCGIFMEDIAの処理を、BGE_LOCKと、BGE_UNLOCKで
kouji 囲んだだけです。

  他のドライバを見ても、ifmedia_ioctl() の呼び出しまわりにはロックを掛
けてないですね。他のドライバでも起こりそうな気がするのですが、どなたか
検証できないでしょうか?
  ifmedia_ioctl() 側で面倒を見るようにするのが正しいような気がします。

-- 
梅本 肇 @ インターネット互助会横浜  http://www.imasy.org/~ume/
[EMAIL PROTECTED]  [EMAIL PROTECTED],jp.}FreeBSD.org
プログラムは書いた人の意図ではなく書かれた通り動く  I hate Modula-3 :-)