FreeBSD のスワップの実装が大きく変わっている2017年10月01日 12時44分21秒

FreeBSD のスワップの実装に大きな変更が加えられている。12-CURRENT は既に変更済みで、11-STABLE にも一ヵ月ぐらい前に変更が降りてきていた。11.2-RELEASE と共に出ることになる。

Replace global swhash in swap pager with per-object trie to track swap blocks assigned to the object pages. がその変更点で、blist にて管理していた各ブロック情報を、pctrie を用いての管理に書き換えられている。

良くは把握していないのだが、pctrie にはまだあれこれ関数が追加されているのを見ると、比較的新しい様だ。

昔の実装には struct swblock が使われていて、大きさは 276 だった。新しい実装で使われる構造体は二つになり、struct swblk で大きさは 72 で、swpctrie の大きさは 44。

ここ一ヵ月程 qq.com から来る迷惑メールが醜い2017年10月03日 16時13分59秒

ここ一か月程のメール受信量が、一日辺りで三百通を越えている事が多くなった。スパムホルダーに自動的に移動されている。しかし、あまりにも多いので、幾かの本文も目を通してみた。

メールは、数字@qq.com から来ていて、中国語の様だ。UTF-8 で HTML メールの様。

十年以上前に設定した bogofilter のおかげで、全てが自動的にスパム判定されていて、目に直接降れることは無いが、受信とサーバからの削除に時間が掛かるようになった。

dtrace で特定の関数が呼ばれた時のコールスタックを取得2017年10月04日 21時04分47秒

スワップの実装に大きな変更があったのと、元からの興味により sys/vm/swappager.c を覗いている。

swp_pager_meta_build がいつ呼ばれるか興味があったので、久しぶりに dtrace を使ってみることにした。stack と言う関数がある。

