目次: Linux
何か訳があってLinuxのTHP(Transparent HugePages)を一時的に無効にしたいときの方法をメモしておきます。OSを再起動すると元に戻ってしまいます。
# echo never > /sys/kernel/mm/transparent_hugepage/enabled # cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] # echo never > /sys/kernel/mm/transparent_hugepage/defrag # cat /sys/kernel/mm/transparent_hugepage/defrag always defer defer+madvise madvise [never]
やり方は/sys/kernel/mm/transparent_hugepageにあるenabledやdefragに値neverを書き込むことで無効化できます。有効化するには値alwaysやmadviseを書き込めば良いです。とても簡単でありがたいです。
# echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag # cat /sys/kernel/mm/transparent_hugepage/khugepaged/defrag 0
THP関連の機能はkhugepagedもいます。アイドル状態のときに動作して、まとめられそうなメモリをTHPに置き換えていくカーネルスレッドです。この機能はkhugepaged/defragで有効/無効を切り替えることができます。
この記事にコメントする
目次: Linux
以前(2022年2月2日の日記参照)、ARMやAArch64系のQEMUで動作確認するためのイメージとしてRaspberry Pi OS Liteを使いました。正しい方法ではありませんがとりあえず動作するので便利でした。
しかしRaspberry Pi OSの実装が変わって、デフォルトユーザー(ユーザー名: pi、パスワード: raspberry)がなくなってしまいました(参考: Changing the default login user from pi - Raspberry Pi Forums)。QEMUで起動してもログインできなくて困ってしまいました。
素直に別のrootfs(buildrootなど)を使うのも一つの方法ですが、今回はRaspberry Pi OS Liteのイメージを書き換えて無理やりパスワードを設定する方法をご紹介したいと思います。
ざっくりいうとこんな操作をします。この操作はRaspberry Pi OS Liteだけでなく他のOSイメージにも応用できるので知っておくと割と便利です。
OSイメージをダウンロードします。公式サイト(Operating system images - Raspberry Pi)からダウンロードできます。パーティションの開始位置を知るためにfdiskコマンドを使います。
$ xz -d 2025-05-13-raspios-bookworm-arm64-lite.img.xz $ /sbin/fdisk 2025-05-13-raspios-bookworm-arm64-lite.img Welcome to fdisk (util-linux 2.40.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk 2025-05-13-raspios-bookworm-arm64-lite.img: 2.57 GiB, 2759852032 bytes, 5390336 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xd9c86127 Device Boot Start End Sectors Size Id Type 2025-05-13-raspios-bookworm-arm64-lite.img1 16384 1064959 1048576 512M c W95 FAT32 (LBA) 2025-05-13-raspios-bookworm-arm64-lite.img2 1064960 5390335 4325376 2.1G 83 Linux
開始位置(セクタ単位)はStartの列に書いてあります。1つ目のパーティションはブート用なので放っておいて、2つ目のパーティションをloopbackファイルシステムでマウントします。オプションoffsetにはパーティションの開始位置(バイト単位)を指定します。開始位置(セクタ単位) * 512 = 1064960 * 512 = 545259520を渡してください。
$ mkdir mntdir $ sudo mount -o loop,offset=545259520 2025-05-13-raspios-bookworm-arm64-lite.img ./mntdir/ $ ls mntdir/ bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
これでRaspberry Pi用ディスクイメージのマウントと読み書きができるようになりました。
まだchrootはできません、もう1つ準備が必要です。x86_64マシン上でAArch64バイナリを実行できるようにqemuをインストールし、イメージ内にコピーします。
$ sudo apt-get install qemu-user-static $ sudo cp /usr/bin/qemu-aarch64-static ./mntdir/bin/
これでchrootの準備ができました。
ルートディレクトリにchrootすると、Lite OS上で操作しているときとほぼ同様にイメージを変更することができます。どうやらユーザーpiが元々存在しているようなので、passwdコマンドでpiユーザーのパスワードを好きなものに変えましょう。新規にユーザーを追加しても良いと思います。
$ sudo chroot ./mntdir/ # passwd pi New password: pi Retype new password: pi passwd: password updated successfully $ sudo umount ./mntdir/
このとき実行しているのは全てAArch64用のバイナリです。コンピュータがわかる人ほど不思議に思うんじゃないでしょうか。x86_64上で他アーキテクチャのバイナリを実行する仕組みは、昔に簡単な紹介(2024年8月6日の日記参照)をしていますので、興味があればご覧ください。
QEMUで動作確認しましょう。linuxのビルド方法は以前の日記(2022年2月2日の日記参照)などをご参照ください。
$ qemu-system-aarch64 \
-machine virt \
-cpu cortex-a53
-smp 1 \ \
-m 4G \
-serial stdio \
-kernel arch/arm64/boot/Image \
-append "rw root=/dev/vda2" \
-drive file=2025-05-13-raspios-bookworm-arm64-lite.img,format=raw,if=virtio
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 6.15.0-next-20250605-00001-g34bdb989e513 (katsuhiro@blackbird) (aarch64-unknown-linux-gnu-gcc (crosstool-NG 1.24.0.501_5bf4485) 11.2.0, GNU ld (crosstool-NG 1.24.0.501_5bf4485) 2.37) #94 SMP PREEMPT Tue Jun 10 01:53:41 JST 2025
[ 0.000000] random: crng init done
[ 0.000000] Machine model: linux,dummy-virt
[ 0.000000] efi: UEFI not found.
[ 0.000000] OF: reserved mem: Reserved memory: No reserved-memory node in the DT
...
[ OK ] Started NetworkManager-dis…Manager Script Dispatcher Service.
[ OK ] Finished NetworkManager-wa…[0m - Network Manager Wait Online.
[ OK ] Reached target network-online.target - Network is Online.
Starting rpc-statd-notify.…- Notify NFS peers of a restart...
Debian GNU/Linux 12 raspberrypi ttyAMA0
My IP address is 10.0.2.15 fec0::a5fc:71ea:fb56:5aee
raspberrypi login: pi
Password: pi
Linux raspberrypi 6.15.0-next-20250605-00001-g34bdb989e513 #94 SMP PREEMPT Tue Jun 10 01:53:41 JST 2025 aarch64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
pi@raspberrypi:~$
ログインできました。良かった。
この記事にコメントする
目次: Linux
WatchdogもしくはWatchdog Timerなどと呼ばれますが、システムがハングアップしたときに強制的に再起動する仕組みがあります(SW実装とHW実装があります)。Linuxも対応していますので、試しに使ってみます。
今回はROCK 3Cを使って実験したいと思います。ROCK 3Cの/dev以下を見ると/dev/watchdog0がありますから、HW Watchdogが存在していることがわかります。
$ ls /dev/watchdog* /dev/watchdog /dev/watchdog0
デバイスツリーのwatchdogのcompatibleを確認すると"snps,dw-wdt"でした。つまりsnps(= Synopsys社)のWatchdog IPを搭載しています。
# cat /proc/device-tree/watchdog@fe600000/compatible snps,dw-wdt
頭についているdw-はDesignWareの略でしょう。DesignWareはSynopsysが販売/提供しているIPのブランド名です。
準備は簡単でaptなどでwatchdogパッケージをインストールするだけです。環境はDebian GNU/Linux 11 (bullseye)です。
# apt-get install watchdog
インストールしたら設定ファイル/etc/watchdog.confの最後の行にwatchdog-device設定を付け加えて、restartします。
# Check for a running process/daemon by its PID file. For example,
# check if rsyslogd is still running by enabling the following line:
#pidfile = /var/run/rsyslogd.pid
watchdog-device = /dev/watchdog0
# apt-get restart watchdog
動作確認として、ソフトウェアの動作を完全に停止させて、Watchdogがハードウェア的にリセットを掛けてくれる様子を見ます。ソフトウェアを完全に止める簡単な方法は、Sysrqにcを書き込んでわざとLinuxカーネルをクラッシュさせることでしょう。他の方法でも構いません。
echo c > /proc/sysrq-trigger (89秒後に再起動されるはず)
再起動されない場合は設定ファイルの書き方が間違っていると思われます。ありがちな間違いとしては、
もし変な設定になっていたときはsystemctl status watchdogを見ると、エラーが出ているはずです。
#### 設定名を間違えたとき(alive=にデバイスファイル名が出ない) rock-3c watchdog[1398]: alive=[none] heartbeat=[none] to=root no_act=no force=no #### デバイスファイル名を間違えたとき rock-3c watchdog[1376]: cannot open /dev/watchdogeee (errno = 2 = 'No such file or directory')
正しく設定できているとalive=の部分にデバイスファイル名が出ます。
rock-3c watchdog[1419]: alive=/dev/watchdog0 heartbeat=[none] to=root no_act=no force=no rock-3c watchdog[1419]: watchdog now set to 89 seconds rock-3c watchdog[1419]: hardware watchdog identity: Synopsys DesignWare Watchdog
どのWatchdogデバイスでも必ずそうなるのかはわからないですが、私の環境だと再起動までの秒数と、ハードウェア名(Synopsys DesignWare Watchdog)も出ていました。
この記事にコメントする
Newメガネを注文しました。今までどんなメガネかけてたっけ?と気になったので日記から掘り起こしてみました。古いものはいつ買ったのかすら怪しく、詳細も書き残していませんでした。メガネに関心がないことが良くわかりますね……。
フォーナインズ(999.9)の前にもメガネは持っていたのですが、記録がなくて何もわかりません。パリミキに行って購入記録を聞いてみたら上記のような感じでした。20年前でも残ってるんですね。
この記事にコメントする
目次: 射的
JTSA Unlimitedの大会に参加しました。
「木」ステージが大失敗、「水」もダメダメで、高速ステージの「土」もいまいち振るわず、結果は75.69秒(前回は76.75秒)でした(総合82位/113人、LM 12位/21人)。70秒台前半くらいを出したかったけど無念ですね。
練習会の記録を見ると自己ベストは65.81秒ですが、その後はほとんど60秒台が出ないところをみると、75〜70秒くらいが実力と思われます。最近はあまり上達している感じがしません。そろそろ週1練習の限界かもしれませんが、今後もゆるゆると続けていきます。
この記事にコメントする
| < | 2025 | > | ||||
| << | < | 06 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | - | - | - | - | - |
25年10月6日
25年10月6日
25年9月29日
25年9月29日
20年8月24日
20年8月24日
16年2月14日
16年2月14日
25年7月20日
25年7月20日
25年7月20日
25年7月20日
25年7月20日
25年7月20日
20年8月16日
20年8月16日
20年8月16日
20年8月16日
24年6月17日
24年6月17日
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: