NTTの光ルータ(PR-400KI)に自宅のDNSサーバを登録する方法

うちの光ルータは、PR-400KIというNTT借用のもので、
これがDHCPサーバも兼ねています。

ただ、この状態だとAndroidなどのDHCPクライアントがIPアドレスを要求した際に
DNSサーバの割り当てがPR-400KI固定になってしまいます。
(192.168.29.1等)

うちの環境だと外向けのDDNSのドメインと、内部ドメインが同じ「nsb.homeip.net」なので、自宅内からnsb.homeip.netで名前解決すると外部IPアドレスが返ってきてしまいます。

このままでは自宅内のDNSサーバでの名前解決が利用できないため、
Active Directory参加に失敗したり、
自宅内のDHCPクライアントから、自分のサイトが見えない状態になったりします。

自分のサイトが見えない状態の対策として、自宅内にWebProxyサーバを構築して、Proxyサーバのhostsでnsb.hopmeip.netのエントリーを追加しておいて、
自宅内クライアントではProxyサーバを通してアクセスすることでテストしていました。

 

ここで設定でPR-400KIのDNSに、ドメイン名に対応したDNSサーバを設定することができるようです。

続きを読む →

Views: 2092

カテゴリー: 未分類 | コメントする

電子辞書Brainをいじる まとめページ

電子辞書Brain に関する本プログでのまとめページです。

 

今後試したいもの

Brainux系

sharp-brain-keyboard-overlay

Brainuxでは、標準外のキーボードなので、Shiftや記号キーを組みわせて各種キーを入力できますが、よく使うキーはともかく、これを覚えるのは少し大変です。

これを、Shiftや記号キーを押している間、れに対応するキーの配置をオーバーレイとして配置してくれるツールだそうです。

 

GitHub – EndoHizumi/brain-deck: カスタマイズ可能な左手デバイスデーモン for brainux · GitHub

brainuxをベースに左手デバイスにするアプリとのことです。
USBキーボードとして振る舞えるように、Brainuxのカーネルのビルドが必要とのことです。

 

GitHub – EX-word画面の表示・保存・録画 · GitHub

EX-wordのプロジェクター接続機能を使って、画面を取り出し、画面キャプチャや録画ができるPCアプリとのことです。

Brainux用のアプリも別に用意されています。

 

GitHub – kitazaki/brainux-audio · GitHub

Brainux audio — PW-SH1〜SH7
PW-SH1〜SH7で本体スピーカー再生を確認した、Linux 5.4共通カーネルと音声モジュールの配布物です。音量機能追加前の保存版です。

共通カーネル: 5.4.149-brain-audio-common-test1
PW-SH1/SH2: YMU818B、カードID BrainYMU818B
PW-SH3〜SH7: BU26154、カードID BrainBU26154

カーネルとモジュール一式は共通、DTBは機種別です。起動時にDTの情報から適切な音声モジュールを選びます。
既存のLinux 5.4版Brainux SDカードとsystemd環境が必要です。OS全体のイメージではありません。

ビルドは不要です。
GitHubの「Code → Download ZIP」で取得し、Brainux上で展開したディレクトリから sudo sh install.sh を実行すると、バックアップを作成してカーネル・DTB・モジュール・自動ロード設定を配置します。完了後に手動で再起動してください。

メモ

メモです

user@brain:~$ mkdir brainux-audio
user@brain:~$ cd brainux-audio/
user@brain:~/brainux-audio$ git clone https://github.com/kitazaki/brainux-audio.git
Cloning into 'brainux-audio'...
remote: Enumerating objects: 136, done.
remote: Counting objects: 100% (136/136), done.
remote: Compressing objects: 100% (90/90), done.
remote: Total 136 (delta 43), reused 111 (delta 21), pack-reused 0 (from 0)
Receiving objects: 100% (136/136), 7.68 MiB | 358.00 KiB/s, done.
Resolving deltas: 100% (43/43), done.
Updating files: 100% (100/100), done.
user@brain:~/brainux-audio$ ls
brainux-audio
user@brain:~/brainux-audio$ cd brainux-audio/
user@brain:~/brainux-audio/brainux-audio$ ls
boot                 KERNEL_RELEASE
brain-audio-load     modules
brain-audio.service  modules-5.4.149-brain-audio-common-test1.tar.gz
build-info           README.md
check-audio.sh       restore.sh
COPYING              SHA256SUMS
docs                 source
install.sh           testing
user@brain:~/brainux-audio/brainux-audio$ sudo sh install.sh
[sudo] password for user:
.gitignore: OK
COPYING: OK
KERNEL_RELEASE: OK
README.md: OK
boot/imx28-pwsh1.dtb: OK
boot/imx28-pwsh2.dtb: OK
boot/imx28-pwsh3.dtb: OK
boot/imx28-pwsh4.dtb: OK
boot/imx28-pwsh5.dtb: OK
boot/imx28-pwsh6.dtb: OK
boot/imx28-pwsh7.dtb: OK
boot/zImage: OK
brain-audio-load: OK
brain-audio.service: OK
build-info/Module.symvers: OK
build-info/build.log: OK
build-info/kernel.config: OK
build-info/module-info/brain-bu26154.ko.txt: OK
build-info/module-info/snd-soc-mxs-ymu818b.ko.txt: OK
build-info/module-info/snd-soc-ymu818b.ko.txt: OK
build-info/source-commit.txt: OK
build-info/toolchain.txt: OK
check-audio.sh: OK
docs/INSTALL.md: OK
docs/VERIFICATION.md: OK
install.sh: OK
modules/5.4.149-brain-audio-common-test1/kernel/drivers/input/touchscreen/tsc2007.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/drivers/rtc/rtc-ds1307.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/drivers/spi/spi-bitbang.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/drivers/spi/spi-gpio.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/fs/cachefiles/cachefiles.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/fs/fscache/fscache.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/lib/crc7.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/sound/soc/codecs/snd-soc-ymu818b.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/sound/soc/mxs/brain-bu26154.ko: OK
modules/5.4.149-brain-audio-common-test1/kernel/sound/soc/mxs/snd-soc-mxs-ymu818b.ko: OK
modules/5.4.149-brain-audio-common-test1/modules.builtin: OK
modules/5.4.149-brain-audio-common-test1/modules.builtin.modinfo: OK
modules/5.4.149-brain-audio-common-test1/modules.order: OK
modules-5.4.149-brain-audio-common-test1.tar.gz: OK
restore.sh: OK
source/README.md: OK
source/brain-bu26154.c: OK
source/build-source-delta.patch: OK
source/imx28-pwsh1.dts: OK
source/imx28-pwsh2.dts: OK
source/imx28-pwsh3.dts: OK
source/imx28-pwsh4.dts: OK
source/imx28-pwsh5.dts: OK
source/imx28-pwsh6.dts: OK
source/imx28-pwsh7.dts: OK
source/mxs-ymu818b.c: OK
source/ymu818b.c: OK
testing/common-test3/BU26154-HEADPHONE.md: OK
testing/common-test3/COPYING: OK
testing/common-test3/KERNEL_RELEASE: OK
testing/common-test3/README.md: OK
testing/common-test3/SHA256SUMS: OK
testing/common-test3/boot/imx28-pwsh1.dtb: OK
testing/common-test3/boot/imx28-pwsh2.dtb: OK
testing/common-test3/boot/imx28-pwsh3.dtb: OK
testing/common-test3/boot/imx28-pwsh4.dtb: OK
testing/common-test3/boot/imx28-pwsh5.dtb: OK
testing/common-test3/boot/imx28-pwsh6.dtb: OK
testing/common-test3/boot/imx28-pwsh7.dtb: OK
testing/common-test3/boot/zImage: OK
testing/common-test3/brain-audio-load: OK
testing/common-test3/brain-audio.service: OK
testing/common-test3/check-audio.sh: OK
testing/common-test3/install.sh: OK
testing/common-test3/kernel.config: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/drivers/input/touchscreen/tsc2007.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/drivers/rtc/rtc-ds1307.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/drivers/spi/spi-bitbang.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/drivers/spi/spi-gpio.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/fs/cachefiles/cachefiles.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/fs/fscache/fscache.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/lib/crc7.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/kernel/sound/soc/mxs/brain-bu26154.ko: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/modules.builtin: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/modules.builtin.modinfo: OK
testing/common-test3/modules/5.4.149-brain-audio-common-test3/modules.order: OK
testing/common-test3/modules-5.4.149-brain-audio-common-test3.tar.gz: OK
testing/common-test3/restore.sh: OK
testing/common-test3/source/README.md: OK
testing/common-test3/source/brain-bu26154.c: OK
testing/common-test3/source/build-source-delta.patch: OK
testing/common-test3/source/headphone-input.patch: OK
testing/common-test3/source/imx28-pwsh1.dts: OK
testing/common-test3/source/imx28-pwsh2.dts: OK
testing/common-test3/source/imx28-pwsh3.dts: OK
testing/common-test3/source/imx28-pwsh4.dts: OK
testing/common-test3/source/imx28-pwsh5.dts: OK
testing/common-test3/source/imx28-pwsh6.dts: OK
testing/common-test3/source/imx28-pwsh7.dts: OK
testing/common-test3/source/mxs-ymu818b.c: OK
testing/common-test3/source/ymu818b.c: OK
testing/common-test3/source-commit.txt: OK
testing/common-test3/toolchain.txt: OK
Backup: /home/user/backup-brain-audio-common-lgHO84Nl
Created symlink '/etc/systemd/system/multi-user.target.wants/brain-audio.service' → '/etc/systemd/system/brain-audio.service'.
Installed 5.4.149-brain-audio-common-test1. Backup: /home/user/backup-brain-audio-common-lgHO84Nl
No reboot or playback was started. Reboot manually, then run sudo sh check-audio.sh.
user@brain:~/brainux-audio/brainux-audio$
user@brain:~/brainux-audio/brainux-audio$ sudo reboot
user@brain:~/brainux-audio/brainux-audio$



user@brain:~$ cd brainux-audio/
user@brain:~/brainux-audio$ cd brainux-audio/
user@brain:~/brainux-audio/brainux-audio$ sudo sh check-audio.sh
--- Kernel / device ---
5.4.149-brain-audio-common-test1
SHARP Brain PW-SH4

--- Cards / PCM ---
 0 [BrainBU26154   ]: Brain-BU26154 - Brain-BU26154
                      Brain-BU26154