# dtrace -n 'fbt::swp_pager_meta_build:entry{ stack() }'
dtrace: description 'fbt::swp_pager_meta_build:entry' matched 1 probe
dtrace: buffer size lowered to 6m


  0  20744       swp_pager_meta_build:entry
              kernel`swap_pager_putpages+0x266
              kernel`vm_pageout_cluster+0x4e4
              kernel`vm_pageout_laundry_worker+0x9c0
              kernel`fork_exit+0x6a
              kernel`0xc10a1b20

カーネル内では関数ポインタを設定して、あちこちに飛ぶことも多いので一部のコールスタックは、見た目程明らかではない。この出力は、11-STABLE で、11.1-RELEASE とは既にかなり異なっている。

しかし、若干これらの関数を覗いてみたところ、一部が抜けているように見える。これから、動作を探りながら dtrace の実験もしてみたい。

FreeBSD 11-stable で i386 のカーネルがコンパイルできない2017年10月07日 20時06分36秒

久しぶりに、FreeBSD の 11-STABLE を svn up したところ、コンパイルエラーが出てつまずいている。
/usr/src/sys/i386/i386/mpboot.s:128:2: error: symbol 'KERNBASE' can not be undef
ined in a subtraction expression
 movl ((IdlePTD)-KERNBASE), %eax
 ^
*** [mpboot.o] Error code 1

dtrace で vm_thread_new の呼ばれる場所を探る2017年10月08日 11時02分38秒

11.1-RELEASE 後の 11-stable のコード。
$ dtrace -n 'fbt::vm_thread_new:entry{stack()}'
  0  55259              vm_thread_new:entry 
              kernel`thread_alloc+0x28
              kernel`sys_thr_new+0x67
              kernel`syscall+0xa4b
              kernel`0xc10a18fe

thread_alloc を見ると、thread_zone からメモリを割り当てているようだ。


struct thread*
thread_alloc(int pages)
{
...
    td = (struct thread *)uma_zalloc(thread_zone, M_WAITOK);

FreeBSD 11-STABLE symbol の 'KERNBASE' can not be undef の件2017年10月11日 12時30分08秒

取り合えず、どの変更が原因か調べる。

前回のカーネルバージョンは 324186。 324421 は既に駄目。 324300 も駄目。 324299 は大丈夫。

コンパイルエラーを手っ取り早く見付ける為なので、モジュールは全て無効にする。

% cd /usr/src
% make buildkernel -j 3 MODULES_OVERRIDE=''
もしかしたら、一ファイルだけをコンパイルする方法もあるのかも知れないが、これで十分。

問題を見付けたかと思ったら、rm /usr/obj/usr/src/sys/GENERIC/mpboot.o の後に、324300 を試したら大丈夫。324385 は大丈夫。324400 は大丈夫。324472 も大丈夫。結局 HEAD に戻しても大丈夫。ファイルを消したら何が変わったのだろうか…

FreeBSD の syslog の出力を他のサーバに送る2017年10月13日 12時50分24秒

FreeBSD のハンドブックに Configuring Remote Logging がある。例えば、ファイアーウォール等の細かい設定や注意点はそちらを参照の事。

syslog を受けたい側のサーバ側を 192.168.0.1 とする。そして、今回の syslog を送るクライアント側を 192.168.0.3 としよう。

ハンドブックの記述には、サーバの 192.168.0.1 側の /etc/syslog.conf に

+192.168.0.3
*.*     /var/log/192.168.0.3.log
に書くと記述されている。しかし、/etc/syslog.conf を見ると、/etc/syslog.d に入っているファイルも読み込むようだ。そこで、
$ cat > /etc/syslog.d/192.168.0.3.conf
+192.168.0.3
*.*     /var/log/192.168.0.3.log
^D
$ touch /var/log/192.168.0.3.log
として、設定ファイルを作成し、ログファイルも作成する。

その後、192.168.0.1 の /etc/rc.conf に

syslogd_enable="YES"
syslogd_flags="-a 192.168.0.3"
を記述。-v -v でログのレベルをあげることも出来る。

今度は 192.168.0.3 のクライアント側の設定。192.168.0.3 の /etc/rc.conf に

syslogd_enable="YES"
syslogd_flags="-s"
と書き、syslogd を起動するが、192.168.0.3 サーバでは syslogd のパケットを受け取らないように記述する。

paging in/out と swaping in/out の大まかな違い2017年10月14日 14時06分45秒

swap out はプロセスを主メモリから、二次メモリに書き出す事。page out はプロセスのメモリの一部を二次メモリに書き出す事。

そのため、swap out されたプロセスの実行は不可能になる。page out されただけなら、主メモリに残っている部分で、プロセスを実行することが出来る。paging は、プロセスのアドレス空間を細かく区切って管理すること。

システムでは、top などで swap と表示したり、スワップデバイス、スワップファイル等と呼んだりするので、page-out と混同しやすい。

ニューヨークも冷えてきた2017年10月17日 13時26分21秒

今週になってから急に冷えてきた。夏の終りは寒かったが、秋は暖かい日が続いていた。最近は夕方も早くなってきて、夏時間を適応中だが、午後七時ぐらいから暗くなってくる。

寒かったので、朝の自転車通勤に始めて薄手のジャンパーを羽織って出て行った。

ジョージワシントン橋が工事中で南側の通路が既に、二、三週間閉鎖されている。北側の階段付きの方を通るので、通勤時間が若干延びている。

WPA2 protocol の FreeBSD SA2017年10月18日 11時55分54秒

FreeBSD-SA-17:07.wpa が出されている。

現在のところ、修正が出されてたのは 11 系のみ。11-STABLE、11.1-RELEASE に 11.0-RELEASE。ports からも wpa_supplicant と hostapd も提供されているので、そちらに切替えて回避する事も出来るようだ。10 系への影響と対応は現在も調査中とのこと。

buildworld と buildkernel と書かれてはいるが、カーネルへの修正はバージョン番号を上げただけなので、カーネルは急ぐ必要はない。