最終更新日: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進の表示が出てくる。表示の意味は下記の通り
- f = 0b1111 = 全部のCPUに割り込み信号が行くという意味
- 1 = 0b0001 = コア1のみに割り込み信号が行くという意味
- 2 = 0b0010 = コア2のみに割り込み信号が行くという意味
- 4 = 0b0100 = コア3のみに割り込み信号が行くという意味
- 8 = 0b1000 = コア4のみに割り込み信号が行くという意味
あとは上記の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を使わないのか? → もう疲れたから
完了!
SWL - The Side Warehouse Laboratory, 横倉研究室 - 技術倉庫
Copyright(C), The Side Warehouse Laboratory, All rights reserved.