**** List of PLAYBACK Hardware Devices ****
card 0: BrainBU26154 [Brain-BU26154], device 0: Playback brain-bu26154.0-001a-0 [Playback brain-bu26154.0-001a-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
--- Audio modules ---
brain_bu26154          16384  1
--- Autoload service ---
● brain-audio.service - Load Brain audio modules for the active device tree
     Loaded: loaded (/etc/systemd/system/brain-audio.service; enabled; preset: enabled)
     Active: active (exited) since Sun 2026-10-18 23:31:36 JST; 13min ago
 Invocation: 488a1f598e754302802751682ef2f01b
    Process: 237 ExecStart=/usr/local/sbin/brain-audio-load (code=exited, status=0/SUCCESS)
   Main PID: 237 (code=exited, status=0/SUCCESS)
        CPU: 468ms

Oct 18 23:31:32 brain systemd[1]: Starting brain-audio.service - Load Brain audio modules for the active device tree...
Oct 18 23:31:36 brain systemd[1]: Finished brain-audio.service - Load Brain audio modules for the active device tree.
--- Relevant kernel messages ---
[   58.617186] brain-bu26154 0-001a: speaker input enabled; reset not specified, amplifier class AB
[   58.787603] platform brain-audio: brain-bu26154.0-001a <-> 80042000.saif mapping ok
[   58.983430] platform brain-audio: brain-bu26154.0-001a <-> 80046000.saif mapping ok
user@brain:~/brainux-audio/brainux-audio$


 

 

WinCE系

その他アプリ-BrainGate

AndroidスマホでRNDISを認識させてインターネットを共有するアプリ
外出先でもケーブル一本でBrainをインターネットに繋ケルいことができるそうです。
(CDC-NCMになってしまった最新版を除く)BrainuxとWindowsCEで使用できるとのことです

追加で、WinCEでRNDISを有効にしてくれるツールも公開されています。
(dllを自ビルドしなくてもいいようです。)

 

最近の更新履歴

(日付降順に変更しました)

2026/11/03
・以下のページを追加
 電子辞書Brainをいじる (xx) Brainux高速化メモ

2026/11/01
・以下のページを追加
 電子辞書Brainをいじる (xx) Brainuxでアプリをインストールして遊ぶ
  – ARMv5 (Brainux) 用ビルドオプション最適化テンプレート案

2026/10/18
・Brainux(Trixie)に、以下の更新を実施
 libsdl1.2をtrixie用にビルドする(採用)
 pulseaudioの任意起動の方法について

2026/10/12
・エミュレータを一つ追加
 ◎ Picodrive(ARMコアに特化した複数のSegaゲーム機軽量エミュレータ)

2026/10/04
・ゲーム1つ追加(大幅な改造を実施済)
 ◎ Balder 2D 無重力下の二次元シューティングゲーム
   (改造版ならTrixieでも実行は可能)

2026/09/27
・ゲーム1つ追加(SDL2アプリのSDL1.2版を探してビルドで実行成功)
 △ blockattack テトリスにインスパイアされたパズルゲーム(要SDL1.2版ビルド)

2026/09/19
・ゲーム1つ追加
 ○ Blob Wars: Metal Blob Solid プラットフォームシューティングゲーム

2026/09/16
・ゲーム1つ追加
 ○ zangband  シングルプレイヤー、テキストベース、ローグライクゲーム

 ちょっとネタ切れになったので、ここからは不定期になる予定。

2026/09/15
・ゲーム1つ追加
 △ kball 家族みんなで遊べる技と反射神経のゲーム

2026/09/14
・ゲーム1つ追加
 ○ xtron X11 向け Tron ゲーム

2026/09/13
・ゲーム1つ追加
 ◎ xsystem35 X ウィンドウシステム向け System 3.5 ゲームエンジン

2026/09/12
・ゲーム1つ追加
 ○ xsol X Window system 用ソリティア

2026/09/11
・ゲーム1つ追加
 ○ xskat 三人プレイカードゲーム “Skat”

2026/09/10
・アプリ1つ追加
 ○ xphoon ルートウィンドウに月の画像を設定する

2026/09/09
・ゲーム1つ追加
 ◎ xmountains X 用のフラクタル景観ジェネレーター

2026/09/08
・ゲーム1つ追加
 ○ xletters 落下する単語を着陸前にタイプせよ

2026/09/07
・アプリ1つ追加
 ○ xjokes X11のジョーク

2026/09/06
・ゲーム1つ追加
 △ xfrisk 人間又は AI と risk をプレイするためのサーバおよび X11 版クライアント

2026/09/05
・アプリ1つ追加
 ○ xflip 鏡像又は画面が溶けるプログラム

2026/09/04
・アプリ1つ追加
 ○ xcowsay グラフィカルに設定可能なしゃべる牛

2026/09/03
・ゲーム1つ追加
 ○ xball ウィンドウ内で跳ね回るボールをシミュレート

2026/09/02
・ゲーム1つ追加
 ○ wmpuzzle WindowMaker dock app 版 4×4 サイズのジグソーパズル

2026/09/01
・ゲーム1つ追加
 △ warmux  2Dマップ上で行われるターン制砲撃ゲーム

2026/08更新分

2026/08/31
・ゲーム1つ追加
 ○ vitetris 仮想端末 *tris クローン

2026/08/30
・ゲーム1つ追加
 △ ironseed 宇宙を舞台にしたSF探検/戦略アドベンチャーゲーム

2026/08/29
・ゲーム1つ追加
 ○ angband  シングルプレイヤー、テキストベースのダンジョンシミュレーションゲーム

2026/08/28
・ゲーム1つ追加
 ◎ viruskiller  コンピュータに侵入するウィルスを退治するゲーム

2026/08/27
・ゲーム1つ追加
 ○ trader 星間貿易のシンプルなゲーム

2026/08/26
・ゲーム1つ追加
 ○ tetzle ジグソーパズルゲーム

2026/08/25
・ゲーム1つ追加
 △ tenmado 赤と青に分かれた世界でのハードコアシューティングゲーム

2026/08/24
・ゲーム1つ追加
 〇 tanglet ボグルをベースにしたシングルプレイヤー向け単語探しゲーム

2026/08/23
・ゲーム1つ追加
 ○ slashem-sdl Nethack の一種

2026/08/22
・ゲーム1つ追加
 ◎ reminiscence Flashbackゲームエンジンの無料実装

2026/08/21
・ゲーム1つ追加
 〇 snake4 スネークゲーム

2026/08/20
・ゲーム1つ追加
 〇 pysolfc 1000種類以上のソリティアカードゲームを収録

2026/08/19
・ゲーム1つ追加
 〇 pysiogame 子供向け教育アクティビティパック

2026/08/18
・ゲーム1つ追加
 △ puzzle-jigsaw タイルパズルゲーム

2026/08/17
・ゲーム1つ追加
 △ pmars ポータブルMARS、コア戦争シミュレーター

2026/08/16
・ゲーム1つ追加
 ◎ pixbros  バブルボブル、スノーブラザーズ、タンブルポップに触発された 2D ゲーム

2026/08/15
・ゲーム1つ追加
 △ piu-piu コマンドライン用のbashで書かれた横スクロールゲーム。

2026/08/14
・ゲーム1つ追加
 〇 petris ピーターのテトリス – Tetris(TM) クローン

2026/08/13
・ゲーム1つ追加
 ◎ pente X およびコンソール用五目並べゲーム

2026/08/12
・ゲーム1つ追加
 ◎ peg-solitaire ペグを使った1人用ボードゲーム

2026/08/11
・ゲーム1つ追加
 ◎ pachi Pachi el marciano を主役にしたプラットフォームゲーム

2026/08/10
・ゲーム1つ追加
 ○ oneisenough ボールの壮大な戦いを描いた2Dプラットフォームゲーム

2026/08/09
・ゲーム1つ追加
 〇 nsnake 端末で遊べる定番のヘビゲーム

2026/08/07
・ゲーム1つ追加
 △ netpanzer オンラインマルチプレイヤ戦略戦ゲーム

2026/08/06
・ゲーム1つ追加
 ○ morris 9人制のモリスゲーム

2026/08/05
・ゲーム1つ追加
 ○ moria 無限ダンジョンを備えたローグライクゲーム、別名ウモリア

2026/08/04
・ゲーム1つ追加
 ◎ mokomaze OpenMoko FreeRunner用の迷路ボールゲーム

2026/08/03
・ゲーム1つ追加
 △ micropolis リアルタイム都市管理シミュレーター

2026/08/02
・ゲーム1つ追加
 △ matanza 宇宙アスキー戦争ゲーム

2026/08/01
・ゲーム1つ追加
 ○ mancala Mancala と呼ばれるシンプルなボードゲームの実装

2026/07更新分

2026/07/31
・ゲーム1つ追加
 ○ mah-jong オリジナルの麻雀ゲーム

2026/07/30
・ゲーム1つ追加
 ◎ magicmaze モンスターを避けながら乙女を救出せよ

2026/07/29
・ゲーム1つ追加
 ○ lskat スカット中尉カードゲーム

2026/07/28
・ゲーム1つ追加
 △ lordsawar 人気SSGゲーム「ウォーロードII」のクローン

2026/07/27
・ゲーム1つ追加
 ○ littlewizard 子どもの発達環境

2026/07/26
・ゲーム1つ追加
 △ late ボールを捕まえるシンプルなゲーム

2026/07/25
・ゲーム1つ追加
 ○ ktuberling スタンプお絵かきおもちゃ

2026/07/24
・ゲーム1つ追加
 ○ ksquaresksquares 点と四角のゲーム

2026/07/23
・ゲーム1つ追加
 △ ksirk リスク戦略ゲーム

2026/07/22
・ゲーム1つ追加
 〇 kshisen Shisen-Sho solitaire game

2026/07/21
・ゲーム1つ追加
 〇 konquest シンプルなターン制ストラテジーゲーム

2026/07/20
・ゲーム1つ追加
 ◎ knavalbattle 戦艦ボードゲーム

2026/07/19
・エミュレータを1つ追加
 gnuboy-x gnuboy 用 X 向けバイナリ – ゲームボーイエミュレータ 

2026/07/18
・エミュレータを1つ追加
 gnuboy-sdl gnuboy – ゲームボーイエミュレータ – 用 SDL 版バイナリ

2026/07/16
・ゲーム1つ追加
 〇 kmahjongg 麻雀ソリティアゲーム

2026/07/15
・ゲーム1つ追加
 〇 klines カラーラインゲーム

2026/07/14
・ゲーム1つ追加
 〇 klickety 「さめがめ」パズルゲーム
・ゲームについて、ページが長すぎるようになってきたので順次分割していきます。

2026/07/13
・ゲーム1つ追加
 ◎ kjumpingcube シンプルな戦術ゲーム

2026/07/12
・ゲーム1つ追加
 ◎ killbots クラシックなBSDコンソールゲーム「ロボット」の移植版

2026/07/11
・ゲーム1つ追加
 △ khangman Hangman 単語パズル

2026/07/10
・ゲーム1つ追加
 〇 kgames Xawベースのゲームの由緒あるセレクション

2026/07/09
・ゲーム1つ追加
 ◎ kfourinline コネクトフォーゲーム

2026/07/08
・ゲーム1つ追加
 △ kapman パックマンのクローン

2026/07/07
・ゲーム1つ追加
 ○ kanagram  単語並べ替えパズル

2026/07/06
・ゲーム1つ追加
 ◎ hitori  数独に似た論理パズルゲーム

2026/07/05
・アプリ1つ追加
 〇 golly ハッシュライフアルゴリズムを使用したライフゲームシミュレーター

2026/07/04
・ゲーム1つ追加
 ○ granatier ボンバーマンのクローン

2026/07/03
・ゲーム1つ追加
 ○ gnome-taquin タイルを移動させて所定の位置に到達させるゲーム

2026/07/02
・ゲーム1つ追加
 △ gnome-sudoku GNOME向けの数独パズルゲーム

2026/07/01
・ゲーム1つ追加
 △ gnome-robots 改良された古いBSDロボットゲーム

2026/06更新分

2026/06/30
・ゲーム1つ追加
 △ gnome-mines GNOME向けの人気のマインスイーパー パズルゲーム

2026/06/29
・ゲーム1つ追加
 ○ gnome-mastermind GNOME 用の Mastermind™ クローン

2026/06/28
・ゲーム1つ追加
 △ gnome-2048 スライド式タイルパズルゲーム

2026/06/27
・ゲーム1つ追加
 ◎ gmult どの文字がどの数字を表すのかを推測

2026/06/26
・ゲーム1つ追加
 △ glpeces Tangram (パズル) ゲームのクローン

2026/06/25
・ゲーム1つ追加
 ○ gearhead2 宇宙を舞台にしたローグライク・メカRPG

2026/06/24
・ゲーム1つ追加
 ○ gamine 幼児向けインタラクティブゲーム

2026/06/23
・ゲーム1つ追加
 ○ gearhead-sdl ローグライクメカRPG、SDL版

2026/06/22
・ゲーム1つ追加
 ○ gearhead ローグライクメカRPGゲーム、コンソール版

2026/06/21
・ゲーム1つ追加
 ○ gamazons GNOME 向けアマゾンボードゲーム

2026/06/20
・ゲーム1つ追加
 ○ galois さまざまな形や大きさのブロックを使った、落下ブロックゲーム

2026/06/19
・ゲーム1つ追加
 ○ freesweep テキストベースのマインスイーパ

2026/06/18
・ゲーム1つ追加
 △ curseofwar ncurse ベースの Linux 用ハイペースアクション戦略ゲーム

2026/06/17
・ゲーム1つ追加
 ○ crimson 六角形タイルを使った戦術ゲーム

2026/06/16
・ゲーム1つ追加
 ○ crawl ダンジョンクロールは、テキストベースのローグライクゲームです。

2026/06/15
・ゲーム1つ追加
 ◎ cavez of phear ASCII Boulder Dash クローン

2026/06/14
・ゲーム1つ追加
 ○ boohu ハレカの地下世界から脱出せよ ― ローグライクゲーム

2026/06/13
・ゲーム1つ追加
 ○ bombardier GNU Bombingユーティリティ

2026/06/12
・ゲーム1つ追加
 △ biloba 最大4人までプレイ可能なターン制戦略ボードゲーム

2026/06/11
・ゲーム1つ追加
 ○ airstrike  『Biplanes』や『BIP』の流れを汲む2Dドッグファイトゲーム

2026/06/10
・ゲーム1つ追加
 △ acm マルチプレイヤー対応のクラシックな空中戦シミュレーション

2026/06/09
・ゲーム1つ追加
 ○ hexalate 色合わせパズル

2026/06/08
・コンソールデモを1つ追加
 bb AAlib に基づくアスキーアートデモ

2026/06/07
・ゲーム1つ追加
 ○ lincity 都市/国家を構築 & 管理

2026/06/06
・ゲーム1つ追加
 △ triplane 横スクロール型ドッグファイトゲーム

2026/06/05
・ゲーム1つ追加
 ◎ peg-e ペグ除去ソリティアゲーム

2026/06/04
・ゲーム1つ追加
 ◎ gplanarity 二次元の図式を解いたりするシンプルなパズルゲーム

2026/06/03
・ゲーム1つ追加
 ○ gav GPLアーケードバレーボール

2026/06/02
・ゲーム1つ追加
 ○ typespeed  単語を正しくタイプして画面を飛び回る単語を破壊する

2026/06/01
・ゲーム1つ追加
 ○ xpat2  X11 用ソリティアゲーム

2026/05更新分

2026/05/31
・ゲーム1つ追加
 ◎ xvier  コンピュータ対戦の積み上げ型”四目並べ” ゲーム

2026/05/30
・ゲーム1つ追加
 ○ xchain 2~4人用連鎖戦略ゲーム

2026/05/29
・ゲーム1つ追加
 △ Darkbits BALLZ – 転がるボールを操作するプラットフォーム/パズルゲーム

2026/05/28
・ゲーム1つ追加
 ○ XMPuzzles X用パズル集(モチーフ版)

2026/05/27
・ゲーム1つ追加
 ○ Gnome-Tetravex エッジの数字を合わせる、非常に純粋な論理パズルです。

2026/05/26
・ゲーム1つ追加
 ○ gnome-klotski 世界中で愛される「箱入り娘」形式のブロック移動パズルです。

2026/05/25
・ゲーム1つ追加
 ◎ XBill Wingdows ヴィールスを取り除く

2026/05/24
・ゲーム1つ追加
 ◎ KSnakeDuel 「トロン」としても知られる、空間制約を利用した論理アクションです。

2026/05/23
・ゲーム1つ追加
 ◎ xshisen X11 用の四川省パズルゲーム

2026/05/22
・ゲーム1つ追加
 ○ robotfindskitten  仔猫を探すロボットの禅シミュレーション(探索 / ジョークゲーム)

2026/05/21
・ゲーム1つ追加
 ○ starvoyager ’スタートレック’ がテーマの二次元宇宙空間アーケードゲーム

2026/05/20
・ゲーム1つ追加
 ◎ noiz2sa 抽象化アーケードシューティングゲーム

2026/05/19
・libexwordをBrainuxで動かしてアプリの転送後、実行することに成功しました。
 たった1つのコンパイルオプションで治るとは思わんかった
 (brainhackersのDiscordでの情報提供者に感謝)。
 libexwordのビルド

2026/05/18
・ゲーム1つ追加
 ○ xinv3d XInvaders 3D は、X Window System 用の 3D ベクトルベースなスペースイン ベーダクローンです。

2026/05/17
・ゲーム1つ追加
 ○ tint テキストベース端末向けのテトリスクローン

2026/05/16
・ゲーム1つ追加
 ◎ xdemineur X 用のもう一つのマインスイーパ

2026/05/15
・ゲーム1つ追加
 ◎ rafkill Raptor: Call of the Shadows 類似の縦シューティングゲーム

2026/05/14
・ゲーム1つ追加
 ○ mousetrap ボールを追いかけるシンプルなゲーム

2026/05/13
・ゲーム1つ追加
 ○ qonk  資源管理、都市建設、軍事拡張を組み合わせたストラテジー・スタイルの戦略ゲーム

2026/05/12
・ゲーム1つ追加
 ○ hexxagon Hexagonal Ataxx の GTK 版クローン (Bullseye版のみ)

2026/05/11
・ゲーム1つ追加
 ◎ komi 宇宙ガエルの Komi を操るシングルプレイヤアーケードゲーム

2026/05/10
・ゲーム1つ追加
 △ gtkpool GTK+ で書かれたシンプルなプールビリヤードゲーム (Bullseye版のみ)

2026/05/09
・ゲーム1つ追加
 ○ passage 人生の歩みについてのゲーム

2026/06/08
・ゲーム1つ追加
 △ tennix 2D テニスゲーム

2026/05/07
・ゲーム1つ追加
 ◎ fltk1.3 Fast Light Toolkit – サンプルゲーム:チェッカー、数独

2026/05/06
・ゲーム1つ追加
 ◎ ace-of-penguins ペンギンをテーマにしたソリティアゲーム

2026/05/05
・ゲーム1つ追加
 ◎ sdlquake クラシックなゴシック/ホラーをテーマにした一人称シューティングゲーム

2026/05/04
・ゲーム1つ追加 (やはりDoomは動かしておきたい)
 ◎ Chocolate Doom バニラDoomと互換性のあるDoomエンジン

2026/05/03
・ゲーム1つ追加
 ◎ netmaze 三次元マルチプレイヤー戦闘ゲーム(迷路内での一人称視点対戦シューティングゲーム)

2026/05/02
・ゲーム1つ追加
 ◎ groundhog シンプルなお手玉的ロジックゲーム

2026/05/01
・ゲーム1つ追加
 ◎ overgod 双方向スクロールアーケードゲーム

2026/04更新分

2026/04/30
・ゲーム1つ追加(bullseyeにて実行可能)
 ○ gtans GTK+ を使ったタングラム (パズル) ゲーム

2026/04/29
・ゲーム1つ追加
 ○ greed DOSフリーウェアゲーム「Greed」のcursesベースのクローン

2026/04/28
・ゲーム1つ追加(Brainだとかなり遅いですが動作はします。)
 △ lierolibre 昔ながらのミミズアクションゲーム

2026/04/27
・ゲーム1つ追加
 ○ cutemaze シングルプレイヤー迷路ゲーム(2D迷路)

2026/04/26
・ゲーム1つ追加
 ◎ Pop Star  飛び回る星をつなげて多角形を作ってすべての星を消すゲーム

2026/04/25
・ゲーム1つ追加
 ◎ xjig  X11 ジグソーパズル

2026/04/24
・ゲーム1つ追加
 ◎ xye パズルゲーム – 部屋に宝石を全部入れよう

2026/04/23
・ゲーム1つ追加
 ○ xwelltris Welltris に似た3Dテトリスとは別の立体テトリスゲーム

2026/04/22
・ゲーム1つ追加
 ◎ vodovod パズルゲームでは、水を貯水槽まで導かなければなりません。

2026/04/21
・ゲーム1つ追加
 ○ Entombed! Atari 2600の名作ゲームEntombedクローン

2026/04/20
・ゲーム1つ追加
 ◎ Teeter Torture シーソーの上に設置された砲台からモンスターを撃つゲーム

2026/04/19
・ゲーム1つ追加
 ◎ ICBM3D 「ミサイルコマンド」の3Dベクターベースのクローン

2026/04/18
・ゲーム1つ追加
 ◎ 3D Pong 1人または2人用の3Dスポーツゲーム

2026/04/17
・ゲーム1つ追加
 ○ tuxpuck 一人用エアホッケーゲーム

2026/04/16
・ゲーム1つ追加
 ◎ tecnoballz Amiga プラットフォームから移植されたブロック崩しゲーム

2026/04/15
・ゲーム1つ追加
 ◎ supertransball2 スラストタイプのゲーム

2026/04/14
・ゲーム1つ追加
 △ crack-attack ”Tetris Attack” に似たマルチプレイヤ OpenGL パズルゲーム

2026/04/13
・Trixie上でのPython3-pygameアプリについて追記
 Python3-pygameのアプリが遅い
・ゲーム1つ追加
 ◎ gnome breakout 古典的ゲームの Breakout の GNOME 用に書かれたクローン

2026/04/12
・ゲーム1つ追加
 ◎ UnoCard PCで実行される簡易な UNO カードゲームです。

2026/04/11
・ゲーム1つ追加
 ◎ excellent-bifurcation 両面でプレイできる抽象的な縦型シューティングゲーム

2026/04/10
・ゲーム1つ追加
 ◎ cuyo 非常に印象的な効果を備えたぷよぷよパズル(謎ぷよ)似のゲーム

2026/04/09
・ゲーム1つ追加
 ◎ burgerspace 体に悪い食べ物を避けてハンバーガーを作ろう

2026/04/08
・ゲーム1つ追加
 △ dossizola 素敵なグラフィックのIsolaボードゲーム

2026/04/07
・Trixie環境にあわせて一部更新
 xterm の設定変更について(Xリソースファイルの管理)
 JWMのメニューにアプリケーション(xterm)に追加する
 OSに登録されたアプリケーションをJWMに表示する 
 X11画面のスクリーンショットを撮る方法
・ゲーム1つ追加
 ◎ dangen 正確な射撃が要求されるシューティングゲーム

2026/04/06
・libsdl1.2のビルドについて、bookwormベース(libsdl1.2debian_1.2.15+dfsg2-8)に成功
 libsdl1.2をtrixie用にビルドする(採用)
・ゲーム1つ追加(trixieから追加されたゲーム)
 △ ghextris 六角形のグリッド上で行われるテトリスのようなゲーム

2026/04/05
・ゲーム1つ追加
 ◎ biniax2 アーケードモードとタクティクスモードを備えたロジックゲーム

2026/04/05
・ゲーム1つ追加
 ○ bomber アーケード宇宙船ゲーム

2026/04/03
・ゲーム1つ追加
 ○ liquidwar 真に独創的なマルチプレイヤーウォーゲーム

2026/04/02
・ゲーム1つ追加
 ◎ flobopuyo ぷよぷよゲームのクローン

2026/04/01
・ゲーム1つ追加(Trixieにも旧バージョンでインストール可能)
 ◎ LTris CPU に優しいテトリスクローン

2026/03更新分

2026/03/31
・Trixieで利用可能になったパッケージの紹介
 spout  小さな抽象的な白黒2D洞窟シューティングゲーム(bullseyeではapt installできない)
・ゲーム1つ追加(Alexシリーズ最新作)
 ◎ Alex the Allegator 4 – レトロ版プラットフォームゲーム

2026/03/30
・新Brainuxについて追加
 bullseyeではSDL1.2を使っていたアプリがtrixieではSDL2.0になっている場合の対応
・ゲーム1つ追加
 ◎ Alex the Allegator 3 – Radioactive Racers 2Dレーシングゲーム

2026/03/29
・新Brainuxについて追加
 SDL1.2使っているアプリが遅いのを対策する
・ゲーム1つ追加
 ◎ Alex the Allegator 2 スライドできるパネル配置パズルゲーム

2026/03/28
・新Brainuxについて追加
 Bulleseye(Debian11ベース)やbookworm(Debian12)のパッケージをインストールする方法
・ゲーム1つ追加
 ◎ Alex the Allegator 全方向スクロールのジャンプアクション探索ゲーム

2026/03/27
・新Brainuxについて追加
 APT経由でインストールしたmplayerがIllegal instuructionで落ちるのを対策する
・ゲーム1つ追加
 ◎ pipenightdreams 水が入り口から出口まで流れるようにパイプをつなぐ

2026/03/26
・新Brainuxについて追加
 電子辞書Brainをいじる (10) Brainux 最新版(Trixieベース)をインストールして遊ぶ
・ゲーム1つ追加
 ◎ lightsoff  ライトパズルゲーム

2026/03/25
・ゲーム1つ追加
 ◎ pegsolitaire Hi-Q に似た教育ゲーム

2026/03/24
・ゲーム1つ追加
 ◎ pathological 経路とビー玉を用いたパズルゲーム

2026/03/23
・ゲーム1つ追加
 △ alienblaster クラシックな2Dシューティングゲーム

2026/03/22
・ゲーム1つ追加
 ◎ palapeli ジグソーパズルゲーム

2026/03/21
・ゲーム1つ追加
 ◎ numptyphysics crayon ベースの物理パズルゲーム

2026/03/20
・ゲーム1つ追加
 ◎ epiphany Boulder Dash ゲームクローン(アクションパズル)

2026/03/19
・ゲーム1つ追加
 ◎ maelstrom Asteroidsに似たアーケードスタイルのゲーム

2026/03/18
・ゲーム1つ追加
 ○ Gravitation  躁病、憂鬱、そして創造のプロセスに関するゲーム

2026/03/17
・ゲーム1つ追加
 ○ GtkBalls シンプルなロジックゲーム

2026/03/16
・ゲーム1つ追加
 ◎ gtkboard 1 つのプログラム内に多くのボードゲーム

2026/03/15
・ゲーム1つ追加
 ◎ MinicraftC mincraftの要素のある2D版アクションゲーム

2026/03/14
・ゲーム1つ追加
 ○ heroes パワーアップアイテムを集めつつ敵の軌跡を避けるゲーム

2026/03/13
・ゲーム1つ追加
 ◎ blocks-of-the-undead おどろおどろしい雰囲気の Tetris Attack 風パズルゲーム

2026/03/12
・ゲーム1つ追加
 ◎ stax Tetris Attack に似たパズルゲーム集

2026/03/11
・ゲーム1つ追加
 ◎ hex-a-hop 六角形のタイルをベースにしたパズルゲーム

2026/03/10
・ゲーム1つ追加
 ◎ kraptor クラシックなシューティングスクロールゲーム

2026/03/09
・ゲーム1つ追加
 ◎ geki3 R-Type 似の横スクロール型シューティングゲーム

2026/03/08
・ゲーム1つ追加
 ○ geki2 Xenon に似た縦方向シューティングゲーム

2026/03/07
・ゲーム1つ追加
 ◎ Sopwith 1980年代の第一次世界大戦の横スクロールドッグファイティングゲームの移植

2026/03/06
・ゲーム1つ追加
 ◎ Ketm 古典的な 2D スクロール式シューティングゲーム

2026/02/05
・ゲーム1つ追加
 ◎ kdiamond three-in-a-row ゲーム

2026/03/04
・ゲーム1つ追加
 ◎ Dodgin’Diamond 2 1 人または 2 人用の軽快なアーケード式シューティングゲーム

2026/03/03
・ゲーム1つ追加
 ○ icebreaker ペンギンを避けて氷山を崩せ

2026/03/02
・ゲーム1つ追加
 ◎ Kobo Deluxe ボスコニアン風 宇宙戦闘ゲーム

2026/03/01
・ゲーム1つ追加
 ◎ CaveStory 洞窟物語 フリーのPCアクションゲーム

2026/02更新分

2026/02/28
・ゲーム1つ追加
 ○ Five-or-more 五つ以上の同色ビー玉を一列に並べよう

2026/02/27
・ゲーム1つ追加
 ○ fillets  倉庫番スタイルの世界を救うウィットに富んだ魚についてのパズルゲーム

2026/02/25
・ゲーム1つ追加
 ◎ tuxtype Tux が主人公の教育的タイピングゲーム

2026/02/25
・ゲーム1つ追加
 △ tuxmath 子供向けの Tux による数学ゲーム(最初の起動だけ5分ぐらいかかります)

2026/02/24
・ゲーム1つ追加
 ◎ penguin-command ミサイルコマンドクローン(グラフィック改良版)

2026/02/23
・ゲーム1つ追加
 ◎ kblackbox ブラックボックスパズルゲーム

2026/02/22
・ゲーム1つ追加
 ◎ Block Rage コラムスみたいなゲーム(DOSの古典Xixitのリメイク)

2026/02/21
・ゲーム1つ追加
 〇 ballerburg 古典的な城の戦闘ゲーム(砲弾当てゲーム)

2026/02/20
・ゲーム1つ追加
 〇 BugSquish  虫があなたの腕から血を吸おうとしています!ハエたたきでやっつけろ!!

2026/02/19
・ゲーム1つ追加
 ◎ freedroid Paradroid クローン – 戦略的 shoot-em up 型シューティングゲーム

2026/02/18
・ゲーム1つ追加
 ◎ X Soldier 「撃たない」ボーナス付きのシューティングゲーム

2026/02/17
・ゲーム1つ追加(python3-pygame利用)
 △ whichwayisup わずかに回転する要素のある2Dプラットフォームゲーム

2026/02/16
・ゲーム1つ追加
 ◎ VoR  宇宙で岩を避ける2Dアクションゲーム

2026/02/15
・ゲーム1つ追加
 ◎ xbat ゼビウス(ナムコ製ゲーム)風アクションシューティングゲーム

2026/02/14
・ゲーム1つ追加
 ◎ Powermanga  鮮やかな 3D グラフィックを備えた縦方向シューティングゲーム

2026/02/13
・ゲーム1つ追加
 ◎ ceferino1 Super Pang 似のアクションゲーム

2026/02/12
・ゲーム1つ追加
 ◎ moon-lander 古典的な月着陸船に基づくゲーム

2026/02/11
・Basic言語 (BASIC-256)について追加
 BasiC-256を試す

2026/02/10
・ゲーム1つ追加
 ◎ meritous アクションアドベンチャーダンジョン探索ゲーム

2026/02/09
・ゲーム1つ追加
 〇 Luola マルチプレイヤー洞窟飛行ゲーム

2026/02/08
・Basic言語 (YaBasic)について追加
 電子辞書Brainをいじる (9) BrainuxでBASICで遊ぶ 

2026/02/07
・ゲーム1つ追加
 〇 LMemory 「メモリー」カードゲームをベースにした子供向けゲーム(神経衰弱)

2026/02/06
・ゲーム1つ追加
 ◎ LMarbles 色とりどりのビー玉で形を作るゲーム (KAtomicの亜種)

2026/02/05
・ゲーム1つ追加
 ◎ LBreakout2 美しいグラフィックのボールとパドルのゲーム

2026/02/04
・ゲーム1つ追加
 〇 jester オセロに似たボードゲーム

2026/02/03
・ゲーム1つ追加
 〇 gravitywars Gravity Force クローン

2026/02/02
・ゲーム1つ追加
 ◎ xonix モンスターを避けながら画面を切り裂くゲーム(Xonix、クイックスクローン)

2026/02/01
・ゲーム1つ追加
 ◎ xgalaga++ xgalaga にインスパイアされた古典的なシングルスクリーン縦スクロールシューティングゲーム

2026/01更新分

2026/01/31
・ゲーム11つ追加
 ◎ XGalaga 有名なギャラガの X 版

2026/01/30
・ゲーム2つ追加
 △ gnujump SDL1.2用ジャンピングゲーム(要OPELGL無効化)
 〇 XJump X 用ジャンピングゲーム

2026/01/29
・ゲーム1つ追加
 ◎ GNU Robbo ATARI XE/XL から移植された論理ゲーム

2026/01/28
・ゲーム1つ追加
 〇 amphetamine ユニークなビジュアル効果を使った飛んで走るゲーム

2026/01/27
・ゲーム1つ追加
 ◎ Kollision  シンプルなボール避けゲーム

2026/01/26
・ゲーム1つ追加
 〇 Kspaceduel SpaceWar! アーケードゲーム

2026/01/25
・ゲーム1つ追加
 ◎ X-Bomber  「Atomic Bomberman」と「Bomberman」をベースにしたゲーム

2026/01/24
・EX-wordの操作を、Brainux上で実行して見ました(GNUBOYの実行は失敗)
 電子辞書Brainをいじる (8) Brainuxで別の電子辞書EX-wordをハックして遊ぶ

2026/01/23
・ゲーム1つ追加
 〇 kbounce Jezzball アーケードゲーム
・コンテンツを一部分離(エミュレータ、SDL系ゲーム)
 電子辞書Brainをいじる (5) Brainuxでエミュレータをインストールして遊ぶ
 電子辞書Brainをいじる (7) Brainuxでゲームをインストールして遊ぶ (2) SDL系

2026/01/22
・ゲーム1つ追加
 〇 pixfrogger  カエルが道を渡るのを手伝う(Froggerによく似た競争ゲーム)

2026/01/21
・ゲーム1つ追加
 〇 barrage 戦車やシープ・歩兵を砲撃して進行を止めるアクションゲーム
・最近の更新履歴の掲載順を日付降順に変更

2026/01/20
・ゲーム1つ追加
 ◎ tworld Chip’s Challenge Game エンジンをエミュレーション

2026/01/19
・ゲーム1つ追加
 ◎ koules 体当たりで敵を押しつぶすアクションゲーム

2026/01/18
・アプリ1つ追加
 px68k X68000エミュレータ(かなり遅いです。) 

2026/01/17
・ゲーム1つ追加
 ◎ SDL Hana コンピュータ対戦可能な花札(こいこい)です。

2026/01/16
・ゲーム1つ追加
 ◎ XScavenger X向けのロードランナー風プラットフォームゲーム

2026/01/15
・ゲーム1つ追加(ステージ最初にWait有)
 △ nikwi キャンディーの収集が任務のプラットフォームゲーム(ステージ最初にWait有)

2026/01/14
・ゲーム1つ追加
 〇 Holotz-Castle 数多くの神秘があるプラットフォームゲーム

2026/01/13
・ゲーム1つ追加
 〇 madbomber Kaboom! クローン

2026/01/12
・ゲーム1つ追加
 〇 The Legend of Edgar [edgar] 2Dアクション+謎解きゲーム(リンクの冒険的ゲーム)

2026/01/11
・ゲーム1つ追加
 ◎ Super Tux Tux が主人公の古典的な跳んで走る二次元横スクロールゲーム

2026/01/10
・ゲーム1つ追加
 〇 PDA Maze 一人称視点(3D)の迷路ゲーム

2026/01/09
・ゲーム1つ追加
 ◎ blinken Simon電子記憶ゲームのKDEバージョン

2026/01/08
・ゲーム1つ追加
 ◎ Missile Command 「ミサイル・コマンド」クローンです

2026/01/07
・ゲーム1つ追加
 ◎ vectoroids  古典的なアーケードゲームの “アステロイド” のグラフィック強化版です。

2026/01/06
・ゲーム1つ追加
 〇 picmi 数字ロジックゲーム(ピクロス?)
 ◎ Defendguin アーケードゲーム「Defender」のクローン

2026/01/05
・ゲーム1つ追加
 ◎ TowerToppler(別名Nebulous) 障害を避けながら塔を登るアクションゲーム(キョロちゃんランド)
・CPU最適化のため、再ビルド中。結果は15時間後
 openmsx 0.15 (SDL1.2版) インストール     2025/12/22追記

2026/01/04
・CPUのJava機能について追記(結局利用できなかった)
 java Java VMの開発実行環境 (非常に遅い)
・ビルド時のCPU最適化について追記(若干の性能向上を確認)
 Neko Project 2 kai PC9801/9821 エミュレータ
・ゲームを1つ追加
 〇 Abe’s Amazing Adventure ピットフォールII的なアクションゲーム

2026/01/03
・ゲーム1つ追加
 〇 aliens インベータ/ギャラガ風シューティングゲーム
 ◎ Circus Linux! アーケードゲーム「Circus」/Atari2600「Circus Atari」風ゲーム

2026/01/02
・アプリ1つ追加
 Neko Project 2 kai  PC9801/9821 エミュレータ

2026/01/01
・ゲーム1つ追加
 ◎ katomic    アトミックスパズルゲーム

2025/12更新分

2025/12/31
・ゲーム1つ追加
 ◎ sgt-puzzles Simon Tathamのポータブルパズルコレクション – 1人用パズルゲーム集

2025/12/30
・アプリ1つ追加
 dosbox グラフィックス、サウンド、DOS を備えた x86 エミュレータ(Brainでは厳しい)

2025/12/29
・ゲーム1つ追加
 ◎ BoboBot ロックマン的なアクションゲーム

2025/12/28
・ゲーム1つ追加
 〇 Agendaroids Atari の古典的なアーケード ゲーム「Asteroids」のクローン

2025/12/27
・ビルドに必要なパッケージの導入についての追記
 インストール方法のパターン
・アプリ1つ追加
 Xshodow「書道」のアプリケーションです.

2025/12/26
・アプリ1つ追加
 XMangekyou X11で動く万華鏡です
・ゲーム1つ追加
 〇 xjewel セガコラムズのような落下ブロックゲーム

2025/12/25
・アプリ1つ追加
 Xantfarm X11用のシンプルなアリ農場
・ゲーム1つ追加
 〇 N.A.D.A.R ネットワーク対戦型戦車ゲーム(コンピュータ対戦も可能)

2025/12/24
・アプリ(エミュレータ)の fceux について追記
 fceux 2.2.3 (SDL1.2版) ファミコンエミュレータ(音無しであれば実用的な速度で動作)

2025/12/23
・ゲーム1つ追加
 ◎ bomberclone 無料のボンバーマンクローン

2025/12/22
・JWMから再起動する設定について追記
 OSに登録されたアプリケーションをJWMに表示する
・アプリ(エミュレータ)のopenMSXについて追記
 openmsx 0.15 (SDL1.2版) インストール     2025/12/22追記

2025/12/21
・アプリ2つ追加
 mxclock 絵柄が綺麗な時計です.
 SunClock 時刻と地理データを表示可能な可愛い時計

2025/12/20
・ゲーム2つ追加(1勝1引分)
 △ grhino     オセロ/リバーシボードゲーム
 ◎ iagno     GNOME 用オセロゲーム
・アプリ(エミュレータ)1つ追加
 〇 fmsx MSXエミュレータ(MSX1/2/2+)
・サウンド関連で1つ修正
 PulseAudio導入について

2025/12/19
・X11(X window system)関連で、以下の項目を追加
 X11画面のスクリーンショットを撮る方法

2025/12/18
・X11(X window system)関連で、以下の項目を追加
 xterm の設定変更について(Xリソースファイルの管理)
 JWMのメニューにアプリケーション(xterm)に追加する
 OSに登録されたアプリケーションをJWMに表示する

2025/12/17
・ゲームを1つ追加
 ◎ enigma     マウスでビー玉をコントロールするゲーム

2025/12/16
・アプリを1つ追加
 dclock X Window System 向けの柔軟な表示設定が可能なデジタル時計
・アクアリウム時計 テーマでのレシピ追行
 Brainで「痛デスクトップ」?
・ゲームを1つ追加
 ◎ pingus      Lemmings(TM) のフリーなクローン

2025/12/15
・アプリを2つ追加
 xfireworks Xのルートウィンドウ上で花火が打ちあがります
 xdesktopwaves Xのルートウィンドウ上で水の波をシミュレーション

2025/12/14
・アプリを1つ追加
 XMascot  Xの画面上で揺れるマスコットを表示する プログラム (2025/12/14追加)
・ゲームを1つ追加
 △ xevil X 向けの暴力的な横スクロールゲーム (2025/12/14追加)

2025/12/13
・Code::Blocks IDE project (.cbp)からMakefileを生成するためのツールについて追加
 cbp2make Code::Blocks IDE project (.cbp)からMakefileを生成するためのツール
・ゲームを3つ追加
 ◎ gnome-mahjongg 「上海」麻雀パイを使った1人用パズルゲーム (2025/12/13追加)
 ◎ spacearyarya スペースハリアー風三次元三人称シューティングゲーム (2025/12/13追加)
 ◎ wing      縦方向シューティングゲーム (2025/12/13追加)

2025/12/12
・BrainuxのX環境でのタッチパネル操作(右クリック対応)について追加
 BrainuxのX環境でのタッチパネル操作について (2025/12/12追加)
・ゲームを1つ追加
 ◎ OpenSyobonAction オープン版しょぼんのアクション (2025/12/12追加)

2025/12/11
・X環境用のソフトウェアキーボードについて追加
 Brainux のX環境でのソフトウェアキーボードについて 
・JnetHackをソフトウェアキーボードで遊ぶ方法について追記
 ◎ JNetHack   ローグライクゲームの日本語版 (2025/12/08追加)

2025/12/10
・Brainux上で日本語(全角)文字を入力できる方法について追加
 日本語(全角)文字列の入力について
・ゲームを1つ追加
 ◎ kgoldrunner  ロードランナー風パズルアクション (2025/12/10追加)

2025/12/09
・ゲームを1つ修正(オリジナル+パッチ版追加)
 ◎ JNetHack   ローグライクゲームの日本語版 (2025/12/08追加)
・ゲームを1つ追加
 ◎ wordwarvi   レトロな横スクロールシューティングゲーム (2025/12/09追加)

2025/12/08
・ゲームを2つ追加
 ◎ cgames    コンソール版の倉庫番、マインスイーパー、ブロックゲーム (2025/12/08追加)
 ◎ JNetHack   ローグライクゲームの日本語版 (2025/12/08追加)

Views: 1847

カテゴリー: Brain, Brain(CE), Brainux, debian, Game, Linux, ツール, 電子手帳 | コメントする

電子辞書Brainをいじる (xx) Brainux高速化メモ

今、Brainuxの基盤側の設定を詰めています。
いくつかの項目を、調整してみました。

・カーネル最適化編
 ・カーネルパラメータ設定
 ・ZSWAPの有効化
・X11描画高速化編
 ・X11のフレームバッファ設定
 ・環境変数によるパフォーマンスチェック

 

まとめ(高速化結果)

・ZSWAPの採用で、SDへのメモリスワップを抑えることに成功
・X11のShadowFB を false に設定することで一部アプリのフレームレートが3割程度向上

 

カーネルパラメータ設定

Brainuxに合わせたLinuxカーネルパラメータを調整してみました。
使い方によって効果は代わりますが、
必要に応じて別途調整してみることをお勧めします。。

設定ファイルの変更

sudo vi sysctl.conf

###############################################
# Brainux ARMv5 最適化 sysctl.conf
# 目的:低RAM・低速CPU・低速I/O環境での体感速度向上
###############################################

########## メモリ最適化 ##########

# swap を極力使わない(フリーズ防止)
# レスポンス向上に有効だが、副作用が発生する可能性もあります。
vm.swappiness = 0

# ファイルキャッシュを積極的に保持(ゲームの画像・音声が速くなる)
vm.vfs_cache_pressure = 50

# 書き込み遅延を減らして I/O フリーズを防ぐ
vm.dirty_ratio = 5
vm.dirty_background_ratio = 2

# dirty 書き込みを早めに開始(SDカードの詰まり防止)
vm.dirty_expire_centisecs = 1000
vm.dirty_writeback_centisecs = 300


########## CPU スケジューラ最適化 ##########

# fork 直後の子プロセスを優先しない(カクつき防止)
kernel.sched_child_runs_first = 0

# インタラクティブ処理を優先(SDLゲームの反応改善)
# Brainuxでは設定不可
#kernel.sched_latency_ns = 6000000
#kernel.sched_min_granularity_ns = 750000
#kernel.sched_wakeup_granularity_ns = 1000000


########## ネットワーク(軽量化) ##########

# TCP バッファを小さくしてメモリ節約
net.ipv4.tcp_rmem = 4096 87380 131072
net.ipv4.tcp_wmem = 4096 65536 131072

# TIME_WAIT を減らして軽量化
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1


########## カーネル動作の軽量化 ##########

# カーネルログの出力を抑制(ゲーム中のカクつき防止)
kernel.printk = 3 3 3 3

# カーネルの OOM killer を積極化(フリーズ防止)
vm.oom_kill_allocating_task = 1
vm.panic_on_oom = 0

###############################################
# 以上
###############################################

 

この設定ファイルの内容での即時反映は、以下のコマンドで可能です。

$ sudo sysctl -p

設定の確認は、以下のようなコマンドで可能です。

#個別のカーネルパラメータの表示
$ sudo sysctl vm.swappiness
vm.swappiness = 0

 

#全カーネルパラメータの表示
$ sudo sysctl -a

実行結果
user@brain:~$ sudo sysctl -a
[sudo] password for user:
dev.scsi.logging_level = 0
dev.tty.ldisc_autoload = 1
fs.aio-max-nr = 65536
fs.aio-nr = 0
fs.dentry-state = 4119  1127    45      0       216     0
fs.epoll.max_user_watches = 45331
fs.file-max = 2147483647
fs.file-nr = 1177       0       2147483647
fs.inode-nr = 4698      289
fs.inode-state = 4698   289     0       0       0       0       0
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.lease-break-time = 45
fs.leases-enable = 1
fs.mount-max = 100000
fs.nfs.idmap_cache_timeout = 600
fs.nfs.nfs_callback_tcpport = 0
fs.nfs.nfs_congestion_kb = 10816
fs.nfs.nfs_mountpoint_timeout = 500
fs.nfs.nlm_grace_period = 0
fs.nfs.nlm_tcpport = 0
fs.nfs.nlm_timeout = 10
fs.nfs.nlm_udpport = 0
fs.nfs.nsm_local_state = 0
fs.nfs.nsm_use_hostnames = 0
fs.nr_open = 536870908
fs.overflowgid = 65534
fs.overflowuid = 65534
fs.pipe-max-size = 1048576
fs.pipe-user-pages-hard = 0
fs.pipe-user-pages-soft = 16384
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1
fs.suid_dumpable = 0
kernel.arch = armv5tejl
kernel.auto_msgmni = 0
kernel.cad_pid = 1
kernel.cap_last_cap = 40
kernel.core_pattern = core
kernel.core_pipe_limit = 0
kernel.core_uses_pid = 1
kernel.ctrl-alt-del = 0
kernel.dmesg_restrict = 0
kernel.domainname = (none)
kernel.hostname = brain
kernel.keys.gc_delay = 300
kernel.keys.maxbytes = 20000
kernel.keys.maxkeys = 200
kernel.keys.root_maxbytes = 25000000
kernel.keys.root_maxkeys = 1000000
kernel.kptr_restrict = 0
kernel.max_lock_depth = 1024
kernel.max_rcu_stall_to_panic = 0
kernel.modprobe = /sbin/modprobe
kernel.modules_disabled = 0
kernel.msgmax = 8192
kernel.msgmnb = 16384
kernel.msgmni = 32000
kernel.ngroups_max = 65536
kernel.oops_limit = 10000
kernel.osrelease = 6.1.70-ga9f534c7f53e
kernel.ostype = Linux
kernel.overflowgid = 65534
kernel.overflowuid = 65534
kernel.panic = 0
kernel.panic_on_oops = 0
kernel.panic_on_rcu_stall = 0
kernel.panic_on_warn = 0
kernel.panic_print = 0
kernel.perf_cpu_time_max_percent = 25
kernel.perf_event_max_contexts_per_stack = 8
kernel.perf_event_max_sample_rate = 100000
kernel.perf_event_max_stack = 127
kernel.perf_event_mlock_kb = 516
kernel.perf_event_paranoid = 2
kernel.pid_max = 32768
kernel.poweroff_cmd = /sbin/poweroff
kernel.print-fatal-signals = 0
kernel.printk = 7       4       1       7
kernel.printk_delay = 0
kernel.printk_devkmsg = on
kernel.printk_ratelimit = 5
kernel.printk_ratelimit_burst = 10
kernel.pty.max = 4096
kernel.pty.nr = 4
kernel.pty.reserve = 1024
kernel.random.boot_id = c625ee00-916c-473e-8292-740bf8d2600d
kernel.random.entropy_avail = 256
kernel.random.poolsize = 256
kernel.random.urandom_min_reseed_secs = 60
kernel.random.uuid = 87d94d07-823b-41c6-b70f-6eb01012eb60
kernel.random.write_wakeup_threshold = 256
kernel.randomize_va_space = 2
kernel.real-root-dev = 0
kernel.sched_child_runs_first = 0
kernel.sched_deadline_period_max_us = 4194304
kernel.sched_deadline_period_min_us = 100
kernel.sched_rr_timeslice_ms = 100
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.seccomp.actions_avail = kill_process kill_thread trap errno user_notif trace log allow
kernel.seccomp.actions_logged = kill_process kill_thread trap errno user_notif trace log
kernel.sem = 32000      1024000000      500     32000
kernel.shm_rmid_forced = 0
kernel.shmall = 4278190079
kernel.shmmax = 4278190079
kernel.shmmni = 4096
kernel.sysctl_writes_strict = 1
kernel.tainted = 0
kernel.task_delayacct = 0
kernel.threads-max = 1799
kernel.usermodehelper.bset = 4294967295 511
kernel.usermodehelper.inheritable = 4294967295  511
kernel.version = #1 PREEMPT Tue Mar 24 17:57:31 UTC 2026
kernel.warn_limit = 0
net.core.busy_poll = 0
net.core.busy_read = 0
net.core.dev_weight = 64
net.core.dev_weight_rx_bias = 1
net.core.dev_weight_tx_bias = 1
net.core.devconf_inherit_init_net = 0
net.core.fb_tunnels_only_for_init_net = 0
net.core.gro_normal_batch = 8
net.core.high_order_alloc_disable = 0
net.core.max_skb_frags = 17
net.core.message_burst = 10
net.core.message_cost = 5
net.core.netdev_budget = 300
net.core.netdev_budget_usecs = 20000
net.core.netdev_max_backlog = 1000
net.core.netdev_rss_key = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
net.core.netdev_tstamp_prequeue = 1
net.core.netdev_unregister_timeout_secs = 10
net.core.optmem_max = 10240
net.core.rmem_default = 180224
net.core.rmem_max = 180224
net.core.skb_defer_max = 64
net.core.somaxconn = 4096
net.core.tstamp_allow_data = 1
net.core.txrehash = 1
net.core.warnings = 0
net.core.wmem_default = 180224
net.core.wmem_max = 180224
net.ipv4.conf.all.accept_local = 0
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.arp_accept = 0
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.all.arp_evict_nocarrier = 1
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_notify = 0
net.ipv4.conf.all.bc_forwarding = 0
net.ipv4.conf.all.bootp_relay = 0
net.ipv4.conf.all.disable_policy = 0
net.ipv4.conf.all.disable_xfrm = 0
net.ipv4.conf.all.drop_gratuitous_arp = 0
net.ipv4.conf.all.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.all.force_igmp_version = 0
net.ipv4.conf.all.forwarding = 0
net.ipv4.conf.all.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.all.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.all.ignore_routes_with_linkdown = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.all.medium_id = 0
net.ipv4.conf.all.promote_secondaries = 0
net.ipv4.conf.all.proxy_arp = 0
net.ipv4.conf.all.proxy_arp_pvlan = 0
net.ipv4.conf.all.route_localnet = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.secure_redirects = 1
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.shared_media = 1
net.ipv4.conf.all.src_valid_mark = 0
net.ipv4.conf.all.tag = 0
net.ipv4.conf.default.accept_local = 0
net.ipv4.conf.default.accept_redirects = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.arp_accept = 0
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.default.arp_evict_nocarrier = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.default.arp_notify = 0
net.ipv4.conf.default.bc_forwarding = 0
net.ipv4.conf.default.bootp_relay = 0
net.ipv4.conf.default.disable_policy = 0
net.ipv4.conf.default.disable_xfrm = 0
net.ipv4.conf.default.drop_gratuitous_arp = 0
net.ipv4.conf.default.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.default.force_igmp_version = 0
net.ipv4.conf.default.forwarding = 0
net.ipv4.conf.default.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.default.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.default.ignore_routes_with_linkdown = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.default.medium_id = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.proxy_arp_pvlan = 0
net.ipv4.conf.default.route_localnet = 0
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.default.secure_redirects = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.default.shared_media = 1
net.ipv4.conf.default.src_valid_mark = 0
net.ipv4.conf.default.tag = 0
net.ipv4.conf.enx3495db26e312.accept_local = 0
net.ipv4.conf.enx3495db26e312.accept_redirects = 1
net.ipv4.conf.enx3495db26e312.accept_source_route = 0
net.ipv4.conf.enx3495db26e312.arp_accept = 0
net.ipv4.conf.enx3495db26e312.arp_announce = 0
net.ipv4.conf.enx3495db26e312.arp_evict_nocarrier = 1
net.ipv4.conf.enx3495db26e312.arp_filter = 0
net.ipv4.conf.enx3495db26e312.arp_ignore = 0
net.ipv4.conf.enx3495db26e312.arp_notify = 0
net.ipv4.conf.enx3495db26e312.bc_forwarding = 0
net.ipv4.conf.enx3495db26e312.bootp_relay = 0
net.ipv4.conf.enx3495db26e312.disable_policy = 0
net.ipv4.conf.enx3495db26e312.disable_xfrm = 0
net.ipv4.conf.enx3495db26e312.drop_gratuitous_arp = 0
net.ipv4.conf.enx3495db26e312.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.enx3495db26e312.force_igmp_version = 0
net.ipv4.conf.enx3495db26e312.forwarding = 0
net.ipv4.conf.enx3495db26e312.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.enx3495db26e312.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.enx3495db26e312.ignore_routes_with_linkdown = 0
net.ipv4.conf.enx3495db26e312.log_martians = 0
net.ipv4.conf.enx3495db26e312.mc_forwarding = 0
net.ipv4.conf.enx3495db26e312.medium_id = 0
net.ipv4.conf.enx3495db26e312.promote_secondaries = 1
net.ipv4.conf.enx3495db26e312.proxy_arp = 0
net.ipv4.conf.enx3495db26e312.proxy_arp_pvlan = 0
net.ipv4.conf.enx3495db26e312.route_localnet = 0
net.ipv4.conf.enx3495db26e312.rp_filter = 2
net.ipv4.conf.enx3495db26e312.secure_redirects = 1
net.ipv4.conf.enx3495db26e312.send_redirects = 1
net.ipv4.conf.enx3495db26e312.shared_media = 1
net.ipv4.conf.enx3495db26e312.src_valid_mark = 0
net.ipv4.conf.enx3495db26e312.tag = 0
net.ipv4.conf.lo.accept_local = 0
net.ipv4.conf.lo.accept_redirects = 1
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.lo.arp_accept = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.lo.arp_evict_nocarrier = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_notify = 0
net.ipv4.conf.lo.bc_forwarding = 0
net.ipv4.conf.lo.bootp_relay = 0
net.ipv4.conf.lo.disable_policy = 1
net.ipv4.conf.lo.disable_xfrm = 1
net.ipv4.conf.lo.drop_gratuitous_arp = 0
net.ipv4.conf.lo.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.lo.force_igmp_version = 0
net.ipv4.conf.lo.forwarding = 0
net.ipv4.conf.lo.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.lo.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.lo.ignore_routes_with_linkdown = 0
net.ipv4.conf.lo.log_martians = 0
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.lo.medium_id = 0
net.ipv4.conf.lo.promote_secondaries = 1
net.ipv4.conf.lo.proxy_arp = 0
net.ipv4.conf.lo.proxy_arp_pvlan = 0
net.ipv4.conf.lo.route_localnet = 0
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.lo.secure_redirects = 1
net.ipv4.conf.lo.send_redirects = 1
net.ipv4.conf.lo.shared_media = 1
net.ipv4.conf.lo.src_valid_mark = 0
net.ipv4.conf.lo.tag = 0
net.ipv4.conf.sit0.accept_local = 0
net.ipv4.conf.sit0.accept_redirects = 1
net.ipv4.conf.sit0.accept_source_route = 0
net.ipv4.conf.sit0.arp_accept = 0
net.ipv4.conf.sit0.arp_announce = 0
net.ipv4.conf.sit0.arp_evict_nocarrier = 1
net.ipv4.conf.sit0.arp_filter = 0
net.ipv4.conf.sit0.arp_ignore = 0
net.ipv4.conf.sit0.arp_notify = 0
net.ipv4.conf.sit0.bc_forwarding = 0
net.ipv4.conf.sit0.bootp_relay = 0
net.ipv4.conf.sit0.disable_policy = 0
net.ipv4.conf.sit0.disable_xfrm = 0
net.ipv4.conf.sit0.drop_gratuitous_arp = 0
net.ipv4.conf.sit0.drop_unicast_in_l2_multicast = 0
net.ipv4.conf.sit0.force_igmp_version = 0
net.ipv4.conf.sit0.forwarding = 0
net.ipv4.conf.sit0.igmpv2_unsolicited_report_interval = 10000
net.ipv4.conf.sit0.igmpv3_unsolicited_report_interval = 1000
net.ipv4.conf.sit0.ignore_routes_with_linkdown = 0
net.ipv4.conf.sit0.log_martians = 0
net.ipv4.conf.sit0.mc_forwarding = 0
net.ipv4.conf.sit0.medium_id = 0
net.ipv4.conf.sit0.promote_secondaries = 1
net.ipv4.conf.sit0.proxy_arp = 0
net.ipv4.conf.sit0.proxy_arp_pvlan = 0
net.ipv4.conf.sit0.route_localnet = 0
net.ipv4.conf.sit0.rp_filter = 2
net.ipv4.conf.sit0.secure_redirects = 1
net.ipv4.conf.sit0.send_redirects = 1
net.ipv4.conf.sit0.shared_media = 1
net.ipv4.conf.sit0.src_valid_mark = 0
net.ipv4.conf.sit0.tag = 0
net.ipv4.fib_notify_on_flag_change = 0
net.ipv4.fib_sync_mem = 524288
net.ipv4.fwmark_reflect = 0
net.ipv4.icmp_echo_enable_probe = 0
net.ipv4.icmp_echo_ignore_all = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_errors_use_inbound_ifaddr = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_msgs_burst = 50
net.ipv4.icmp_msgs_per_sec = 1000
net.ipv4.icmp_ratelimit = 1000
net.ipv4.icmp_ratemask = 6168
net.ipv4.igmp_link_local_mcast_reports = 1
net.ipv4.igmp_max_memberships = 20
net.ipv4.igmp_max_msf = 10
net.ipv4.inet_peer_maxttl = 600
net.ipv4.inet_peer_minttl = 120
net.ipv4.inet_peer_threshold = 9212
net.ipv4.ip_autobind_reuse = 0
net.ipv4.ip_default_ttl = 64
net.ipv4.ip_dynaddr = 0
net.ipv4.ip_early_demux = 1
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
net.ipv4.ip_local_port_range = 32768    60999
net.ipv4.ip_local_reserved_ports =
net.ipv4.ip_no_pmtu_disc = 0
net.ipv4.ip_nonlocal_bind = 0
net.ipv4.ip_unprivileged_port_start = 1024
net.ipv4.ipfrag_high_thresh = 4194304
net.ipv4.ipfrag_low_thresh = 3145728
net.ipv4.ipfrag_max_dist = 64
net.ipv4.ipfrag_secret_interval = 0
net.ipv4.ipfrag_time = 30
net.ipv4.neigh.default.anycast_delay = 100
net.ipv4.neigh.default.app_solicit = 0
net.ipv4.neigh.default.base_reachable_time_ms = 30000
net.ipv4.neigh.default.delay_first_probe_time = 5
net.ipv4.neigh.default.gc_interval = 30
net.ipv4.neigh.default.gc_stale_time = 60
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 1024
net.ipv4.neigh.default.interval_probe_time_ms = 5000
net.ipv4.neigh.default.locktime = 100
net.ipv4.neigh.default.mcast_resolicit = 0
net.ipv4.neigh.default.mcast_solicit = 3
net.ipv4.neigh.default.proxy_delay = 80
net.ipv4.neigh.default.proxy_qlen = 64
net.ipv4.neigh.default.retrans_time_ms = 1000
net.ipv4.neigh.default.ucast_solicit = 3
net.ipv4.neigh.default.unres_qlen = 91
net.ipv4.neigh.default.unres_qlen_bytes = 180224
net.ipv4.neigh.enx3495db26e312.anycast_delay = 100
net.ipv4.neigh.enx3495db26e312.app_solicit = 0
net.ipv4.neigh.enx3495db26e312.base_reachable_time_ms = 30000
net.ipv4.neigh.enx3495db26e312.delay_first_probe_time = 5
net.ipv4.neigh.enx3495db26e312.gc_stale_time = 60
net.ipv4.neigh.enx3495db26e312.interval_probe_time_ms = 5000
net.ipv4.neigh.enx3495db26e312.locktime = 100
net.ipv4.neigh.enx3495db26e312.mcast_resolicit = 0
net.ipv4.neigh.enx3495db26e312.mcast_solicit = 3
net.ipv4.neigh.enx3495db26e312.proxy_delay = 80
net.ipv4.neigh.enx3495db26e312.proxy_qlen = 64
net.ipv4.neigh.enx3495db26e312.retrans_time_ms = 1000
net.ipv4.neigh.enx3495db26e312.ucast_solicit = 3
net.ipv4.neigh.enx3495db26e312.unres_qlen = 91
net.ipv4.neigh.enx3495db26e312.unres_qlen_bytes = 180224
net.ipv4.neigh.lo.anycast_delay = 100
net.ipv4.neigh.lo.app_solicit = 0
net.ipv4.neigh.lo.base_reachable_time_ms = 30000
net.ipv4.neigh.lo.delay_first_probe_time = 5
net.ipv4.neigh.lo.gc_stale_time = 60
net.ipv4.neigh.lo.interval_probe_time_ms = 5000
net.ipv4.neigh.lo.locktime = 100
net.ipv4.neigh.lo.mcast_resolicit = 0
net.ipv4.neigh.lo.mcast_solicit = 3
net.ipv4.neigh.lo.proxy_delay = 80
net.ipv4.neigh.lo.proxy_qlen = 64
net.ipv4.neigh.lo.retrans_time_ms = 1000
net.ipv4.neigh.lo.ucast_solicit = 3
net.ipv4.neigh.lo.unres_qlen = 91
net.ipv4.neigh.lo.unres_qlen_bytes = 180224
net.ipv4.neigh.sit0.anycast_delay = 100
net.ipv4.neigh.sit0.app_solicit = 0
net.ipv4.neigh.sit0.base_reachable_time_ms = 30000
net.ipv4.neigh.sit0.delay_first_probe_time = 5
net.ipv4.neigh.sit0.gc_stale_time = 60
net.ipv4.neigh.sit0.interval_probe_time_ms = 5000
net.ipv4.neigh.sit0.locktime = 100
net.ipv4.neigh.sit0.mcast_resolicit = 0
net.ipv4.neigh.sit0.mcast_solicit = 3
net.ipv4.neigh.sit0.proxy_delay = 80
net.ipv4.neigh.sit0.proxy_qlen = 64
net.ipv4.neigh.sit0.retrans_time_ms = 1000
net.ipv4.neigh.sit0.ucast_solicit = 3
net.ipv4.neigh.sit0.unres_qlen = 91
net.ipv4.neigh.sit0.unres_qlen_bytes = 180224
net.ipv4.nexthop_compat_mode = 1
net.ipv4.ping_group_range = 0   2147483647
net.ipv4.route.error_burst = 500
net.ipv4.route.error_cost = 100
net.ipv4.route.gc_elasticity = 8
net.ipv4.route.gc_interval = 60
net.ipv4.route.gc_min_interval = 0
net.ipv4.route.gc_min_interval_ms = 500
net.ipv4.route.gc_thresh = -1
net.ipv4.route.gc_timeout = 300
net.ipv4.route.max_size = 2147483647
net.ipv4.route.min_adv_mss = 256
net.ipv4.route.min_pmtu = 552
net.ipv4.route.mtu_expires = 600
net.ipv4.route.redirect_load = 2
net.ipv4.route.redirect_number = 9
net.ipv4.route.redirect_silence = 2048
net.ipv4.tcp_abort_on_overflow = 0
net.ipv4.tcp_adv_win_scale = 1
net.ipv4.tcp_allowed_congestion_control = reno cubic
net.ipv4.tcp_app_win = 31
net.ipv4.tcp_autocorking = 1
net.ipv4.tcp_available_congestion_control = reno cubic
net.ipv4.tcp_available_ulp =
net.ipv4.tcp_base_mss = 1024
net.ipv4.tcp_challenge_ack_limit = 2147483647
net.ipv4.tcp_child_ehash_entries = 0
net.ipv4.tcp_comp_sack_delay_ns = 1000000
net.ipv4.tcp_comp_sack_nr = 44
net.ipv4.tcp_comp_sack_slack_ns = 100000
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_early_demux = 1
net.ipv4.tcp_early_retrans = 3
net.ipv4.tcp_ecn = 2
net.ipv4.tcp_ecn_fallback = 1
net.ipv4.tcp_ehash_entries = 1024
net.ipv4.tcp_fack = 0
net.ipv4.tcp_fastopen = 1
net.ipv4.tcp_fastopen_blackhole_timeout_sec = 0
net.ipv4.tcp_fastopen_key = 00000000-00000000-00000000-00000000
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_frto = 2
net.ipv4.tcp_fwmark_accept = 0
net.ipv4.tcp_invalid_ratelimit = 500
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_limit_output_bytes = 1048576
net.ipv4.tcp_low_latency = 0
net.ipv4.tcp_max_orphans = 512
net.ipv4.tcp_max_reordering = 300
net.ipv4.tcp_max_syn_backlog = 128
net.ipv4.tcp_max_tw_buckets = 512
net.ipv4.tcp_mem = 1323 1767    2646
net.ipv4.tcp_migrate_req = 0
net.ipv4.tcp_min_rtt_wlen = 300
net.ipv4.tcp_min_snd_mss = 48
net.ipv4.tcp_min_tso_segs = 2
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_mtu_probe_floor = 48
net.ipv4.tcp_mtu_probing = 0
net.ipv4.tcp_no_metrics_save = 0
net.ipv4.tcp_no_ssthresh_metrics_save = 1
net.ipv4.tcp_notsent_lowat = 4294967295
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_pacing_ca_ratio = 120
net.ipv4.tcp_pacing_ss_ratio = 200
net.ipv4.tcp_probe_interval = 600
net.ipv4.tcp_probe_threshold = 8
net.ipv4.tcp_recovery = 1
net.ipv4.tcp_reflect_tos = 0
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_retrans_collapse = 1
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_rfc1337 = 0
net.ipv4.tcp_rmem = 4096        131072  904992
net.ipv4.tcp_sack = 1
net.ipv4.tcp_shrink_window = 0
net.ipv4.tcp_slow_start_after_idle = 1
net.ipv4.tcp_stdurg = 0
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_thin_linear_timeouts = 0
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_tso_rtt_log = 9
net.ipv4.tcp_tso_win_divisor = 3
net.ipv4.tcp_tw_reuse = 2
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_wmem = 4096        16384   904992
net.ipv4.tcp_workaround_signed_windows = 0
net.ipv4.udp_early_demux = 1
net.ipv4.udp_mem = 2649 3535    5298
net.ipv4.udp_rmem_min = 4096
net.ipv4.udp_wmem_min = 4096
net.ipv6.anycast_src_echo_reply = 0
net.ipv6.auto_flowlabels = 1
net.ipv6.bindv6only = 0
net.ipv6.conf.all.accept_dad = 0
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.all.accept_ra_defrtr = 1
net.ipv6.conf.all.accept_ra_from_local = 0
net.ipv6.conf.all.accept_ra_min_hop_limit = 1
net.ipv6.conf.all.accept_ra_min_lft = 0
net.ipv6.conf.all.accept_ra_mtu = 1
net.ipv6.conf.all.accept_ra_pinfo = 1
net.ipv6.conf.all.accept_redirects = 1
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_untracked_na = 0
net.ipv6.conf.all.addr_gen_mode = 0
net.ipv6.conf.all.autoconf = 1
net.ipv6.conf.all.dad_transmits = 1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.all.disable_policy = 0
net.ipv6.conf.all.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.all.drop_unsolicited_na = 0
net.ipv6.conf.all.enhanced_dad = 1
net.ipv6.conf.all.force_mld_version = 0
net.ipv6.conf.all.force_tllao = 0
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.all.hop_limit = 64
net.ipv6.conf.all.ignore_routes_with_linkdown = 0
net.ipv6.conf.all.ioam6_enabled = 0
net.ipv6.conf.all.ioam6_id = 65535
net.ipv6.conf.all.ioam6_id_wide = 4294967295
net.ipv6.conf.all.keep_addr_on_down = 0
net.ipv6.conf.all.max_addresses = 16
net.ipv6.conf.all.max_desync_factor = 600
net.ipv6.conf.all.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.all.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.all.mtu = 1280
net.ipv6.conf.all.ndisc_evict_nocarrier = 1
net.ipv6.conf.all.ndisc_notify = 0
net.ipv6.conf.all.ndisc_tclass = 0
net.ipv6.conf.all.proxy_ndp = 0
net.ipv6.conf.all.ra_defrtr_metric = 1024
net.ipv6.conf.all.regen_max_retry = 3
net.ipv6.conf.all.router_solicitation_delay = 1
net.ipv6.conf.all.router_solicitation_interval = 4
net.ipv6.conf.all.router_solicitation_max_interval = 3600
net.ipv6.conf.all.router_solicitations = -1
net.ipv6.conf.all.rpl_seg_enabled = 0
net.ipv6.conf.all.seg6_enabled = 0
net.ipv6.conf.all.suppress_frag_ndisc = 1
net.ipv6.conf.all.temp_prefered_lft = 86400
net.ipv6.conf.all.temp_valid_lft = 604800
net.ipv6.conf.all.use_oif_addrs_only = 0
net.ipv6.conf.all.use_tempaddr = 0
net.ipv6.conf.default.accept_dad = 1
net.ipv6.conf.default.accept_ra = 1
net.ipv6.conf.default.accept_ra_defrtr = 1
net.ipv6.conf.default.accept_ra_from_local = 0
net.ipv6.conf.default.accept_ra_min_hop_limit = 1
net.ipv6.conf.default.accept_ra_min_lft = 0
net.ipv6.conf.default.accept_ra_mtu = 1
net.ipv6.conf.default.accept_ra_pinfo = 1
net.ipv6.conf.default.accept_redirects = 1
net.ipv6.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_untracked_na = 0
net.ipv6.conf.default.addr_gen_mode = 0
net.ipv6.conf.default.autoconf = 1
net.ipv6.conf.default.dad_transmits = 1
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.default.disable_policy = 0
net.ipv6.conf.default.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.default.drop_unsolicited_na = 0
net.ipv6.conf.default.enhanced_dad = 1
net.ipv6.conf.default.force_mld_version = 0
net.ipv6.conf.default.force_tllao = 0
net.ipv6.conf.default.forwarding = 0
net.ipv6.conf.default.hop_limit = 64
net.ipv6.conf.default.ignore_routes_with_linkdown = 0
net.ipv6.conf.default.ioam6_enabled = 0
net.ipv6.conf.default.ioam6_id = 65535
net.ipv6.conf.default.ioam6_id_wide = 4294967295
net.ipv6.conf.default.keep_addr_on_down = 0
net.ipv6.conf.default.max_addresses = 16
net.ipv6.conf.default.max_desync_factor = 600
net.ipv6.conf.default.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.default.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.default.mtu = 1280
net.ipv6.conf.default.ndisc_evict_nocarrier = 1
net.ipv6.conf.default.ndisc_notify = 0
net.ipv6.conf.default.ndisc_tclass = 0
net.ipv6.conf.default.proxy_ndp = 0
net.ipv6.conf.default.ra_defrtr_metric = 1024
net.ipv6.conf.default.regen_max_retry = 3
net.ipv6.conf.default.router_solicitation_delay = 1
net.ipv6.conf.default.router_solicitation_interval = 4
net.ipv6.conf.default.router_solicitation_max_interval = 3600
net.ipv6.conf.default.router_solicitations = -1
net.ipv6.conf.default.rpl_seg_enabled = 0
net.ipv6.conf.default.seg6_enabled = 0
net.ipv6.conf.default.suppress_frag_ndisc = 1
net.ipv6.conf.default.temp_prefered_lft = 86400
net.ipv6.conf.default.temp_valid_lft = 604800
net.ipv6.conf.default.use_oif_addrs_only = 0
net.ipv6.conf.default.use_tempaddr = 0
net.ipv6.conf.enx3495db26e312.accept_dad = 1
net.ipv6.conf.enx3495db26e312.accept_ra = 0
net.ipv6.conf.enx3495db26e312.accept_ra_defrtr = 1
net.ipv6.conf.enx3495db26e312.accept_ra_from_local = 0
net.ipv6.conf.enx3495db26e312.accept_ra_min_hop_limit = 1
net.ipv6.conf.enx3495db26e312.accept_ra_min_lft = 0
net.ipv6.conf.enx3495db26e312.accept_ra_mtu = 1
net.ipv6.conf.enx3495db26e312.accept_ra_pinfo = 1
net.ipv6.conf.enx3495db26e312.accept_redirects = 1
net.ipv6.conf.enx3495db26e312.accept_source_route = 0
net.ipv6.conf.enx3495db26e312.accept_untracked_na = 0
net.ipv6.conf.enx3495db26e312.addr_gen_mode = 0
net.ipv6.conf.enx3495db26e312.autoconf = 1
net.ipv6.conf.enx3495db26e312.dad_transmits = 1
net.ipv6.conf.enx3495db26e312.disable_ipv6 = 0
net.ipv6.conf.enx3495db26e312.disable_policy = 0
net.ipv6.conf.enx3495db26e312.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.enx3495db26e312.drop_unsolicited_na = 0
net.ipv6.conf.enx3495db26e312.enhanced_dad = 1
net.ipv6.conf.enx3495db26e312.force_mld_version = 0
net.ipv6.conf.enx3495db26e312.force_tllao = 0
net.ipv6.conf.enx3495db26e312.forwarding = 0
net.ipv6.conf.enx3495db26e312.hop_limit = 64
net.ipv6.conf.enx3495db26e312.ignore_routes_with_linkdown = 0
net.ipv6.conf.enx3495db26e312.ioam6_enabled = 0
net.ipv6.conf.enx3495db26e312.ioam6_id = 65535
net.ipv6.conf.enx3495db26e312.ioam6_id_wide = 4294967295
net.ipv6.conf.enx3495db26e312.keep_addr_on_down = 0
net.ipv6.conf.enx3495db26e312.max_addresses = 16
net.ipv6.conf.enx3495db26e312.max_desync_factor = 600
net.ipv6.conf.enx3495db26e312.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.enx3495db26e312.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.enx3495db26e312.mtu = 1500
net.ipv6.conf.enx3495db26e312.ndisc_evict_nocarrier = 1
net.ipv6.conf.enx3495db26e312.ndisc_notify = 0
net.ipv6.conf.enx3495db26e312.ndisc_tclass = 0
net.ipv6.conf.enx3495db26e312.proxy_ndp = 0
net.ipv6.conf.enx3495db26e312.ra_defrtr_metric = 1024
net.ipv6.conf.enx3495db26e312.regen_max_retry = 3
net.ipv6.conf.enx3495db26e312.router_solicitation_delay = 1
net.ipv6.conf.enx3495db26e312.router_solicitation_interval = 4
net.ipv6.conf.enx3495db26e312.router_solicitation_max_interval = 3600
net.ipv6.conf.enx3495db26e312.router_solicitations = -1
net.ipv6.conf.enx3495db26e312.rpl_seg_enabled = 0
net.ipv6.conf.enx3495db26e312.seg6_enabled = 0
net.ipv6.conf.enx3495db26e312.suppress_frag_ndisc = 1
net.ipv6.conf.enx3495db26e312.temp_prefered_lft = 86400
net.ipv6.conf.enx3495db26e312.temp_valid_lft = 604800
net.ipv6.conf.enx3495db26e312.use_oif_addrs_only = 0
net.ipv6.conf.enx3495db26e312.use_tempaddr = 0
net.ipv6.conf.lo.accept_dad = -1
net.ipv6.conf.lo.accept_ra = 1
net.ipv6.conf.lo.accept_ra_defrtr = 1
net.ipv6.conf.lo.accept_ra_from_local = 0
net.ipv6.conf.lo.accept_ra_min_hop_limit = 1
net.ipv6.conf.lo.accept_ra_min_lft = 0
net.ipv6.conf.lo.accept_ra_mtu = 1
net.ipv6.conf.lo.accept_ra_pinfo = 1
net.ipv6.conf.lo.accept_redirects = 1
net.ipv6.conf.lo.accept_source_route = 0
net.ipv6.conf.lo.accept_untracked_na = 0
net.ipv6.conf.lo.addr_gen_mode = 0
net.ipv6.conf.lo.autoconf = 1
net.ipv6.conf.lo.dad_transmits = 1
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.lo.disable_policy = 0
net.ipv6.conf.lo.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.lo.drop_unsolicited_na = 0
net.ipv6.conf.lo.enhanced_dad = 1
net.ipv6.conf.lo.force_mld_version = 0
net.ipv6.conf.lo.force_tllao = 0
net.ipv6.conf.lo.forwarding = 0
net.ipv6.conf.lo.hop_limit = 64
net.ipv6.conf.lo.ignore_routes_with_linkdown = 0
net.ipv6.conf.lo.ioam6_enabled = 0
net.ipv6.conf.lo.ioam6_id = 65535
net.ipv6.conf.lo.ioam6_id_wide = 4294967295
net.ipv6.conf.lo.keep_addr_on_down = 0
net.ipv6.conf.lo.max_addresses = 16
net.ipv6.conf.lo.max_desync_factor = 600
net.ipv6.conf.lo.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.lo.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.lo.mtu = 65536
net.ipv6.conf.lo.ndisc_evict_nocarrier = 1
net.ipv6.conf.lo.ndisc_notify = 0
net.ipv6.conf.lo.ndisc_tclass = 0
net.ipv6.conf.lo.proxy_ndp = 0
net.ipv6.conf.lo.ra_defrtr_metric = 1024
net.ipv6.conf.lo.regen_max_retry = 3
net.ipv6.conf.lo.router_solicitation_delay = 1
net.ipv6.conf.lo.router_solicitation_interval = 4
net.ipv6.conf.lo.router_solicitation_max_interval = 3600
net.ipv6.conf.lo.router_solicitations = -1
net.ipv6.conf.lo.rpl_seg_enabled = 0
net.ipv6.conf.lo.seg6_enabled = 0
net.ipv6.conf.lo.suppress_frag_ndisc = 1
net.ipv6.conf.lo.temp_prefered_lft = 86400
net.ipv6.conf.lo.temp_valid_lft = 604800
net.ipv6.conf.lo.use_oif_addrs_only = 0
net.ipv6.conf.lo.use_tempaddr = -1
net.ipv6.conf.sit0.accept_dad = -1
net.ipv6.conf.sit0.accept_ra = 1
net.ipv6.conf.sit0.accept_ra_defrtr = 1
net.ipv6.conf.sit0.accept_ra_from_local = 0
net.ipv6.conf.sit0.accept_ra_min_hop_limit = 1
net.ipv6.conf.sit0.accept_ra_min_lft = 0
net.ipv6.conf.sit0.accept_ra_mtu = 1
net.ipv6.conf.sit0.accept_ra_pinfo = 1
net.ipv6.conf.sit0.accept_redirects = 1
net.ipv6.conf.sit0.accept_source_route = 0
net.ipv6.conf.sit0.accept_untracked_na = 0
net.ipv6.conf.sit0.addr_gen_mode = 0
net.ipv6.conf.sit0.autoconf = 1
net.ipv6.conf.sit0.dad_transmits = 1
net.ipv6.conf.sit0.disable_ipv6 = 0
net.ipv6.conf.sit0.disable_policy = 0
net.ipv6.conf.sit0.drop_unicast_in_l2_multicast = 0
net.ipv6.conf.sit0.drop_unsolicited_na = 0
net.ipv6.conf.sit0.enhanced_dad = 1
net.ipv6.conf.sit0.force_mld_version = 0
net.ipv6.conf.sit0.force_tllao = 0
net.ipv6.conf.sit0.forwarding = 0
net.ipv6.conf.sit0.hop_limit = 64
net.ipv6.conf.sit0.ignore_routes_with_linkdown = 0
net.ipv6.conf.sit0.ioam6_enabled = 0
net.ipv6.conf.sit0.ioam6_id = 65535
net.ipv6.conf.sit0.ioam6_id_wide = 4294967295
net.ipv6.conf.sit0.keep_addr_on_down = 0
net.ipv6.conf.sit0.max_addresses = 16
net.ipv6.conf.sit0.max_desync_factor = 600
net.ipv6.conf.sit0.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.sit0.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.sit0.mtu = 1480
net.ipv6.conf.sit0.ndisc_evict_nocarrier = 1
net.ipv6.conf.sit0.ndisc_notify = 0
net.ipv6.conf.sit0.ndisc_tclass = 0
net.ipv6.conf.sit0.proxy_ndp = 0
net.ipv6.conf.sit0.ra_defrtr_metric = 1024
net.ipv6.conf.sit0.regen_max_retry = 3
net.ipv6.conf.sit0.router_solicitation_delay = 1
net.ipv6.conf.sit0.router_solicitation_interval = 4
net.ipv6.conf.sit0.router_solicitation_max_interval = 3600
net.ipv6.conf.sit0.router_solicitations = -1
net.ipv6.conf.sit0.rpl_seg_enabled = 0
net.ipv6.conf.sit0.seg6_enabled = 0
net.ipv6.conf.sit0.suppress_frag_ndisc = 1
net.ipv6.conf.sit0.temp_prefered_lft = 86400
net.ipv6.conf.sit0.temp_valid_lft = 604800
net.ipv6.conf.sit0.use_oif_addrs_only = 0
net.ipv6.conf.sit0.use_tempaddr = -1
net.ipv6.fib_multipath_hash_fields = 7
net.ipv6.fib_multipath_hash_policy = 0
net.ipv6.fib_notify_on_flag_change = 0
net.ipv6.flowlabel_consistency = 1
net.ipv6.flowlabel_reflect = 0
net.ipv6.flowlabel_state_ranges = 0
net.ipv6.fwmark_reflect = 0
net.ipv6.icmp.echo_ignore_all = 0
net.ipv6.icmp.echo_ignore_anycast = 0
net.ipv6.icmp.echo_ignore_multicast = 0
net.ipv6.icmp.ratelimit = 1000
net.ipv6.icmp.ratemask = 0-1,3-127
net.ipv6.idgen_delay = 1
net.ipv6.idgen_retries = 3
net.ipv6.ioam6_id = 16777215
net.ipv6.ioam6_id_wide = 4294967295     16777215
net.ipv6.ip6frag_high_thresh = 4194304
net.ipv6.ip6frag_low_thresh = 3145728
net.ipv6.ip6frag_secret_interval = 0
net.ipv6.ip6frag_time = 60
net.ipv6.ip_nonlocal_bind = 0
net.ipv6.max_dst_opts_length = 2147483647
net.ipv6.max_dst_opts_number = 8
net.ipv6.max_hbh_length = 2147483647
net.ipv6.max_hbh_opts_number = 8
net.ipv6.mld_max_msf = 64
net.ipv6.mld_qrv = 2
net.ipv6.neigh.default.anycast_delay = 100
net.ipv6.neigh.default.app_solicit = 0
net.ipv6.neigh.default.base_reachable_time_ms = 30000
net.ipv6.neigh.default.delay_first_probe_time = 5
net.ipv6.neigh.default.gc_interval = 30
net.ipv6.neigh.default.gc_stale_time = 60
net.ipv6.neigh.default.gc_thresh1 = 128
net.ipv6.neigh.default.gc_thresh2 = 512
net.ipv6.neigh.default.gc_thresh3 = 1024
net.ipv6.neigh.default.interval_probe_time_ms = 5000
net.ipv6.neigh.default.locktime = 0
net.ipv6.neigh.default.mcast_resolicit = 0
net.ipv6.neigh.default.mcast_solicit = 3
net.ipv6.neigh.default.proxy_delay = 80
net.ipv6.neigh.default.proxy_qlen = 64
net.ipv6.neigh.default.retrans_time_ms = 1000
net.ipv6.neigh.default.ucast_solicit = 3
net.ipv6.neigh.default.unres_qlen = 91
net.ipv6.neigh.default.unres_qlen_bytes = 180224
net.ipv6.neigh.enx3495db26e312.anycast_delay = 100
net.ipv6.neigh.enx3495db26e312.app_solicit = 0
net.ipv6.neigh.enx3495db26e312.base_reachable_time_ms = 30000
net.ipv6.neigh.enx3495db26e312.delay_first_probe_time = 5
net.ipv6.neigh.enx3495db26e312.gc_stale_time = 60
net.ipv6.neigh.enx3495db26e312.interval_probe_time_ms = 5000
net.ipv6.neigh.enx3495db26e312.locktime = 0
net.ipv6.neigh.enx3495db26e312.mcast_resolicit = 0
net.ipv6.neigh.enx3495db26e312.mcast_solicit = 3
net.ipv6.neigh.enx3495db26e312.proxy_delay = 80
net.ipv6.neigh.enx3495db26e312.proxy_qlen = 64
net.ipv6.neigh.enx3495db26e312.retrans_time_ms = 1000
net.ipv6.neigh.enx3495db26e312.ucast_solicit = 3
net.ipv6.neigh.enx3495db26e312.unres_qlen = 91
net.ipv6.neigh.enx3495db26e312.unres_qlen_bytes = 180224
net.ipv6.neigh.lo.anycast_delay = 100
net.ipv6.neigh.lo.app_solicit = 0
net.ipv6.neigh.lo.base_reachable_time_ms = 30000
net.ipv6.neigh.lo.delay_first_probe_time = 5
net.ipv6.neigh.lo.gc_stale_time = 60
net.ipv6.neigh.lo.interval_probe_time_ms = 5000
net.ipv6.neigh.lo.locktime = 0
net.ipv6.neigh.lo.mcast_resolicit = 0
net.ipv6.neigh.lo.mcast_solicit = 3
net.ipv6.neigh.lo.proxy_delay = 80
net.ipv6.neigh.lo.proxy_qlen = 64
net.ipv6.neigh.lo.retrans_time_ms = 1000
net.ipv6.neigh.lo.ucast_solicit = 3
net.ipv6.neigh.lo.unres_qlen = 91
net.ipv6.neigh.lo.unres_qlen_bytes = 180224
net.ipv6.neigh.sit0.anycast_delay = 100
net.ipv6.neigh.sit0.app_solicit = 0
net.ipv6.neigh.sit0.base_reachable_time_ms = 30000
net.ipv6.neigh.sit0.delay_first_probe_time = 5
net.ipv6.neigh.sit0.gc_stale_time = 60
net.ipv6.neigh.sit0.interval_probe_time_ms = 5000
net.ipv6.neigh.sit0.locktime = 0
net.ipv6.neigh.sit0.mcast_resolicit = 0
net.ipv6.neigh.sit0.mcast_solicit = 3
net.ipv6.neigh.sit0.proxy_delay = 80
net.ipv6.neigh.sit0.proxy_qlen = 64
net.ipv6.neigh.sit0.retrans_time_ms = 1000
net.ipv6.neigh.sit0.ucast_solicit = 3
net.ipv6.neigh.sit0.unres_qlen = 91
net.ipv6.neigh.sit0.unres_qlen_bytes = 180224
net.ipv6.route.gc_elasticity = 9
net.ipv6.route.gc_interval = 30
net.ipv6.route.gc_min_interval = 0
net.ipv6.route.gc_min_interval_ms = 500
net.ipv6.route.gc_thresh = 1024
net.ipv6.route.gc_timeout = 60
net.ipv6.route.max_size = 4096
net.ipv6.route.min_adv_mss = 1220
net.ipv6.route.mtu_expires = 600
net.ipv6.route.skip_notify_on_dev_down = 0
net.ipv6.seg6_flowlabel = 0
net.unix.max_dgram_qlen = 512
sunrpc.max_resvport = 1023
sunrpc.min_resvport = 665
sunrpc.tcp_fin_timeout = 15
sunrpc.tcp_max_slot_table_entries = 65536
sunrpc.tcp_slot_table_entries = 2
sunrpc.udp_slot_table_entries = 16
user.max_cgroup_namespaces = 899
user.max_inotify_instances = 128
user.max_inotify_watches = 8192
user.max_ipc_namespaces = 899
user.max_mnt_namespaces = 899
user.max_net_namespaces = 899
user.max_pid_namespaces = 899
user.max_time_namespaces = 899
user.max_user_namespaces = 899
user.max_uts_namespaces = 899
vm.admin_reserve_kbytes = 3547
vm.compact_unevictable_allowed = 1
vm.compaction_proactiveness = 20
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirty_writeback_centisecs = 500
vm.dirtytime_expire_seconds = 43200
vm.extfrag_threshold = 500
vm.laptop_mode = 0
vm.legacy_va_layout = 0
vm.lowmem_reserve_ratio = 32    0
vm.max_map_count = 1048576
vm.min_free_kbytes = 1357
vm.mmap_min_addr = 4096
vm.mmap_rnd_bits = 8
vm.oom_dump_tasks = 1
vm.oom_kill_allocating_task = 0
vm.overcommit_kbytes = 0
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.page_lock_unfairness = 5
vm.panic_on_oom = 0
vm.percpu_pagelist_high_fraction = 0
vm.swappiness = 60
vm.user_reserve_kbytes = 3547
vm.vfs_cache_pressure = 100
vm.watermark_boost_factor = 15000
vm.watermark_scale_factor = 10
user@brain:~$

 

sysctl.conf 最適化項目の解説

カテゴリパラメータ設定値設定変更の狙い
(電子辞書環境への効果)
メモリvm.swappiness0
SDカードへのスワップを極限まで禁止。
物理RAMが本当にゼロになるまで1GBのスワップファイルへの書き込みを拒否し、SDカードのI/Oによる「突発的なフリーズ(プチフリ)」を力技で防止する。
レスポンス向上に有効ですがデメリットもあります。
・メモリ不足時のOOM発生が早まる
→スワップ領域を大きめに作成
・Firefox等アプリによってはでは逆効果の場合もあります
メモリvm.vfs_cache_pressure50ゲームの読み込みを高速化。
ディレクトリやファイルのキャッシュ(VFSキャッシュ)をデフォルトよりメモリ上に長く保持させ、ゲーム中の画像や音声データの再読み込みによるカクつきを減らすことが見込めます。
(デフォルト値:100)
I/Ovm.dirty_ratio5SDカードの「プチフリ」防止(第1弾)。
メモリ上に溜め込める未書き込みデータの上限を物理RAMの5%に制限しまu。
データが大量に溜まってから一気にSDカードへ書き込まれることによる、システム全体の数秒間のフリーズを防ぐ効果が期待できます。
I/Ovm.dirty_background_ratio2SDカードの「プチフリ」防止(第2弾)。
未書き込みデータが2%に達した時点で、裏で少しずつSDカードへの書き込み(バックグラウンドフラッシュ)を開始させるようにします。
I/Ovm.dirty_expire_centisecs1000書き込み猶予の短縮。
メモリ上にデータが生まれてから10秒(1000センチ秒)経ったら書き込み対象にする。データを長く持ちすぎず、小まめにSDカードへ流します。
I/Ovm.dirty_writeback_centisecs300書き込みプロセスの頻繁な起動。
3秒(300センチ秒)に1回、バックグラウンドの書き込みスレッドを起動してメモリをチェックさせる。これによりI/O負荷を極小に分散を期待。
CPUkernel.sched_child_runs_first0親プロセスのカクつき防止。
プロセスが新しく子プロセスを作った(forkした)際、子プロセスを無理に優先させず親プロセスの処理を継続する。ゲームのバックグラウンド処理などで一瞬挙動が重くなるのを防ぎます。
ネットnet.ipv4.tcp_rmem4096
87380
131072
受信バッファの制限。 ネットワーク受信に使うメモリ上限を最大128KBに制限し、貴重な物理RAMの浪費を徹底的に抑えます。
ネットnet.ipv4.tcp_wmem4096
65536
131072
送信バッファの制限。 ネットワーク送信に使うメモリ上限を最大128KBに制限し、上記同様にメモリを節約します。
ネットnet.ipv4.tcp_fin_timeout15切断待ちの高速化。 通信が切断された後の無駄な待ち時間を15秒に短縮し、通信用のソケットリソースを素早く解放するようにします。
ネットnet.ipv4.tcp_tw_reuse1ソケットの再利用。 TIME_WAIT 状態にある古いソケットを新しい通信で即座に使い回し、カーネルのメモリ消費と管理負荷を減らします。
カーネルkernel.printk3 3 3 3ログ出力によるCPU負荷の軽減。 画面(コンソール)やバックグラウンドへのシステムログ出力レベルを制限し、ゲームプレイ中などにログ書き込みの負荷でガタつくのを防きます。
カーネルvm.oom_kill_allocating_task1完全フリーズの回避。 万が一ZRAMも1GBスワップも限界に達した際、カーネルが「どのプロセスを殺すか」を重い処理で探索するのをやめ、「今メモリを要求したタスク」を即座に強制終了(Kill)してシステム全体のハングアップを防ぎます。
カーネルvm.panic_on_oom0システム巻き込み防止。 メモリ枯渇(OOM)が発生しても、カーネルパニックを起こしてシステムを強制再起動・完全フリーズさせず、OS全体の生存を最優先させます。

 

ZSWAPの有効化

ZSWAPとは、Linuxカーネルに備わっている仮想メモリ圧縮機能の一つです。

通常、物理メモリが足りなくなると、スワップ領域が設定されていれば仮想メモリ帰庫で、
SD領域に別途作成したスワップ領域にメモリの一部を退避します。

しかし、Brainuxの場合メモリ容量が128MBと小さいこともありますが、
SDへの書き込みが致命的レベルに遅いため、
出来るだけ書き出し(スワップアウト)を抑制したいところです。

カーネルパラメータ[vm.swappiness=0]にて、出来るだけスワップ領域を使わない設定にしていますが、アプリのビルド時などでどうしても使うメモリ量が増えることもあるので、
この辺を対策します。(特にLToを有効にしてビルドすると大量のメモリを消費します。)

ZSWAPは、物理メモリ(RAM)が不足し、データをハードディスクやSSD(スワップ領域)に退避させる(スワップアウト)際、そのままディスクに書き込むのではなく、メモリ領域上でデータを圧縮して一時保存(キャッシュ)します。

メモリ領域がいっぱいになったり、圧縮されないようなデータについては、
スワップ領域に保存されます。

 

zswapの仕組みとメリット

  1. メモリのデータを圧縮して保持
    RAMが不足してスワップアウトが発生しそうになると、zswapはそのデータを自動的に圧縮し、RAM内に確保された専用のプール(キャッシュ領域)に保存します。
    また、圧縮できなかったデータはそのままDiskのスワップ領域に保存されます。
  2. 圧倒的な高速化
    データの圧縮・展開には少量のCPUパワーを消費しますが、遅いSSD/HDDに直接アクセスするよりも遥かに高速に処理できるため、メモリ不足時のカクつき(スラッシング)が大幅に軽減されます。
  3. ストレージ(SSD)の寿命を延ばす
    圧縮キャッシュが満杯になるまではストレージへの書き込みが発生しないため、スワップの頻発によるSSDの劣化を防ぐことができます。容量が溢れた場合は、使用頻度の低いデータから順に物理ディスクのスワップ領域へと書き出されます(ライトバック)

 

Linuxカーネルの確認

zswapには、Linuxカーネルビルド時に、モジュール組み込みが必要です。
Brainuxのビルド時の.configファイルを確認してみます。

$ zcat /proc/config.gz > ~/debian.connfig
$ grep “ZSWAP” ~/debian.connfig

$ zcat /proc/config.gz > ~/debian.connfig
$ grep "ZSWAP" ~/debian.connfig
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_DEFAULT_ON is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud"
$

こちらを確認すると、以下のようになっていました。

ZSWAP:有効
圧縮プロトコル:lzo のみ有効(デフォルト)
        CPU負荷が非常に低い。圧縮率2倍程度
ZPOOL方式   :zbud のみ有効(デフォルト)
        1つの物理ページ(通常4KB)に最大2つの圧縮ページを格納し、
        メモリ効率を高めるための仕組み

とりあえずカーネル上はZSWAPは有効になっていることを確認できました。

 

手動での有効化

まずは、現状、swap領域が有効になっているかを確認します。

$ sudo swapon –show

$ sudo swapon --show
NAME      TYPE  SIZE  USED PRIO
/swapfile file 1024M 65.3M   -2

スワップ領域として、1GBが割り当てされているのが確認できました。
もし、まだスワップ領域を作成していない場合には、
作成しておきましょう。

SWAP領域の確保

 

現在のZSWAPの稼働状況を確認します。
$ cat /sys/module/zswap/parameters/enabled

$ cat /sys/module/zswap/parameters/enabled
N

Nなので、現状は無効です。(これがデフォルト)

 

これを一時的に有効化します。
$ echo Y | sudo tee /sys/module/zswap/parameters/enabled > /dev/null

$ echo Y | sudo tee /sys/module/zswap/parameters/enabled > /dev/null

ZSWAPの設定・稼働確認

SWAPの設定の確認は、コマンドで可能です。

#設定の確認
$ grep -H . /sys/module/zswap/parameters/{enabled,compressor,max_pool_percent}

$ grep -r . /sys/module/zswap/parameters/
/sys/module/zswap/parameters/accept_threshold_percent:90
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/zpool:zbud
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/non_same_filled_pages_enabled:Y
/sys/module/zswap/parameters/compressor:lzo

zpool: zbud (1ページに2つまでしか詰め込めない、少し古い世代の管理方式)
compressor: lzo (軽量ですが圧縮率は控えめ)
max_pool_percent: 20 (メモリ128MB(使用可能分112MB)だと約22MB程度)

max_pool_percentは大きくしすぎると、プログラムが使用できる素のメモリ容量が少なくなるので注意してください。変わりに仮想メモリトータルの使用可能量は大きくなります。

メモリ       112-22 = 90MB
ZSWAP仮想メモリ (22*2) = 44MB
仮想メモリ全体   (112-22)MB+(22*2) MB +1024GB

 

SWAPの稼働状況は、以下のコマンドで可能です。

#ZSWAPの状況
$ sudo watch -n 5 “grep -r . /sys/kernel/debug/zswap/”

Every 5.0s: grep -r . /sys/kernel/debug/zswap/   brain: Mon Nov  2 17:18:13 2026

/sys/kernel/debug/zswap/same_filled_pages:173
/sys/kernel/debug/zswap/stored_pages:7521
/sys/kernel/debug/zswap/pool_total_size:15581184
/sys/kernel/debug/zswap/duplicate_entry:0
/sys/kernel/debug/zswap/written_back_pages:0
/sys/kernel/debug/zswap/reject_compress_poor:75
/sys/kernel/debug/zswap/reject_kmemcache_fail:0
/sys/kernel/debug/zswap/reject_alloc_fail:0
/sys/kernel/debug/zswap/reject_reclaim_fail:0
/sys/kernel/debug/zswap/pool_limit_hit:0

zswap稼働ステータスの分析

  • メモリ節約の効果(大)
    • stored_pages: 7521ページ(約29.4 MB分)のデータが圧縮されて
    zswap内に格納されています。
    • pool_total_size: 15,581,184 バイト(約14.9 MB)です。
    • 約29.4 MBのデータを、半分の約14.9 MBに圧縮してメモリ上に保持できているため、
    効率よく動いているようです。
  • ディスクへの書き込み(ゼロ)
    • written_back_pages: 0
    • zswapから実際のストレージ(SSD/HDD)のスワップ領域へデータを追い出す
    「ライトバック」が一度も発生していません。
    つまりスワップ処理がすべて高速なRAM(メモリ)内で完結している理想的な状態です。
  • 効率の悪いデータの拒否
    • reject_compress_poor: 75
    • 圧縮しても大してサイズが小さくならないページが75回拒否され、
    直接ディスクのスワップへ送られました(75(Page) x 4096(Byte) = 0.3MB)。
    圧縮効率が悪いデータは、無理に圧縮せずに直接スワップ領域することで、
    ZWAPのメモリプールを効率的に使おうとしているようです。
  • 同じ値で満たされたページ
    • same_filled_pages: 173
    • すべてゼロなどの同じデータで埋まったページが173ページあり、これらは圧縮すら行わず超低コストで処理されています。

 

動作させるアプリによっては、
ZSWAPを有効にすると、逆に遅くなる可能もあるので
起動するかどうかは各自で判断してください。

 

自動起動の設定

動作に問題なければ、ZSWAPをOS起動時に自動的に有効にします。

まずは、systemd-tmpfilesが有効になっているかを確認します。
結果は「static」なのでこの仕組みを使って、OS起動時にZSWAPを動くようにします。

$ systemctl is-enabled systemd-tmpfiles-setup.service
static

/etc/tmpfiles.d/zswap.conf

cat << EOF | sudo tee /etc/tmpfiles.d/zswap.conf > /dev/null
# type  path                                    mode  user  group  age  argument
f /sys/module/zswap/parameters/max_pool_percent -     -     -      -
w /sys/module/zswap/parameters/enabled          -     -     -      -    Y
w /sys/module/zswap/parameters/max_pool_percent -     -     -      -    20
w /sys/module/zswap/parameters/zpool            -     -     -      -    zbud
EOF

変更後、Brainuxを再起動して、
改めてZSWAPの稼働状況を確認します。
$ cat /sys/module/zswap/parameters/enabled

$ cat /sys/module/zswap/parameters/enabled
Y

自動的にZSWAPが有効になりました。

一時的に無効にするには、
以下のコマンドを実行してください。

$ echo N | sudo tee /sys/module/zswap/parameters/enabled > /dev/null

 

もし、自動起動も停止したいということであれば、
/etc/tmpfiles.d/zswap.conf を編集して、コメント化してください。

 

ビルド実践

試しにStellaの -O3 -flto ビルドをしてみましたが、問題なくビルド出来ました。

ZSWAPの運用的にも問題ないようです。

#ZSWAPの状況
$ sudo watch -n 5 “grep -r . /sys/kernel/debug/zswap/”

/sys/kernel/debug/zswap/same_filled_pages:52
/sys/kernel/debug/zswap/stored_pages:1316
/sys/kernel/debug/zswap/pool_total_size:2875392
/sys/kernel/debug/zswap/duplicate_entry:0
/sys/kernel/debug/zswap/written_back_pages:108
/sys/kernel/debug/zswap/reject_compress_poor:662
/sys/kernel/debug/zswap/reject_kmemcache_fail:0
/sys/kernel/debug/zswap/reject_alloc_fail:0
/sys/kernel/debug/zswap/reject_reclaim_fail:0
/sys/kernel/debug/zswap/pool_limit_hit:4024

 

ビルド完了後の統計分析

プール上限との激しい攻防
• pool_limit_hit: 4,024 回
• 前回の「2,521回」からさらに1,400回以上増加しました。やはりリンク(ld)フェーズで想像を絶するメモリ圧迫が発生し、zswapの20%制限の壁に何度も何度もぶつかっていたことが分かります。

microSD(実スワップ)への最終書き出し
• written_back_pages: 0 → 108 ページ
• 最終的に108ページ(約432KB)のデータが実スワップへとライトバックされました。
1GBの領域があったためシステムは余裕で耐えきれましたが、zswapが20%の制限内で粘り強くデータをRAM側に引き留めてくれたおかげで、microSDへの過度な書き込みアクセス(=極端な速度低下やカードの劣化)を最小限に抑え込めています。

現在のクリーンアップ状態
• stored_pages: 1,316 ページ (約5.1MB分)
• pool_total_size: 2,875,392 バイト (約2.7MB)
• ビルドプロセスが終了したため、メモリが大幅に解放されました。現在は、システムが動作を維持するために必要な最小限のデータ(約5.1MB分)が、約2.7MBに綺麗に圧縮されてzswap内にちょこんと残っている、非常に平和な状態に戻っています。

 

 

X11のフレームバッファ設定

SDL2の性能調査中に、比較対象の中に
X11のShadowFBを有効/無効にを変更するとパフォーマンスが変わるようなので、
試しに実施してみました。

このShadowFBオプションは、
/etc/X11/xorg.conf 内の Option “ShadowFB” は、画面の描画内容をグラフィックカード(VRAM)に直接書き込まず、メインメモリ(RAM)上の「シャドウ・フレームバッファ(影の領域)」に一度描画してから、まとめてVRAMへ転送する機能になります。

高性能なGPUを使っている場合は不要(または無効化すべき)ですが、画面表示が極端に重い古い環境や組み込み環境で汎用ドライバーを使っている場合は、有効にすることで表示が滑らかになる選択肢です。
つまりBrainuxのようなGPUを持たないハードでは、有効にするのがセオリーです。

Brainuxも通常は有効になっていますが、
これを無効にして確かめてみました。

  

/etc/X11/xorg.confに追加
Section “Device”セクションの中に、以下の行を追加することで変更できます。
(デフォルトは有効なので、無効に変更します。)

Option     "ShadowFB" "false"

 

sudo vi /etc/X11/xorg.conf

Section "Device"
        Identifier "device"
        Driver     "fbdev"
        Option     "ShadowFB" "false"
EndSection
Section "Screen"
        Identifier "screen"
        Device     "device"
EndSection

この変更を行った後で、
一度 jwmを終了し、再度 jwmを起動して下さい(X11の再起動です。)

 

すると、以下のグラフィック系ベンチマークが上がりました
(何回か実行した平均値です。)

testsprite (SDL1.2のテストプログラム)
	ShadowFB True	26
	ShadowFB False	39  向上率 1.5

testsprite2 (SDL2のテストプログラム)
	ShadowFB True	32
	ShadowFB False	43  向上率 1.34倍

testdraw2 (SDL2のテストプログラム)
	ShadowFB True	24
	ShadowFB False	30  向上率 1.25倍

glxgears (OPENGL系グラフィックベンチメーク)
	ShadowFB True	3
	ShadowFB False	3  向上率 1.00倍(効果あり)

 

数値(おそらくFPS:1秒あたりのフレーム数)を見ると、
一般的なLinux環境とは真逆で、Brainuxにおいては ShadowFB False(無効)の方が
パフォーマンスが良い(フレーム数が高い)という結果になっていました。

なお、OPENGL系のベンチはパフォーマンスは変わりませんでした。

 

なぜ Brainux で ShadowFB = False の方が速いのかの推測

この結果から推測してみました。

  1. メインメモリ(RAM)とVRAMの「物理的な同一性」

PCなどの独立したグラフィックボードがある環境では「遅いVRAM」と「速いメインメモリ」が分かれているため、ShadowFB が有効に働きます。
しかし、BrainのSoC(i.MX28)はメインメモリの一部をVRAMとして共有(シェア)している、または極めて近いバスで直結されています。そのため、「メインメモリ上にシャドウバッファを作って、そこからVRAMにコピーする」という ShadowFB True の挙動は、「同じメモリ内でデータを2度転送しているだけ(無駄なオーバーヘッド)」になっている可能性が高いです。

  1. CPU(ARM926EJ-S)の処理能力の限界

i.MX28のCPUは、2026年の基準から見ると非常に低クロック(約454MHz)かつシングルコアです。
ShadowFB True にすると、メインメモリから実際のフレームバッファへ画面を「コピー(転送)する処理」をCPUが純粋にソフトウェア的に処理しなければなりません。
このメモリ転送負荷(Memcpy)が、非力なCPUの大きな重荷になり、FPS低下(32→24、43→30)を招いていていると思われます。

  1. glxgears がどちらも 3 FPS で変わらない理由

glxgears はOpenGL(3D)のテストですが、Brainuxにはハードウェア3Dアクセラレータがないため、すべてCPUで計算(ソフトウェアラスタライズ:Mesa/LLVMpipeなど)しています。
ここでは「3Dの計算(CPU処理)」があまりにも重すぎる(1秒間に3回計算するのが限界)ため(3D計算自体が完全に足を引っ張っている)、その後のメモリ転送方法が True だろうが False だろうが、結果に全く影響を与えていない状態と思われます。

 

以上より、.MX28では共有メモリ構成のためShadowFBのコピーオーバーヘッドが支配的になっている可能性があります
また、OPENGL系ベンチは、メモリ転送方法に比べて3D計算自体が重いので、結果に表れなかったと思われます。

 

SDL2とSDL 1.2の内部挙動の違い、およびBrainuxにおける影響

SDL2とSDL 1.2の内部挙動の違い、およびBrainuxにおける影響は以下の通りです。

  1. SDL 1.2 と SDL2 の大きな違い
  • SDL 1.2 (古い仕様):
    基本的にすべてソフトウェア(CPU)でピクセルを計算し、
    システムメモリ上のバッファ(サーフェス)に描画します。
    ハードウェアによる描画支援(アクセラレーション)をほとんど使いません。
  • SDL2 (新しい仕様):
    内部でOpenGLやOpenGLES、XRenderなどのハードウェアによる描画
    (GPUアクセラレーション)を利用する設計が標準になっています。

 

  1. なぜSDL 1.2でも ShadowFB False が正解なのか?

SDL 1.2はもともと「CPUで処理してメモリに書く」という動きをします。

  • ShadowFB True の場合:
    「SDL1.2がCPUでメインメモリに描画する」 ➔ 「X11がそれをさらに別のシャドウバッファ(メインメモリ)にコピーする」 ➔ 「最終的に実際の液晶のフレームバッファ(メモリ)に転送される」
    という、メモリ内での三重のコピー(無駄なオーバーヘッド)が発生してしまいます。
  • ShadowFB False の場合:
    SDL 1.2が描画した内容が、余計なクッションを挟まずに液晶のフレームバッファへダイレクトに転送されるため、非力なBrainのCPU負荷を最小限に抑えられると考えられます。

 

環境変数によるパフォーマンスチェック

SDLなどは、環境変数をチェックして動作を変更します。

例えば、X11上で、SDL1.2ベースのアプリを動かす場合には、
追加で、以下の設定も効果があるようです。

export SDL_VIDEO_X11_NODIRECTCOLOR=1

環境変数 SDL_VIDEO_X11_NODIRECTCOLOR=1 は、SDL 1.2 が XWindow System(X11)環境で画面を描画する際、カラーマップ(色情報の管理方式)の自動作成を無効化し、システムのデフォルト設定を強制的に使わせるための設定です。
一言で言うと、「色の管理をサボらせて、描画の処理を軽くする(エラーを防ぐ)」設定です。

SDL 1.2 は古いライブラリであるため、画面を表示するときに「この画面は何色(何ビットカラー)で描画するか」を厳密に制御しようとします。

  • 指定しない場合(通常動作):
    SDL 1.2 は描画時に、より正確な色再現を行おうとして、X11 側に対して独自の「DirectColor(または PseudoColor)」というカラーマップ(色見本帳のようなもの)を新しく作ろうと要求します。
  • NODIRECTCOLOR=1 を指定した場合:
    独自のカラーマップ作成を明示的に禁止します。代わりに、Linux デスクトップ(X11)が元々使っているデフォルトの画面色設定(通常は 16bit や 24bit TrueColor)をそのまま使い回します。

Brainux におけるメリット

  1. 無駄な色変換処理の削減(軽量化)
    Brain の非力な CPU 環境において、独自のカラーマップを計算・適用する処理はオーバーヘッドになります。これを無効化し、システムのデフォルトに「お任せ」することで、画面描画にかかる余計な CPU 負荷を減らすことができます。
  2. 画面の「色化け」や「チラつき」の防止
    古い SDL アプリを X11 上で動かすと、アプリを起動した瞬間に画面全体の色が反転したり、サイケデリックな色合いに変色したり(カラーマップのバッティング)、最悪の場合は画面が正常に表示されずクラッシュすることがあります。この環境変数は、そうした色管理の衝突を防ぎ、安定して表示させるためのおまじないとして機能します

 

この設定を変更しても、特に画面描画には問題ないように見えますので、
いったんこの設定で運用してみたいと思います。

 

環境変数の自動設定

上記をふくめて、環境設定を調整しています。
いったん、~/.profile、~/.xprofileに以下の行を追加して運用しています。

~/.xprofile

#X11環境用環境変数
export SDL_VIDEODRIVER=x11
#export GALLIUM_DRIVER=llvmpipe
#export GALLIUM_DRIVER=""
#export SDL_VIDEO_GL_DRIVER=""
export vblank_mode=1
export SDL_NOMOUSE=0

#export SDL_RENDER_DRIVER=software
#export SDL_HINT_RENDER_DRIVER=software
export SDL_RENDER_VSYNC=1

#export LIBGL_ALWAYS_SOFTWARE=1
export LP_NUM_THREADS=1

export SDL_VIDEO_X11_NODIRECTCOLOR=1

export SDL_AUDIODRIVER=pulse

 

~/.profile

# すでに .xprofile 等で X11 用の変数が割り当てられている場合はスキップする
if [ "$MY_ENV_TYPE" != "X11" ]; then
    if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
        # ----------------------------------
        # SSHリモートログイン環境
        # ----------------------------------
        export DISPLAY=:0
        export SDL_VIDEODRIVER=x11
        #export GALLIUM_DRIVER=llvmpipe
        export SDL_RENDER_VSYNC=1
        export vblank_mode=0
        export LP_NUM_THREADS=1
        export SDL_VIDEO_X11_NODIRECTCOLOR=1
        export SDL_NOMOUSE=0
     else
        # ----------------------------------
        # CUIコンソール(実機ログイン)環境
        # ----------------------------------
        export SDL_VIDEODRIVER=fbcon
        #export GALLIUM_DRIVER=llvmpipe
        export SDL_RENDER_VSYNC=1
        export vblank_mode=0
        export LP_NUM_THREADS=1
        export SDL_NOMOUSE=1
    fi
fi

export SDL_AUDIODRIVER=pulse

参考:

その他環境編集オプションが、速度にどれだけかかわるかも確認してみました。

export GALLIUM_DRIVER=”” 変わらない(29)
export SDL_VIDEO_GL_DRIVER=”” 変わらない(29)
export vblank_mode=0 1のほうが早い
export SDL_RENDER_DRIVER=software 遅くなる(26)
export SDL_HINT_RENDER_DRIVER=software 遅くなる(28)

export SDL_RENDER_VSYNC=0 変わらない(29)
#export LIBGL_ALWAYS_SOFTWARE=1 遅くなる(28)
#export LP_NUM_THREADS=1 速くなる(時々30超える)

Views: 13

カテゴリー: Brain, Brainux, debian, Linux, 電子手帳 | コメントする