Kernel

OSの中核となる基本コンポーネントプログラム。
実デバイスとプログラムの中継をしたり、デバイス制御を行う為に必要となる。
 
Linuxの場合は Kernel Archives で公開されている物を使っている事が多い。
他UNIXの場合は独自ビルドしたカーネルを利用している場合もある


PCI-E ASPM

PCI-Expressには省電力機能としてASPM(Active State Power Management)が実装されている。
対応しているマザーボード・OSを利用する事で、利用していないPCI-Eデバイスを停止させて省電力化する事が出来るが、
対応していない環境や仮想環境で利用すると、意図しないシステムダウンが発生する。
 
特に、古いサーバに最新のOSを利用した時に発生する事が多いのと、
ログが残らずにシステムダウンする為、原因特定に時間のかかる場合が多い
システムダウンを回避するには、ASPMをDisableした後にOSを再起動をする必要がある。
 

 ASPMの停止手順


Jool NAT64

IPv6限定ネットワークからIPv4へ通信を行うには様々な手段が存在するが、
その内の一つとしてDNS64+NAT64によるL3+L4変換が存在する。
Linuxで実装する場合はDNSキャッシュサーバをDNS64モードで動作させた上で、
KernelModuleにNAT64を組み込む必要がある。
 
Joolは、LinuxKernel用NAT64モジュールの一種であり、
RedHat、Debian、openSUSE、Raspbianなど様々な環境で動かす事が出来る。
 

 Jool組み込み方法


Kernel Build

最新のKernelを利用する時や、通常はサポートしていないモジュールを使う時、
Kernelを自前で再構成(ビルド)する事がある。
ビルドはスクリプトで自動化されているが、新規モジュールのON/OFFは自前で設定する必要がある。
なお、最新Kernelの機能追加・バグ修正はLKMLで公開されているので読んでおく。
 

 ビルド手順


ip conntrack

コンテンツ配信サーバ・ロードバランサ等でiptablesを用いてFirewall制御を行っている場合、
iptablesのセッション管理テーブルを使い切り、次の様なエラーがログが出る事がある。

ip_conntrack: table full, dropping packet
nf_conntrack: table full, dropping packet

この状態では新規のセッションを張る事が出来なくなり、NW通信速度が極端に低下してしまう。
事前に管理テーブル最大値を拡張する事でエラー発生を抑制する事が出来る。
 

 パラメータ


nonlocal bind

LinuxKernelではローカルバインドしているIPアドレスのみ接続待受(LISTEN)出来るが、
keepalivedでHA構成を取る場合、バインドしていないIPアドレスでLISTENするケースがある。
その時は、sysctl.confに下記を追記する事で、非バインドIPアドレスでもLISTEN可能になる。
 

 パラメータ


accept dad

IPv6アドレスを固定設定したインターフェースがある時、
重複アドレス検出(Duplication Address Detection)でIPv6アドレス重複を確認した後に割り当てられる。
 
サーバにIPv6アドレス指定でLISTENするアプリケーションがある場合、
DAD待ちによってIPv6アドレスの割り当てが行われていない状態で起動してしまい、
IPv6アドレス割り当て不備と判断されエラー終了する場合がある。
様々な環境で発生する可能性があるのが、NSDで発生した場合は次のエラーログが出力され停止する。

notice: nsd starting (NSD 4.3.3)
error: can't bind udp socket 2001:db8::1@53: Cannot assign requested address
error: server initialization failed, nsd could not be started

DAD待ちはsystemdの"network-online.target"でも発生する為、解決に向けて議論が交わされている。
暫定対処するにはKernelパラメータを変更して重複アドレス検出待ちを無効化する方法がある。
 

 パラメータ