AlmaLinux8.4 Setup for ARCS6 FRONT PAGE
最終更新日:2022/02/06

コレは何?/What is this?

AlmaLinuxでARCS6を動かすためのセットアップ手順。AlmaLinux8.4Minimal導入手順Ver1。 リアルタイム性を何よりも重視した設定になってます。
注意:本手順は「端末を安全なネットワークに接続すること」を前提にしています。

手順書の読み方

灰色背景

はコマンドを示し,

Italic斜体文字

は設定ファイルの編集内容を示します。 puttyなどでwindows端末から接続し,コマンドか編集内容をCtrl+Cでコピー, puttyの画面上にフォーカスを移して右クリックでペースト,そうするとラクに作業ができます。

1. インストール

AlmaLinux-8.4-x86_64-minimal.iso を下記よりDLして普通にインストール
https://almalinux.org/

2. ネットワーク接続の設定

2.1 NICが認識されてるか確認

ip a

loだけでなく enp**s0 が出現していればNICは認識されている

2.2 ネットワーク設定

nmtui

画面に従って適宜設定
[x] Automatically connect
↑にチェックして,Activateも実行

2.3 外に出れるか確認

ping www.google.co.jp

2.4 Windows端末からputtyを使ってSSHで繋げるか確認

以降,すべてSSH経由でWindows端末から操作する
コマンドは,[Ctrl+C]でコピーして,puttyの画面上で[右クリック]すると簡単

3. SElinuxを切る

怒り狂う方も居るだろうが,

vi /etc/selinux/config
SELINUX=enforcing → SELINUX=disabled

上記に変更。もちろん安全な信頼の置けるネットワーク環境のみでやってネ。我々はリアルタイム性を第一にしている。

4. yumの設定

プロキシ経由の場合のみ下記を実行(長岡技大の例。ただし2022年からプロキシ設定は要らなくなった?ようだ)

vi /etc/yum.conf
proxy=http://proxy.nagaokaut.ac.jp:8080

上記を追記。 今後はyumコマンドがdnfコマンドに移行されたので,読み替えてネ。

5. 時刻合わせ

この手順は舐めて飛ばしてはいけない。gccのコンパイルが不完全になる可能性がある。

5.1 設定ファイルをいじる

vi /etc/chrony.conf
pool 2.cloudlinux.pool.ntp.org iburst ←先頭に#を付けてコメントアウト

代わりに以下を追記(長岡技大の例)

server ntps.nagaokaut.ac.jp iburst

5.2 chrony起動

systemctl start chronyd

5.3 時刻をNTPで合わせて同期状態を確認

chronyc makestep 1 -1
chronyc tracking

5.4 タイムゾーン設定

timedatectl set-timezone Asia/Tokyo

5.3 時刻確認

date

5.4 ハードウェアクロックも合わせる

hwclock -w

下記のエラーがでるときはハードウェアクロックを持っていない計算機(ラズパイなど)なので諦める
hwclock: Cannot access the Hardware Clock via any known method.

6. 不要なデーモン・サービスの停止

6.1 まず,バックグラウンドで動作中のデーモンを見てみる

systemctl list-unit-files -t service

こいつらはリアルタイム性を阻害するので,可能な限り消していくのがここでの目標。

6.2 enabledになっているのを片っ端から可能な限り止めていく

systemctl disable auditd.service
systemctl disable dbus-org.fedoraproject.FirewallD1.service
systemctl disable firewalld.service
systemctl disable import-state.service
systemctl disable kdump.service
systemctl disable loadmodules.service
systemctl disable lvm2-monitor.service
systemctl disable microcode.service
systemctl disable nis-domainname.service
systemctl disable rngd.service
systemctl disable selinux-autorelabel-mark.service
systemctl disable sssd.service
systemctl disable tuned.service

注意:autovt@.serviceは止めないこと。正常起動できなくなる。
(firewalldの行は安全な信頼の置けるネットワーク環境のみでやってネ)

6.3 disabledになったか確認

systemctl list-unit-files -t service

6.4 念のための再起動

shutdown -r now

正常起動すれば問題ない。

7. 不要なカーネルモジュールの停止

7.1 起動しているカーネルモジュールを見てみる

lsmod

ズラズラっと出てくるこいつらも止める

7.2 ブラックリストへの追加

vi /etc/modprobe.d/blacklist.conf

下記を追記

blacklist snd blacklist snd_hda_codec_generic blacklist snd_hda_codec_hdmi blacklist snd_hwdep blacklist snd_hda_intel blacklist snd_hda_codec blacklist snd_hda_codec_realtek blacklist snd_timer blacklist snd_compress blacklist snd_soc_core blacklist snd_pcm blacklist soundwire_intel blacklist snd_compress blacklist snd_hda_core blacklist snd_hda_codec_generic blacklist snd_hda_codec_hdmi blacklist snd_hwdep blacklist soundcore blacklist soundwire_bus blacklist soundwire_intel blacklist soundwire_generic_allocation blacklist soundwire_cadence blacklist snd_intel_dspcfg blacklist snd_timer blacklist ledtrig_audio blacklist acpi_cpufreq blacklist ip_tables blacklist joydev blacklist intel_rapl_msr blacklist intel_rapl_common

7.3 念のための再起動

shutdown -r now

正常起動すれば問題ない

7.4 モジュールのチェック

lsmod

これでだいぶ減ったことを確認

8. Sambaの設定

8.1 sambaをインストール

yum install samba

8.2 共有ディレクトリの作成と権限をガバにする

cd / mkdir expsrc chmod 777 expsrc

(安全な信頼の置けるネットワーク環境のみでやってネ)

8.3 設定ファイルの編集

vi /etc/samba/smb.conf

下記のように編集

workgroup = MCLAB load printers = no

