CPUのマルチコアやマルチスレッドはGUIならデフォ仕様

# top でこのブログサーバーの一瞬の動きを見てみると

top - 18:49:32 up 12:19,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 120 total,   2 running, 118 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1918224 total,   180528 free,   763520 used,   974176 buff/cache
KiB Swap:  2097148 total,  2018320 free,    78828 used.   978824 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1422 mysql     20   0 1104484  95844   3696 S   0.7  5.0   1:30.00 mysqld
 5388 root      20   0  130032   1736   1172 R   0.7  0.1   0:00.08 top
  379 root      20   0       0      0      0 S   0.3  0.0   0:26.84 xfsaild/dm+
 5335 root      20   0       0      0      0 S   0.3  0.0   0:00.24 kworker/0:2
    1 root      20   0   56332   2452   1276 S   0.0  0.1   0:05.90 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.89 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
    7 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/0
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/0
   10 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/1
   11 root      20   0       0      0      0 S   0.0  0.0   0:17.52 rcu_sched
   12 root      20   0       0      0      0 R   0.0  0.0   0:13.39 rcuos/0
   13 root      20   0       0      0      0 S   0.0  0.0   0:09.46 rcuos/1
   14 root      rt   0       0      0      0 S   0.0  0.0   0:00.78 watchdog/0
   15 root      rt   0       0      0      0 S   0.0  0.0   0:00.75 watchdog/1
   16 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/1
   17 root      20   0       0      0      0 S   0.0  0.0   0:00.22 ksoftirqd/1
   19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:+
   20 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 khelper
   21 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs
   22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns
   23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback
   24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd
   25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
   26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd
   27 root      20   0       0      0      0 S   0.0  0.0   0:00.01 khubd
   28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md
   31 root      20   0       0      0      0 S   0.0  0.0   0:00.02 khungtaskd
   32 root      20   0       0      0      0 S   0.0  0.0   0:03.83 kswapd0
   33 root      25   5       0      0      0 S   0.0  0.0   0:00.00 ksmd
   34 root      39  19       0      0      0 S   0.0  0.0   0:02.15 khugepaged
   35 root      20   0       0      0      0 S   0.0  0.0   0:00.00 fsnotify_m+
   36 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 crypto
   45 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kthrotld
   46 root      20   0       0      0      0 S   0.0  0.0   0:00.11 kworker/u4+
   47 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kmpath_rda+
   49 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kpsmoused
   69 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 deferwq
  115 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kauditd
  257 root      20   0       0      0      0 S   0.0  0.0   0:00.57 kworker/u4+
  258 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 ata_sff
  259 root      20   0       0      0      0 S   0.0  0.0   0:00.00 scsi_eh_0
  260 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 scsi_tmf_0
  261 root      20   0       0      0      0 S   0.0  0.0   0:00.00 scsi_eh_1
  262 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 scsi_tmf_1
  345 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kdmflush
  346 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
  353 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kdmflush
  354 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset
  372 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 xfsalloc
  373 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 xfs_mru_ca+
※120個のプロセスが常駐し、同時に動いているのはたった2個だけ。

これはKVMホストからCPUを2個割り振っているため最大で2個になっているのだ。※J1900は2コア4スレッド構成。
本来は120個もCPUが必要なのか?と云えば、別に急がなくてもよい処理が多く、短い間隔で120分の2の比率で順に動作するだけで間に合っているのだ。
それでも、WEBのapacheやデータベースのmysqld の様に忙しいモノも混ざっているので、4~8個ぐらいCPUがあった方が応答性能があがるだろう。
スマフォやタブレットで使われてるAndroidもベースはLinuxなので、いつも1個のプロセスしか常駐していない訳では無いだろう。
本当に単純なことをさせるなら、
例えばスピーカーから50Hzの音を出すなら

10ms待ってからスピーカーの端子の電圧を0にする

10ms待ってからスピーカーの端子の電圧を1にする

フリダシに戻る

とか

フラグを0にする

インターバルタイマーを10msにセットする

フラグの内容をスピーカーの端子に送信

フラグの内容を反転する

など非常に簡単なプログラミングでできるが、いくつもの音源をミキシングするとなると、この手のプログラミングでは全く歯が立たない。
各音源のある程度の長さの出力結果を作成し、それをまとめ、インターバルタイマーで順次送信すればいいのだが、
各音源のある程度の長さの出力結果を作成する時間が希望する時間が インターバルタイマーの設定時間 を越えてしまうこともしばしば起きるだろう。そうなると、音切れが発生してしまう。
しかし、仕様書に

  • 各音源のある程度の長さの出力結果を作成する時間がインターバルタイマーの設定時間を越えそうなら、中断すること

と書いても、音源データ作成中にマメに残り時間をチェックしていたら、

残り時間を気にしている時間 >> 音源データ作成

になりかねないので、処理中断用のトリガ(割り込み)機能がCPUに必要になるだろう。
これ以外にもあれこれ音源プログラムを使うなら、予約したメモリをオーバーランして他の音源のデータを上書きしないような警報機とかも必要になるだろう。
な訳で、同様にGUIでリアルタイムに多少複雑なこと(時計を表示しながら電波強度も表示するなど)をしようとすると、タスク・スケジューリングは避けられないし、タスクを安全に使うには、割り込み機能や警報機能なども必須なものになっていく。
そうなると例え最大効率が80%でも4~8個分のCPUがあった方が高い負荷がかかったときに踏ん張りが効いてくると云うものだ。
数日ごとにアップデートを乱発するようなAndroidのアプリが多い。Wifiでアプリのアップデートをダウンロードしながら、ゲームができるくらいの性能がないと、ゲーム中にアプリのアップデートを検知しダウンロードが始まりハングアップしてしまっては、いつもゲームシステムに「回線切り逃げ」と判定されKO負けしてしまう。これを回避するには、それなりの余剰性能が必要になってしまう。
ただ、CPUの余剰性能だけでなく、RAMもそれなりに必要になるので、時々手持ちのスマフォやタブレットがハングアップになってしまう様なら、もっと高い性能のものに買い替えるしかないだろう。
ボクの場合、メモリ512MBの中華タブレットを持っていたが、これが毎日起動から30分ぐらいはAC電源接続のまま暖機運転(アプリのアップデートの確認)が必要だった。これを怠ると、タブレットの設定画面を呼び出すだけでアプリのアップデートと競合が起き確実にハングアップ。回復にはリセットするしかなので、諦めてNEXUS7に乗り換えた。
つまり、ただ持ち歩くだけで満足するならモリ512MBの中華タブレットでも十分、ハングアップも気を付けて扱えばよいならマルチコアなど不要だ。
しかし、度々のハングアップで愛想が尽きたなら買い替えていいだろう。




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA