CentOS 8 で PHP 7.2を PHP 7.4 にアップグレードした

まず今のphpのバージョンをチェックしてみる。php 7.2なのでphp 7.4にアップグレードする。

$ sudo  dnf module list php
CentOS Linux 8 - AppStream
Name     Stream         Profiles                       Summary                  
php      7.2 [d][e]     common [d], devel, minimal     PHP scripting language   
php      7.3            common [d], devel, minimal     PHP scripting language   
php      7.4            common [d], devel, minimal     PHP scripting language   

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled

一回 php をリセットしておく。

$ sudo dnf module reset php
================================================================================
 パッケージ        アーキテクチャー バージョン          リポジトリー      サイズ
================================================================================
モジュールの再設定中:
 php                                                                           

トランザクションの概要
================================================================================

これでよろしいですか? [y/N]: y

それからphp 7.4 をインストールする。

$ sudo dnf module install php:7.4
================================================================================
 パッケージ       Arch   バージョン                             Repo      サイズ
================================================================================
アップグレード:
 php              x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 1.5 M
 php-cli          x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 3.1 M
 php-common       x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 696 k
 php-devel        x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 728 k
 php-fpm          x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 1.6 M
 php-gd           x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream  85 k
 php-json         x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream  74 k
 php-mbstring     x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 484 k
 php-mysqlnd      x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 192 k
 php-pdo          x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 123 k
 php-process      x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream  85 k
 php-xml          x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 174 k
 php-xmlrpc       x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream  90 k
依存関係のインストール:
 cmake-filesystem x86_64 3.18.2-9.el8                           appstream  44 k
 libxml2-devel    x86_64 2.9.7-9.el8                            appstream 1.0 M
 oniguruma        x86_64 6.8.2-2.el8                            appstream 187 k
 xz-devel         x86_64 5.2.4-3.el8                            baseos     62 k
弱い依存関係のインストール:
 php-opcache      x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a    appstream 267 k
モジュールプロファイルのインストール中:
 php/common                                                                    
モジュールストリームの有効化中:
 php                     7.4                                                   

トランザクションの概要
================================================================================
インストール     5 パッケージ
アップグレード  13 パッケージ

ダウンロードサイズの合計: 10 M
これでよろしいですか? [y/N]: y

とりあえず、これでphp 7.4にアップグレードできた。

Ubuntu 20.04 LTSでlowlatencyのカーネルを使っていてアップデートしたら無線LANも有線LANも使えなくなった

Ubuntu 20.04 LTSを使っていて、ちょいとカーネルをlowlatencyのものに入れ替えていたのだけど、アップデートがかかるまでは問題なく動いていたのに、アップデートすると無線LANも有線LANも認識しなくなった。仕方がないので、一旦、問題なかった時点で使っていたカーネルでブートしてネットワークに接続できるようにした後に、ハードウェアのモジュールが色々と拡張されているhweをインストールした。以降は問題なく無線LAN、有線LANとも認識して動いている。

$ sudo apt install linux-generic-hwe-20.04

AMD Ryzen 7 PRO 4750UでOpenSSLのAESを試す

AMD Ryzen 7 PRO 4750UでOpenSSLのAESがCPUのaes拡張とソフトウェア実装でどれだけの違いが出るか計測してみた。

$ grep 'model name' /proc/cpuinfo | uniq
model name	: AMD Ryzen 7 PRO 4750U with Radeon Graphics

$ openssl speed  -elapsed    aes-256-cbc 
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256 cbc     134171.06k   141943.45k   145364.39k   283557.21k   286935.72k   285966.34k

$ openssl speed  -elapsed -evp  aes-256-cbc 
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256-cbc     874889.30k  1093771.29k  1121588.39k  1128727.55k  1129944.41k  1130905.60k

参考: OpenSSL speed のチェック: AES-NIとCPUの違い

AMD Ryzen 7 PRO 4750U

ノートパソコンのリチウム・イオン・バッテリーの寿命は伸びるか?

なぜバッテリーは寿命が縮むのか

最近、スマホでも「最適化バッテリー充電」なる機能がついて来ている[Apple][Sony]。リチウム・イオン・バッテリー(以下バッテリー)は、その性質から充電と放電を繰り返すことで劣化(サイクル劣化)を避けられない[docomo]。それの対策は「充電する回数を減らすことでサイクル劣化を避ける」ということになる。自分の日常のノートパソコンの使い方では、ちょっと会議で自席を離れ小一時間ぐらいバッテリーで可動させ、また自席に戻り電源に戻すようなことをしている。これが一日に何度もある。まさにサイクル劣化する時の典型例のような使い方である。

他にも保存劣化というものがある、これはバッテリーが満充電(100%充電)や電池切れ(0%)のままにしておくこと劣化が進む。たとえばiOS13では満充電を避ける機能がついている。これは充電が80%以上進むと100%になるまでの時間を制御するという機能である。これで保存劣化を避けようとする。

