nfs の umount が返らない2017年07月02日 11時33分59秒

FreeBSD で最近よく /usr/src と /usr/obj を nfs でマウントしている。make installworld installkernel の後に、umount /usr/src /usr/obj をやるのだが、umount が返って来ない。ctrl-c をやるとファイルシステムは無くなっている。

どのバージョンから起き始めたのか分からないが、現在のシステムは FreeBSD 11.1-RC1。

ネットワークスイッチを一文で説明してみる2017年03月28日 11時59分16秒

「コンピュータの線を繋いで、二つのコンピュータにお話させる伝声管」でどうだろうか。

子供達はむしろ有線での通信を見たことが滅多に無い気がする。逆に簡単にまとめるのが難しい。

ハブは、電気信号の増幅と複数の接続に使い、信号は全ての方向に流れていたが、スイッチは Mac アドレスを用いて個体を認識するので、信号の衝突を防ぎ効率が良い。

Dynamic Programming を一文で説明してみる。2017年03月24日 19時17分33秒

Dynamic Programming は「大きな問題をいくつもの細かい問題に分けて解いていく方法」。

小さい子供達にも、教えられるようにと思って、簡潔な言葉でまとめてみることにした。少々語弊が入るかも知れないが、そこはある程度目をつぶって。

以前からこの名前の付け方は、芳しくないと思っていた。日本語では「動的計画法」などと言われる。時折、あれ、どんな技法だったけと、忘れてしまう。

簡単に要約すると、「分割統治法」。Divide and Conquer と言われる、大きな問題を小さな問題郡に分けて、単純化して再帰的に解くと言うこと。また、この再帰時に、前回求めた結果を再利用する「メモ化」も技法の一部に入る。

自宅からニューヨークのバスは 186 番2017年03月06日 14時00分51秒

ニューヨークへ行くバスの路線番号を探すのは何故だか大変。普段は乗らないので、必要になるたびに調べていたが、結構時間が掛かる。

一番近くのバス停に止まるのは 186 George Washington Bridge Bus Terminal の様だ。これは、一時間に、一、二本であまり本数は無いようだ。

橋を渡るだけなら、ジョージワシントン橋に行けば、多い時には毎分通過する。渋滞の時間を過ぎると本数は減るが、それでもまあまあ来る。

FreeBSD でカーネルスペースのメモリを調べる2016年08月01日 11時57分53秒

メーリングリストに流れたコマンド例。
% vmstat -m | sort -rnk 2,3 | head -n 10
    sysctloid  5257   167K       -     5394  16,32,64,128
       devbuf  3858  3107K       -     5107  16,32,64,128,256,512,1024,2048,4096,8192,65536
       acpica  2274   120K       -   122889  16,32,64,128,256,512,1024,2048,4096
          bus  1461    72K       -     8788  16,32,64,128,256,1024
      i915gem   878   155K       -   564247  16,32,64,128,256,512,1024,2048,4096,8192
         GEOM   655   101K       -     6016  16,32,64,128,256,512,1024,2048,8192,16384
         umtx   552    52K       -      552  64,128
       module   543    35K       -      544  64,128
     gem_name   473    16K       -     6444  16,2048
     drm_sman   437    28K       -     4193  64
         kobj   385   770K       -     1202  2048
      kdtrace   344    69K       -     1729  64,256
vmstat の -m でカーネルメモリの割当を表示し、第二、第三コラムで並べ直している。出力は私の機械での例。

古い機種で FreeBSD が動かなくなっていた2016年07月06日 21時21分51秒

FreeBSD 10.1 は起動できるが、10.2 から駄目なようだ。ほとんど電気を付けていなかった機種なので、最近になって気が付いた。

暇を持て余すようだったら、原因の切り分けをしてみたいものだが…。取り敢えず、stable/10 の 276686 辺りから探る必要がありそう。

10.1 RELEASE は不安定な気がする2015年02月01日 10時03分04秒

FreeBSD 10.1 RELEASE に移行して結構たつが、やっぱりパニックが起きる。三台ある機械の中で一台でしか再現がしない。zfs などメモリを使う物によわい。また Xorg を利用中にも落ちることがある。こちらも同じカーネルメモリの枯渇。

vm_thread_new: kstack allocation failed

がその時に出るエラー。

最初は Xorg や zfs 、vt コンソールを疑っていたが、どうもそうではないようだ。単純に make -C /usr/src buildworld -j 300で、問題を起こせる。vfork が失敗して、プロセスを作ることが出来なくなる。

他の二台で試したが、-j 300 でも大丈夫。問題のある機械で 11-CURRENT と 10.0-RELEASE を試したが、こちらも問題無し。10.1-RELEASE にのみに起きているみたいだ。

FreeBSD 10.0 で動かなくなったもの2014年06月18日 10時42分35秒

FreeBSD 10.0 の動作確認をしているが、ggated/ggatec の GEOM gate と mount_ntfs が動いていないようだ。ただ、どちらの二つとも長年パッチを当あてていたので、手元の問題の可能性の方が高い。

GGATE は rctp を使ったり、ipv6 のサポートとその他細々したのから独自修正も当てていた。8 系から 9.x だか 10.x にだかの変更で、スペースの量の調整が行われ、パッチが当たらなくなり、面倒臭くなってこちらの変更は取り敢えず捨てた。なので、素の状態のはずだが。もう少し様子を見る必要がある。

mount_ntfs の方は、mount のファイルシステムの認識を弄っていたので、直接ではないが、もしかしたら影響があったのかも知れない。外部 mount の呼び出しで、誤認識を良くしていたから書き換えていたのだが、nmount で新たにサポートが増えていたとしたら、おかしくなっているだろう。

そんなわけで今回は自分の環境の防備録。

std::stream での読み込みの例2012年07月29日 11時15分51秒

std::stream で入力を処理したいが、読み込みのループはちょくちょく使うのでメモ。istream::getline を使うので、文字入力用。

この例では、std::cout で出力。std::cout を任意に書き換えて使う。


void process_input(const char* filename)
{
    char buffer[1024];
    std::istream *in = NULL;
 
    if(filename == NULL || "-" == filename)
        in = &std::cin;
    else
        in = new std::ifstream(filename);
 
    while(in->good())
    {
        in->getline(buffer, sizeof(buffer));
        if(*buffer == 0)
            break;
        std::cout << buffer << std::endl;
    }
    if(in != &std::cin)
        delete in;
}

buffer の最初が 0 であれば、処理を止める。また、good() で無い場合も終了。これは EOF も含まれる。

なお、ios::good() と !ios::bad() は等価では無い。ios::bad() は EOF を含めないからだ。

snapshot ディレクトリ2011年03月29日 06時23分04秒

どんなディスクか、ファイルシステムを使っているのかは知らないが、現在利用中のシステムでは、自動的にバックアップが取られているようだ。

$ ls .snapshot
hourly.0                         hourly.4
hourly.1                         hourly.5
hourly.2                         
hourly.3

唯一の欠点は .snapshot にアクセスしないと見られないのだが、ディレクトリ名をよく忘れること。.backup 等を探して時間を潰してしまう。