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年先になるがとりあえずやってみた。

loopデバイスのスケジュラってどうなっているのか?

loopデバイスのスケジュラってどうなっているのかチェックしてみた。 Ubuntu 20.04 LTS の Linuxカーネル 5.4.0 ではこうなっていた。備忘録として。

Ubuntu 20.04.1 LTS (Focal Fossa)

$ for i in  /sys/block/*/queue/scheduler; do  echo -n $i ' ' ; cat  $i; done
/sys/block/loop0/queue/scheduler  [mq-deadline] none
/sys/block/loop1/queue/scheduler  [mq-deadline] none
/sys/block/loop2/queue/scheduler  [mq-deadline] none
/sys/block/loop3/queue/scheduler  [mq-deadline] none
/sys/block/loop4/queue/scheduler  [mq-deadline] none
/sys/block/loop5/queue/scheduler  [mq-deadline] none
/sys/block/loop6/queue/scheduler  [mq-deadline] none
/sys/block/loop7/queue/scheduler  [mq-deadline] none
/sys/block/loop8/queue/scheduler  [mq-deadline] none
/sys/block/loop9/queue/scheduler  [mq-deadline] none
/sys/block/nvme0n1/queue/scheduler  [none] mq-deadline 

$ cat /proc/version
Linux version 5.4.0-54-generic (buildd@lcy01-amd64-024) (gcc version 
9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #60-Ubuntu SMP Fri Nov 6 10:37:59
 UTC 2020