さて自分のノートパソコンはUbuntu 20.04 LTSであるのだが、そんな機能は入っておらず、少しでもバッテリーが減るとなるべく速く100%にしようと速攻で充電し、さらにバッテリーがパンパンのまま(満充電のまま)電源を使う。これではサイクル劣化と保存劣化のダブルパンチである。これまでのノートパソコンのバッテリーは2年目に入ると劣化しているのが実感でき、3年目で交換するか、あるいはノートパソコンを買い換えるか悩み始める。もちろん性能が良いノートパソコンに乗り換えるということになるのだが、やはり、最後までバッテリーは当初の性能のままであって欲しい。

充電の条件を決める

ここまでをまとめると「こまめに充電するようなことは避ける」「バッテリーを100%にしない」ということがバッテリーにはよい。私が現在使っているThinkPad T14 Gen 1 (AMD)はカタログ値で最大 約15.9時間可動する。ちなみにメモリは40GB、SSD M.2は1TBである。自分としてはバッテリーで5時間を越えるような使い方はしないのでバッテリーが100%充電でなくでもまったく困ることはない。バッテリーでもブランクスクリーンなし、WiFi、Bluetooth常時オン、アイドリング・サスペンドは1時間という電力消耗最大級だが60%充電状態で4時間使えるという表示になっている。80%も充電すれば十分に目標は達成できるであろう。

問題は充電開始のレベルである。充電開始が30%だと、充電できずに次回のバッテリー利用時間が十分ではない状況が頻繁に出てきて困ってしまう。逆に80%に近いと充電サイクルが短くなってしまいサイクル劣化に寄与してしまう。自分の場合、バッテリー利用時間は2時間以内に集中している。要はちょっとした会議をしているあいだだけ持てば良い。あと今どきの会議室には電源が用意されているので最初から長時間の会議になるのがわかっている時はアダプタ持ち込みである。そこで2時間以内の利用ならば充電しない、ということにする。それで考えると差は20~30%であると良いことになる。これなら2~3回、あるいはそれ以上の会議をすると充電を開始することになる。これで充電回数がこれまでの半分、あるいはそれ以下になるはずである。そこで充電の開始と終了の条件を次のように決めた。

充電開始 50%
充電終了 80%

tlpコマンドを使い設定する

さてtlpコマンドを使いバッテリーの放充電の設定を変更するわけだが、まず、その前に現状の設定を確認する。

$ sudo tlp-stat -b   
--- TLP 1.3.1 --------------------------------------------

+++ Battery Features: Charge Thresholds and Recalibrate
natacpi    = active (data, thresholds)
tpacpi-bat = inactive (kernel module 'acpi_call' not installed)
tp-smapi   = inactive (ThinkPad not supported)

+++ ThinkPad Battery Status: BAT0
/sys/class/power_supply/BAT0/manufacturer                   = LGC
/sys/class/power_supply/BAT0/model_name                     = 5B10W139
/sys/class/power_supply/BAT0/cycle_count                    =      3
/sys/class/power_supply/BAT0/energy_full_design             =  50500 [mWh]
/sys/class/power_supply/BAT0/energy_full                    =  51480 [mWh]
/sys/class/power_supply/BAT0/energy_now                     =  51100 [mWh]
/sys/class/power_supply/BAT0/power_now                      =      0 [mW]
/sys/class/power_supply/BAT0/status                         = Unknown

/sys/class/power_supply/BAT0/charge_start_threshold         =     95 [%]
/sys/class/power_supply/BAT0/charge_stop_threshold          =    100 [%]

Charge                                                      =   99.3 [%]
Capacity                                                    =  101.9 [%]

+++ Recommendations
* Install acpi_call kernel module for ThinkPad battery recalibration

次に充電開始を50%から、充電終了を80%に設定する。

$ sudo tlp setcharge 50 80 BAT0 
Setting temporary charge thresholds for BAT0:
  start =  50
  stop  =  80

設定後の確認をする。

$ sudo tlp-stat -b
--- TLP 1.3.1 --------------------------------------------

+++ Battery Features: Charge Thresholds and Recalibrate
natacpi    = active (data, thresholds)
tpacpi-bat = inactive (kernel module 'acpi_call' not installed)
tp-smapi   = inactive (ThinkPad not supported)

+++ ThinkPad Battery Status: BAT0
/sys/class/power_supply/BAT0/manufacturer                   = LGC
/sys/class/power_supply/BAT0/model_name                     = 5B10W139
/sys/class/power_supply/BAT0/cycle_count                    =      3
/sys/class/power_supply/BAT0/energy_full_design             =  50500 [mWh]
/sys/class/power_supply/BAT0/energy_full                    =  51480 [mWh]
/sys/class/power_supply/BAT0/energy_now                     =  51100 [mWh]
/sys/class/power_supply/BAT0/power_now                      =      0 [mW]
/sys/class/power_supply/BAT0/status                         = Unknown

/sys/class/power_supply/BAT0/charge_start_threshold         =     50 [%]
/sys/class/power_supply/BAT0/charge_stop_threshold          =     80 [%]

Charge                                                      =   99.3 [%]
Capacity                                                    =  101.9 [%]

+++ Recommendations
* Install acpi_call kernel module for ThinkPad battery recalibration

バッテリーの劣化具合の結果が出るのは2年先、3年先になるがとりあえずやってみた。