トップ «前の日(12-20) 最新 次の日(12-22)» 追記

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2007-12-21

_ [雑記]御用納め in CERN

明日から約2週間 CERNが閉鎖される。 すでに、今週に入ったあたりから人が減っていますが、今日は本当に少ないで すね。ABPの秘書室は午前中で業務終了の模様

_ [FreeBSD]ports japanese/Cannaが動かない in FreeBSD 7.0

NotePCを FreeBSD/i386 6.3-PRERELEASEから 7.0-BETA4へアップデートして ports類を再コンパイルしてから表題のとおり、「かんな」が 動かなくなりました。(cannastatとかはできるけど、まともにクライアントが 接続するとcannaserverが core dumpする Orz)

で、ホテルでごそごそ調査をしてましたが、結論からいうと物凄く単純なバグ で、いままで運良く動いていただけのようです。修正は、わずか 2文字追加で完了

--- lib/RK/ncache.c~	2003-09-17 10:50:30.000000000 +0200
+++ lib/RK/ncache.c	2007-12-21 02:05:00.000000000 +0100
@@ -26,7 +26,7 @@

 #include	"RKintern.h"

-#define	NCHASH		101
+#define	NCHASH		101UL
 #define	hash(x)		((int)((x)%NCHASH))

 static struct ncache	Nchash[NCHASH];

え?なんで直るかが判らないって? hash(x)は、整数型変数 xを 0〜(NCHASH-1)の整数にハッシュするための 関数で、それをインデックスにして Nchash[]配列をアクセスするコードが lib/RK/ncache.cにあります。で、修正前だと hash(x)が負になったりする ので、当然 signal 11で core dumpするわけです。

NCHASHでとる剰余だから、0〜(NCHASH-1)が返るのは当り前だと思う人は、 もう一度 Cの仕様書を読みましょう

ISO C99以前と以降で違いがあるのですが、 少なくとも整数演算における剰余の振舞は次の恒等式を満たします

a = (a / b) * b + (a % b)

さて、問題は整数値(a/b)がどうなるかです

少なくとも a, bともに正の場合は切り下げと定義されています。 が、その他の組合せの場合はどうでしょう。 驚くなかれ、ISO C99以前は未定義なため実装依存です。 ISO C99では、常に 0へ向かって丸めることになりました。 つまり、剰余 a % bの値域は -abs(b) + 1〜 abs(b) - 1なのです

で、問題のかんなの件ですが、実は hash()への入力は long型の アドレス情報で、FreeBSD 6.3-PRERELEASE -> 7.0-BETA4での VM空間の割り当て変更によって 2GB境界を跨いだために負に なっていました。

では、なぜこの修正で直るのでしょう? xが long型だとして、NCHASHを ULで修飾した unsigned long定数とすると 整数演算 x % NCHASHでは型の不一致を long型の xを unsigned longへ 昇格することで解決します。unsigned long型同士の剰余は 必ず unsigned longです。したがって、hash(x)が負になる問題は解決です。

ここでの剰余は、ハッシュとして使うのが目的なのでこれで解決ですが、 剰余 a % b を0若しくは正の値に正規化する必要があるときは、 剰余が負の場合に 商 a / bから abs(b)/bを引いて、 剰余に abs(b)を加える操作が必要になります。


2015-12-21

_ [雑記][FreeBSD]Skylakeを試す

ASRock Z170M Extreme4上で10.2-STABLE環境を試した結果

  • Legacy BIOSからの disk readが激しく遅い(kernelに制御が渡るまでが劇遅)
    • kernel側の AHCIドライバでは、普通に性能が出る
  • em driverで内蔵Intel NICを認識しない(I219-V)
    • 11-CURRENTには入っている(MFC待ち)
  • ACPI enableだと kernel起動中に固まる GPE stormが発生する
    • ACPIのエラーメッセージを流しつづけて先に進まない
    • ACPIのエラーメッセージが流れつづけてコンソールが使い物にならない
    • /var/log/messageが大変な事に
    • /var/run/dmesg.bootも洗い流されている orz
    • ACPIのエラーメッセージを流しつづけて先に進まない
    • ACPI disableだと普通に起動する
  • ACPI disabledだと estの attachに失敗する
    • Speed Stepまわりの拡張で仕様が変わっている?
    • ACPI disable時しか確認していない

動くには動くが、実用にはもう暫くかかりそう…

Intel 750(NVMe)に関しては、Readで 2700MB/secぐらい出てる


2017-12-21

_ [SAD][EPICS]EPICS CA Overhaul終了

MAIN trunkへのマージ完了

結果として、作業時間3週間・200 commit越えの大作パッチとなってしまった


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記