[homes] の部分を全てコメントアウト
[printers] の部分も全てコメントアウト
[print$] の部分も全てコメントアウト

一番最後に以下を追記

[expsrc] comment = ARCS6 Source Code Files browseable = yes writable = yes path = /expsrc valid users = root directory mode = 0777 create mask = 0777

8.4 sambaの起動

systemctl start smb.service
systemctl start nmb.service
systemctl enable smb.service
systemctl enable nmb.service

8.5 sambaパスワードの設定

smbpasswd -a root

所望のパスワード入力

8.6 ここで再起動

shutdown -r now

8.7 動作確認

他のWindows端末から \\ipアドレス で接続でき且つファイルが書き込めるか確認
ダメそうなときは,大抵セキュリティ関係が悪さをしている

9. 画面真っ暗対策とプロンプトの色付け

一定時間経過すると画面が消えてうざい&プロンプトに色を付けたいので,シェルの設定に書き込む。

vi ~/.bashrc

下記を追記

setterm -blank 0 export PS1="\[\e[1;32m\][\u@\h \W]\\$ \[\e[m\]"

10. ARCS6環境構築のための各種インストール

yumコマンドはdnfコマンドに移行されたので読み替えてネ。

10.1 make/gcc/g++のインストール

yum install make
yum install gcc
yum install gcc-c++

10.2 バージョン確認

gcc --version
g++ --version

7.3以上になっていればおk。

10.3 ncurses/pngのインストール

yum install ncurses*
yum install libncurses*
yum install libpng*

10.4 カーネルソースのインストール

yum install kernel-devel-`uname -r`

11. CPUクロック周波数を定格最大で固定

クロック周波数を可変にされるとリアルタイム性に超絶響くことが分かっている。 なので固定する。

11.1 kernelパラメータの設定(Intel系CPUの場合のみ)

vi /etc/default/grub
GRUB_CMDLINE_LINUX=" ~~~ 最後に intel_pstate=disable" を追記

11.2 grub設定更新(Intel系CPUの場合のみ)

grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg

BIOS版もUEFI版も両方やっとく。

11.3 grub設定確認(Intel系CPUの場合のみ)

cat /proc/cmdline

intel_pstate=disable が居ればおk

11.4 再起動&BIOS(UEFI)設定

shutdown -r now

[DEL]キーでBIOS設定起動
CPUのC-state,Performance Boost,Idle Control を全部disableに設定
(上記はマザボによって名前が違うかもしれない)

11.5 cpupowerのインストール

yum install cpupowerutils

11.6 利用可能なモジュールの確認と利用

ls /lib/modules/$(uname -r)/kernel/drivers/cpufreq/

AMDの場合: acpi-cpufreq.ko が表示されるのでそれを使う

modprobe acpi-cpufreq

11.7 CPUクロック設定の実行と確認

cpupower frequency-set -g performance
cat /proc/cpuinfo
watch grep \"cpu MHz\" /proc/cpuinfo

周波数を指定する場合は以下

cpupower frequency-set -f 3000MHz

アレ?この手順やっても周波数変わらない……昔はできたんだけどな…なぜ? (ご存じの方ご教示下さい!)

11.8 自動起動の設定書き込み

上記の設定は再起動されると無に消えてなくなる。 なので起動時に自動で設定されるようにする。

vi /etc/profile.d/cpufreqset.sh
#!/bin/bash modprobe acpi-cpufreq cpupower frequency-set -g performance

12. 割り込み先CPUを1番目のコアに変更

制御ループ内で勝手に割り込みが入るとリアルタイム性を著しく阻害する。 なので,できるだけ割り込みが1番目のCPUのみに行くように指定して,CPU1番コアには犠牲になってもらう。

12.1 割り込み先CPUのチェック

cat /proc/irq/default_smp_affinity
cat /proc/irq/*/smp_affinity

ズラズラっと16進の表示が出てくる。表示の意味は下記の通り

あとは上記のORで如何様にも設定可

12.2 割り込み先CPUを1番のコアに変更

そこでなるべくコア1に割り込み信号を集中させてリアルタイム性の向上を狙う

vi /etc/profile.d/irqdest.sh

下記を追記

#!/bin/bash (echo 1 > /proc/irq/default_smp_affinity) > /dev/null 2>&1 for i in {0..127}; do (echo 1 > /proc/irq/$i/smp_affinity) > /dev/null 2>&1 done for i in {0..127}; do (echo 1 > /proc/irq/$i/smp_affinity) > /dev/null 2>&1 done for i in {0..127}; do (echo 1 > /proc/irq/$i/smp_affinity) > /dev/null 2>&1 done

上記の同じfor文を3回繰り返している意図は,1回だけだとどうもコア割り込み設定が変わらないのもあるようなので
(ただアレだな,インターフェース系の割り込みだけは別コアにした方がよいかもしれない)

12.3 一旦再起動

shutdown -r now

12.4 割り込み先が1番目のコアになってるかチェック

cat /proc/irq/default_smp_affinity
cat /proc/irq/*/smp_affinity

変えられないのもあるが,おおよそ1番目のコアになってれば大丈夫

13. ARCS6を導入

ARCS6の導入方法を参照してARCS6を導入する

14. ARCSの動作チェック

ARCS6のコンパイルと実行を参照してコンパイルして動作できるか確認
01_リアルタイム性の測定 のサンプルコードを用いてリアルタイム性も守れているかチェック

15. 余談

余談1

Completely Fair Scheduler(CFS)を無効にすることでリアルタイム性がさらに上る可能性があるが,ところがLinuxがどうも不安定になるようだ。 放っておくとフリーズすることがある。なのでCFSは残念ながら切らない。

余談2

なぜ素直にリアルタイムなLinuxを使わないのか? → もう疲れたから

完了!