IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ レノボ・シンガポール・プライベート・リミテッドの特許一覧

<>
  • 特開-電子機器、及び制御方法 図1
  • 特開-電子機器、及び制御方法 図2
  • 特開-電子機器、及び制御方法 図3
  • 特開-電子機器、及び制御方法 図4
  • 特開-電子機器、及び制御方法 図5
  • 特開-電子機器、及び制御方法 図6
  • 特開-電子機器、及び制御方法 図7
  • 特開-電子機器、及び制御方法 図8
  • 特開-電子機器、及び制御方法 図9
  • 特開-電子機器、及び制御方法 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022062333
(43)【公開日】2022-04-20
(54)【発明の名称】電子機器、及び制御方法
(51)【国際特許分類】
   G06F 11/07 20060101AFI20220413BHJP
【FI】
G06F11/07 196
G06F11/07 140E
【審査請求】有
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2020170267
(22)【出願日】2020-10-08
(11)【特許番号】
(45)【特許公報発行日】2022-01-20
(71)【出願人】
【識別番号】505205731
【氏名又は名称】レノボ・シンガポール・プライベート・リミテッド
(74)【代理人】
【識別番号】100161207
【弁理士】
【氏名又は名称】西澤 和純
(74)【代理人】
【識別番号】100169764
【弁理士】
【氏名又は名称】清水 雄一郎
(74)【代理人】
【識別番号】100175824
【弁理士】
【氏名又は名称】小林 淳一
(74)【代理人】
【識別番号】100206081
【弁理士】
【氏名又は名称】片岡 央
(72)【発明者】
【氏名】隅 博行
(72)【発明者】
【氏名】牧 耕太郎
(72)【発明者】
【氏名】吉山 典利
(72)【発明者】
【氏名】柴谷 淳治
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042GA23
5B042JJ29
5B042KK04
5B042MA08
5B042MC22
(57)【要約】
【課題】問題の発生を抑制しつつプロセッサに負荷をかけているプログラムのCPU使用率を低下させること。
【解決手段】電子機器は、プログラムに基づいて処理を実行するプロセッサと、処理における異常を検出するとともに、異常の要因となる問題のあるスレッドを検出する異常検出部と、異常検出部により検出された問題のあるスレッドに対して停止と実行を繰り返す間欠動作を行わせる処理制御部と、を備える。
【選択図】図3
【特許請求の範囲】
【請求項1】
プログラムに基づいて処理を実行するプロセッサと、
前記処理における異常を検出するとともに、前記異常の要因となる問題のあるスレッドを検出する異常検出部と、
前記異常検出部により検出された問題のあるスレッドに対して停止と実行を繰り返す間欠動作を行わせる処理制御部と、
を備える電子機器。
【請求項2】
前記処理におけるスレッドごとの前記プロセッサの使用率を示す情報を取得する取得部をさらに備え、
前記異常検出部は、
前記取得部が取得した前記スレッドごとの前記プロセッサの使用率に基づいて、前記異常及び前記問題のあるスレッドを検出する、
請求項1に記載の電子機器。
【請求項3】
前記停止させる期間が前記実行させる期間より長い、
請求項1または請求項2に記載の電子機器。
【請求項4】
前記停止させる期間及び前記実行させる期間が予め設定されている、
請求項1から請求項3のいずれか一項に記載の電子機器。
【請求項5】
前記取得部は、
前記スレッドごとの前記プロセッサの使用率が含まれるシステムの状態に関する状態情報を取得し、
前記処理制御部は、
前記停止させる期間及び前記実行させる期間を前記状態情報に基づいて決定する、
請求項2に記載の電子機器。
【請求項6】
前記処理制御部は、
前記停止させる期間及び前記実行させる期間を、前記間欠動作を行わせるスレッドの前記プロセッサの使用率に応じて決定する、
請求項5に記載の電子機器。
【請求項7】
前記異常検出部は、
前記スレッドごとの前記プロセッサの使用率と異常の有無に関する情報とに基づいて機械学習された学習済みモデルを用いて、前記異常及び前記問題のあるスレッドを検出する、
請求項1から請求項6のいずれか一項に記載の電子機器。
【請求項8】
前記異常検出部は、
前記プロセッサを使用しているスレッドの合計数に対する特定の前記プロセッサの使用率であるスレッドの数の割合に基づいて機械学習された学習済みモデルを用いて、前記異常及び前記問題のあるスレッドを検出する、
請求項7に記載の電子機器。
【請求項9】
プログラムに基づいて処理を実行するプロセッサを備える電子機器における制御方法であって、
異常検出部が、前記処理における異常を検出するとともに、前記異常の要因となる問題のあるスレッドを検出するステップと、
処理制御部が、前記異常検出部により検出された問題のあるスレッドに対して停止と実行を繰り返す間欠動作を行わせるステップと、
を有する制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子機器、及び制御方法に関する。
【背景技術】
【0002】
CPU(Central Processing Unit)などのプロセッサを搭載して処理を実行する電子機器では、実行中の処理が原因となってパフォーマンスの低下などの問題が発生することがある(例えば、特許文献1参照)。例えば、CPUに負荷をかけているプログラムのCPU使用率を下げるため、そのプログラムを停止できるようにしているものがある。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2015-184909号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、CPUなどのプロセッサに負荷をかけているプログラム全体を停止すると、デッドロック、タイムアウトエラー、UI(User Interface)のフリーズなどの問題が生じる可能性があった。
【0005】
本発明は、上記した事情に鑑みてなされたもので、問題の発生を抑制しつつプロセッサに負荷をかけているプログラムのプロセッサ使用率を低下させる電子機器、及び制御方法を提供することを目的の一つとする。
【課題を解決するための手段】
【0006】
本発明は上記の課題を解決するためになされたものであり、本発明の第1態様に係る電子機器は、プログラムに基づいて処理を実行するプロセッサと、前記処理における異常を検出するとともに、前記異常の要因となる問題のあるスレッドを検出する異常検出部と、前記異常検出部により検出された問題のあるスレッドに対して停止と実行を繰り返す間欠動作を行わせる処理制御部と、を備える。
【0007】
上記電子機器において、前記処理におけるスレッドごとの前記プロセッサの使用率を示す情報を取得する取得部をさらに備え、前記異常検出部は、前記取得部が取得した前記スレッドごとの前記プロセッサの使用率に基づいて、前記異常及び前記問題のあるスレッドを検出してもよい。
【0008】
上記電子機器において、前記停止させる期間が前記実行させる期間より長くてもよい。
【0009】
上記電子機器において、前記停止させる期間及び前記実行させる期間が予め設定されてもよい。
【0010】
上記電子機器において、前記取得部は、前記スレッドごとの前記プロセッサの使用率が含まれるシステムの状態に関する状態情報を取得し、前記処理制御部は、前記停止させる期間及び前記実行させる期間を前記状態情報に基づいて決定してもよい。
【0011】
上記電子機器において、前記処理制御部は、前記停止させる期間及び前記実行させる期間を、前記間欠動作を行わせるスレッドの前記プロセッサの使用率に応じて決定してもよい。
【0012】
上記電子機器において、前記異常検出部は、前記スレッドごとの前記プロセッサの使用率と異常の有無に関する情報とに基づいて機械学習された学習済みモデルを用いて、前記異常及び前記問題のあるスレッドを検出してもよい。
【0013】
上記電子機器において、前記異常検出部は、前記プロセッサを使用しているスレッドの合計数に対する特定の前記プロセッサの使用率であるスレッドの数の割合に基づいて機械学習された学習済みモデルを用いて、前記異常及び前記問題のあるスレッドを検出してもよい。
【0014】
また、本発明の第2態様に係る、プログラムに基づいて処理を実行するプロセッサを備える電子機器における制御方法は、異常検出部が、前記処理における異常を検出するとともに、前記異常の要因となる問題のあるスレッドを検出するステップと、処理制御部が、前記異常検出部により検出された問題のあるスレッドに対して停止と実行を繰り返す間欠動作を行わせるステップと、を有する。
【発明の効果】
【0015】
本発明の上記態様によれば、問題の発生を抑制しつつプロセッサに負荷をかけているプログラムのプロセッサ使用率を低下させることができる。
【図面の簡単な説明】
【0016】
図1】実施形態に係る電子機器の一例を示す外観図。
図2】間欠動作によるCPU使用率の変化の測定結果の一例を示す図。
図3】実施形態に係る電子機器で実行されているプログラム(プロセス)の模式図。
図4】実施形態に係る異常検出処理の概要を説明する図。
図5】実施形態に係る電子機器のハードウェアの構成例を示すブロック図。
図6】実施形態に係る電子機器の機能構成の一例を示すブロック図。
図7】実施形態に係る異常検出制御処理の一例を示すフローチャート。
図8】実施形態に係るシステムの状態情報の取得タイミング例を説明する図。
図9】スレッドごとのCPU使用率の実験結果の一例を示す図。
図10】実施形態に係る異常検出モデルで用いるデータセットを説明する図。
【発明を実施するための形態】
【0017】
以下、図面を参照しながら本発明の実施形態について詳しく説明する。
【0018】
[電子機器の概要]
まず、本実施形態に係る電子機器の概要を説明する。
図1は、本実施形態に係る電子機器の一例を示す外観図である。図示する電子機器10は、ラップトップ型(ノート型)のパーソナルコンピュータであるが、デスクトップ型やタブレット型などのパーソナルコンピュータであってもよい。電子機器10は、機械学習を用いてシステムのスローダウン(パフォーマンスの低下)などの異常を検出し、異常を引き起こしているプログラムの中で問題のあるスレッドを検出する。例えば、電子機器10は、異常を検出した場合、異常の通知と対応の選択肢などをユーザに示すための表示を行う。異常の通知には、異常検出時にCPU(Central Processing Unit)使用率が最も高かったスレッドのCPU使用率の情報(図示では、99%)、予期しないCPU使用率が検出されたこと(すなわち、異常が検出されたこと)を示す情報等が含まれる。また、異常の通知には、上記のCPU使用率が高いスレッドのプログラムの情報などが含まれてもよい。また、電子機器10は、対応の選択肢として、ユーザが選択可能な操作アイコン(「IGNORE」、「SUSPEND」、及び「CLOSE」)を表示する。「IGNORE」が選択された場合、電子機器10は、現在の処理状態を継続する。「SUSPEND」が選択された場合、電子機器10は、異常を引き起こしているプログラム(プロセス)を一時的に停止させる。「CLOSE」が選択された場合、電子機器10は、異常を引き起こしているプログラムを終了する。
【0019】
ここで、「SUSPEND」が選択された場合に、仮に異常を引き起こしているプログラム(プロセス)全体を停止させてしまうと、デッドロック、タイムアウトエラー、UI(User Interface)のフリーズなどの問題が生じる。停止させる期間が一時的(例えば、15分程度)であってもこれらの問題が生じる可能性があり、また、停止させる期間を短くしていくと異常が解決される見込みが減る。
【0020】
そこで、電子機器10は、「SUSPEND」が選択された場合に、異常を引き起こしているプログラム(プロセス)全体を完全に停止させるのではなく、異常を引き起こしているプログラムの中で問題のあるスレッドのみに対して停止と実行を繰り返す間欠動作をさせる。これにより、電子機器10は、問題のあるスレッドのプログラムをゆっくり走らせる。なお、本実施形態では、プログラム(プロセス)全体を完全に停止させるわけではないので、「SUSPEND」の操作アイコンは、他の表示(例えば「RUN SLOWLY」等)がされてもよい。
【0021】
図2は、間欠動作によるCPU使用率の変化を測定した測定結果の一例を示す図である。なお、測定には、「Windows10 version 1809(Windows:登録商標)」を搭載した「Lenovo製 ThinkPad Helix2」を使用した。図2(A)は、間欠動作をしていない時(すなわち、異常時)のCPU使用率の測定結果である。CPU使用率の平均値は、98.989%である。図2(B)は、1秒停止と2秒実行を繰り返す間欠動作時のCPU使用率の測定結果である。CPU使用率の平均値は、64.479%である。図2(C)は、1秒停止と1秒実行を繰り返す間欠動作時のCPU使用率の測定結果である。CPU使用率の平均値は、64.479%である。図2(D)は、5秒停止と1秒実行を繰り返す間欠動作時のCPU使用率の測定結果である。CPU使用率の平均値は、16.615%である。図2(E)は、10秒停止と1秒実行を繰り返す間欠動作時のCPU使用率の測定結果である。CPU使用率の平均値は、8.330%である。図2(F)は、15秒停止と1秒実行を繰り返す間欠動作時のCPU使用率の測定結果である。CPU使用率の平均値は、6.120%である。図2(G)は、20秒停止と1秒実行を繰り返す間欠動作時のCPU使用率の測定結果である。CPU使用率の平均値は、4.066%である。
【0022】
上記測定結果から、間欠動作において停止させる期間が実行させる期間より長くなると(図2(D)~(G))、CPU使用率の低下が顕著になることがわかる。つまり、
停止させる期間が実行させる期間より長くなるように間欠動作させる方が、より効果的にCPU使用率を低下させることができる。また、停止させる期間を実行させる期間より長くしていくと、図2(E)に示す10秒停止と1秒実行を繰り返す間欠動作までは、急激にCPU使用率が低下しているが、それ以降は図2(F)、(G)に示すように、停止させる期間を長くしても、CPU使用率の低下の度合いは鈍化する。よって、この測定結果からすると、CPU使用率の低下と処理速度との両方を考慮し、10秒停止と1秒実行を繰り返す間欠動作が好適な例の一つといえる。そこで、例えば電子機器10は、問題のあるスレッドに対して10秒停止(Suspend)と1秒実行(Run)を繰り返す間欠動作を行わせる。この間欠動作によってCPU使用率を約10分の1にすることが可能となる。
【0023】
なお、間欠動作における停止期間と実行期間は、上述の10秒停止と1秒実行に限定されるものではなく、任意に設定することができる。また、異常時のシステムの状態によっては、停止させる期間が実行させる期間より短くなるような間欠動作としてものよい。また、間欠動作における停止期間と実行期間は、問題のあるスレッドのCPU使用率(異常時)に応じて設定されてもよい。また、間欠動作における停止期間と実行期間は、プログラムの種類や電子機器10の動作環境(ハードウェア構成)などに応じて設定されてもよい。
【0024】
このように、電子機器10は、異常が検出されたときに、プログラム全体を停止させるのではなく、問題のあるスレッドのみを間欠駆動させるため、デッドロック、タイムアウトエラー、UIのフリーズなど発生を抑制することができる。図3を参照して説明する。
【0025】
図3は、電子機器10で実行されているプログラム(プロセス)を模式的に表した図である。図示する例では、プロセス1とプロセス2が実行中であり、プロセス1が異常と検出されている。プロセス1には、スレッド1、スレッド2、スレッド3、及びUIスレッドの4つのスレッドが含まれている。4つのスレッドの中でスレッド3が問題のあるスレッドとして検出されている。リソースAは、スレッド1からもスレッド3からも使用されるリソースである。ここでは、問題のあるスレッド3にリソースAが割り当てられており、スレッド3がリソースAを使用している状態である。一方、スレッド1は、リソースAが空くのを待っている状態である。仮に、問題のあるスレッド3を停止させてしまうと、リソースAが空かない状態が続くため、デッドロックやタイムアウトが発生することになる。しかし、電子機器10は、問題のあるスレッド3を停止させるのではなく間欠動作でプログラムをゆっくり走らせるため、いずれリソースAが解放されてスレッド1へ割り当てられる。よって、スレッド間でのデッドロックやタイムアウトエラーの発生を抑制することができる。
【0026】
また、リソースBは、プロセス1のスレッド2からもプロセス2のスレッド4からも使用されるリソースである。ここでは、スレッド2にリソースBが割り当てられており、スレッド2がリソースBを使用している状態である。一方、スレッド4は、リソースBが空くのを待っている状態である。電子機器10は、問題のあるスレッド3を間欠動作させるが他のスレッドに対しては通常の処理を行わせるため、スレッド3の処理が終わればリソースBが解放されてスレッド4へ割り当てられる。よって、プロセス間でのデッドロックやタイムアウトエラーの発生を抑制することができる。また、電子機器10は、プロセス1のUIスレッドも通常の処理を行わせるため、UIのフリーズも発生しない。
【0027】
[異常検出処理の概要]
次に、電子機器10が自身の異常を検出する異常検出処理の概要を説明する。
図4は、本実施形態に係る異常検出処理の概要を説明する図である。電子機器10は、自身のパフォーマンスの低下などの異常(問題)を検出し、更にその原因を検出する。
【0028】
電子機器10は、自身のシステムの状態に関する状態情報(Rawデータ)を収集し、収集したシステムの状態情報に基づいて、自身の異常を検出する。以下では特に明示しない限り、システムとは、電子機器10が備えるハードウェアやシステムファームウェアなどを用いたシステムのことを指す。システムの状態情報には、例えば、CPUに関する情報(CPU使用率、CPUの温度など)、GPU(Graphic Processing Unit)に関する情報(GPU使用率など)、システムの動作状態に基づく情報(BSOD:Blue Screen of Death、ハングアップなど)、バッテリに関する情報(放電カーブ、満充電、残量少、充電開始時間、放電開始時間など)、ファンの回転速度の情報などが含まれる。電子機器10の異常検出部112は、システムの状態情報の中から異常値を検出し、電子機器10の異常を検出する。電子機器10の異常とは、例えば、「バッテリ寿命が短い」、「パフォーマンス低下(システムスローダウン)」、「頻繁なシステムハングアップ」などのように電子機器10で問題や故障などが生じている状況や状態が含まれる。
【0029】
ここで、異常検出部112は、例えばAI(Artificial Intelligence)エンジンを備えている。異常検出部112は、システムの状態情報に基づくデータセットを用いて機械学習された学習済みモデル(以下、「異常検出モデル」と称する)を用いて異常を検出するローカルAIとして機能する。
【0030】
つまり、電子機器10は、異常を検出するためのシステムの状態情報を収集し、収集した情報に基づいて、異常を検出するためのAI(異常検出部112)を用いて自己診断を行い、異常を検出する。例えば、電子機器10は、システムのスローダウン(パフォーマンスの低下)などの異常を検出し、異常を引き起こしているプログラムの中で問題のあるスレッドを検出する。
【0031】
[電子機器のハードウェア構成]
次に、電子機器10の構成について詳しく説明する。
図5は、本実施形態に係る電子機器10のハードウェアの構成例を示す概略ブロック図である。電子機器10は、通信部11、表示部12、スピーカ13、入力部14、電源部15、温度センサ17、ファン16、EC(Embedded Controller)18、記憶部19、及びシステム処理部100を含んで構成される。システム処理部100は、CPU101、GPU102、メモリコントローラ103、I/O(Input-Output)コントローラ104、及びシステムメモリ105を含んで構成され、オペレーティングシステム(OS:Operating System)によるシステム処理によって、OS上で各種アプリケーションのプログラムの処理が実行可能である。CPU101とGPU102をプロセッサと総称することがある。
【0032】
通信部11は、無線または有線による通信ネットワークを介して他の機器と通信可能に接続し、各種のデータの送信および受信を行う。例えば、通信部11は、イーサネット(登録商標)等の有線LANインターフェースやWi-Fi(登録商標)等の無線LANインターフェース等を含んで構成されている。なお、通信部11は、USB(Universal Serial Bus)インターフェースやBluetooth(登録商標)インターフェースを含んで構成されてもよい。
【0033】
表示部12は、映像、画像、テキスト等を表示するディスプレイであり、例えば、液晶ディスプレイパネル、有機ELディスプレイパネルなどを含んで構成される。スピーカ13は、電子音や音声などを出力する。
【0034】
入力部14は、ユーザの入力を受け付ける入力部であり、例えばキーボードやタッチパッドなどの入力デバイスを含んで構成されている。入力部14は、キーボード、タッチパッドなどに対する操作を受け付けることに応じて、操作に応じた操作信号をEC18へ出力する。なお、入力部14は、表示部12の表示画面に対する操作を受け付けるタッチパネルを含んで構成されてもよい。
【0035】
電源部15は、電子機器10の各部の動作状態に応じて各部へ電源系統を介して電力を供給する。電源部15は、DC(Direct Current)/DCコンバータを備える。DC/DCコンバータは、AC(Alternate Current)/DCアダプタ又はバッテリ151から供給される直流電力の電圧を、各部で要求される電圧に変換する。DC/DCコンバータで電圧が変換された電力が各電源系統を介して各部へ供給される。例えば、電源部15は、EC18から入力される各部の動作状態に応じて制御信号に基づいて各電源系統を介して各部に電力を供給する。
【0036】
温度センサ17は、電子機器10の筐体内部に一又は複数設けられ、環境温度を検出する。例えば、温度センサ17は、CPU101の近傍やバッテリ151の近傍など温度が上昇しやすい箇所に設けられている。
ファン16は、電子機器10の内部の上昇した温度を低下させるための冷却用として設けられている。
【0037】
EC18は、CPU101の処理に関わらず、各種デバイス(周辺装置やセンサ等)の監視及び制御を行うマイクロコンピュータが組み込まれた組み込みコントローラであり、バッテリの管理、電源管理、キーボードコントローラなどの機能を有する。例えば、EC18は、入力部14と、電源部15と、ファン16と、温度センサ17とに接続されている。EC18は、入力部14から操作信号を取得する。また、EC18は、不図示の電源ボタンに対する操作に応じて起動信号を生成する。また、EC18は、各部への給電のON/OFFの指示を電源部15に対して行うとともに、バッテリに関する情報(放電カーブ、満充電、残量少、充電開始時間、放電開始時間など)を電源部15から取得する。また、EC18は、温度センサ17の検出結果を取得し、検出結果(温度)に応じて、ファン16のON/OFF、およびON時の回転速度などを制御する。EC18とCPU101とは通信を行うことにより、各種情報や各動作状態などを共有する。
【0038】
記憶部19は、SSD(Solid State Drive)、HDD(Hard Disk Drive)、ROM(Read Only Memory)、RAM(Random access memory)などの記憶媒体を含んで構成される。記憶部19には、BIOS、OS、デバイスドライバ、アプリケーションなどの各種のプログラムや、その他、プログラムの処理に必要なデータ、プログラムの処理により取得した各種のデータなどが記憶される。
【0039】
CPU101は、BIOSやOSによるシステム処理により動作状態を制御する。システムの動作状態として少なくとも通常動作状態(パワーオン状態)と待機状態(アイドル状態)との間を遷移可能である。待機状態には、スタンバイ状態、スリープ状態、ハイバネーション状態およびパワーオフ状態などが含まれる。
【0040】
スタンバイ状態は、プロセッサの処理能力を通常動作状態よりも低くし、動作中のシステムメモリ105の内容を保持しながら通信部11、表示部12、スピーカ13、及び記憶部19など周辺デバイスの消費電力を通常動作状態よりも少なくする動作状態である。
スリープ状態は、システムメモリ105とEC18とその配下にあるデバイス以外のデバイスへの給電を停止し、プロセッサによるプログラムの実行を伴わない動作モードである。
ハイバネーション状態は、スリープ状態においてプロセッサから即座にアクセス可能とする補助記憶装置にシステムメモリ105に記憶していた情報を全て退避させ、その後、システムメモリ105への給電をさらに停止するモードである。従って、ハイバネーション状態から起動処理を開始する際、CPU101は、補助記憶装置に退避された情報をシステムメモリ105に記憶する。
パワーオフ状態は、EC18とその配下にあるデバイス以外のデバイスへの給電を停止した状態である。
【0041】
例えば、CPU101は、動作状態が待機状態であって、EC18から起動信号が入力された場合、待機状態から通常動作状態に遷移させる。例えば、動作状態がスリープ状態、ハイバネーション状態またはパワーオフ状態であるとき、電源部15から電力の供給を受け、かつEC18から起動信号が入力されると、CPU101は、起動処理を開始する。CPU101は、起動処理において、システムメモリ105、記憶部19などの最小限のデバイスの検出と初期化を行う(プリブート)。CPU101は、記憶部19からBIOSをシステムメモリ105にロードし、通信部11、表示部12などその他のデバイスの検出と初期化を行う(ポスト処理)。初期化には、初期パラメータの設定などの処理が含まれる。なお、スリープ状態から通常動作状態への遷移(レジューム)においては、ポスト処理の一部が省略されることがある。CPU101は、起動処理が完了した後、OSによるシステム処理の実行を開始する(起動)。
【0042】
また、CPU101は、OSが起動した後、インストールされているアプリケーションのプログラムを実行することにより、当該アプリケーションの機能を実現する。例えば、図1から図4を参照して説明した異常検出処理及び異常検出時の制御処理は、アプリケーションとして提供され、アプリケーションのプログラムを実行することにより、その機能を実現する。以下では、異常検出処理及び異常検出時の間欠動作制御処理を合わせて、「異常検出制御処理」と称する。
【0043】
GPU102は、CPU101の制御に基づいて画像処理を実行して表示データを生成する。GPU102は、生成した表示データを表示部12に出力する。なお、CPU101とGPU102は、一体化して1個のコアとして形成されてもよいし、個々のコアとして形成されたCPU101とGPU102の相互間で負荷が分担されてもよい。プロセッサの数は、1個に限られず、複数個であってもよい。
【0044】
メモリコントローラ103は、CPU101とGPU102によるシステムメモリ105、記憶部19などからのデータの読出し、書込みを制御する。
I/Oコントローラ104は、通信部11、表示部12、スピーカ13、及びEC18とのデータの入力または出力を制御する。
システムメモリ105は、CPU101が実行するプログラムの読み込み領域ならびに処理データを書き込む作業領域として用いられる。
【0045】
[電子機器の機能構成]
次に、電子機器10における異常検出制御処理に関する機能構成について説明する。
図6は、本実施形態に係る電子機器10の機能構成の一例を示すブロック図である。制御部110は、CPU101が異常検出制御処理に関する1又は複数のアプリケーションのプログラムを実行することにより実現する機能構成を示している。制御部110は、取得部111と、異常検出部112と、処理制御部113とを備えている。また、異常検出制御処理に用いるデータを記憶する構成として、記憶部19は、システム情報記憶部191と、異常情報記憶部192と、異常検出モデル記憶部193とを備えている。
【0046】
取得部111は、電子機器10のシステムの状態に関する状態情報を取得する。例えば、取得部111は、予め設定されたタイミングで、システムの状態情報を取得し、取得した情報を取得したタイミングを示す情報と関連付けて、システム情報記憶部191に記憶させる。前述したように、システムの状態情報には、プロセッサ(CPU101又はGPU102など)の使用率を示す情報、システムの動作状態に基づく情報、バッテリに関する情報、ファンの回転速度の情報などが含まれる。一例として、取得部111は、システムの状態情報として、実行中のプログラム(プロセス)に含まれるスレッドごとのCPU使用率を示す情報を取得する。
【0047】
異常検出部112は、取得部111が取得したシステムの状態情報に基づいて異常を検出する。例えば、異常検出部112は、異常を検出するための学習済みモデルである異常検出モデルを用いて、取得部111が取得したシステムの状態情報に対応する異常を検出する。この異常検出モデルは、以前に電子機器10または他の電子機器で取得されたシステムの状態情報と、そのシステムの状態情報に対応する異常の有無に関する情報とに基づいて機械学習された学習済みモデルである。例えば、機械学習としてOne Class SVM(Support Vector Machine)が用いられ、正常なシステムの状態情報を学習データとして機械学習させることで異常値との識別境界を決定し、当該識別境界を基準として異常の検出を行う。電子機器10は、この異常検出モデルを事前に外部のサーバ装置や記憶媒体を介して取得し、異常検出モデル記憶部193に記憶している。
【0048】
一例として、異常検出部112は、取得部111が取得したスレッドごとのCPU使用率に基づいてシステムスローダウンなどの異常を検出する。また、異常検出部112は、異常を検出した場合、問題のあるスレッドを検出する。問題のあるスレッドとは、例えば、異常検出時に実行されているプログラム(プロセス)に含まれるスレッドのうちCPU使用率が最も高いスレッドである。または、問題のあるスレッドとは、例えば、異常検出時に実行されているプログラム(プロセス)の中で異常と判断されるプログラム(プロセス)に含まれるスレッドのうちCPU使用率が最も高いスレッドであってもよい。また、異常検出部112は、異常を検出した場合、異常を示す異常情報を生成し、異常情報記憶部192に記憶させる。例えば、異常検出部112は、検出した異常の内容、異常なプロセス、問題のあるスレッドなどを示す情報が含まれる異常情報を生成する。
【0049】
処理制御部113は、異常検出部112により検出された問題のあるスレッドに対して停止と実行を繰り返す間欠動作を行わせる。例えば、処理制御部113は、停止期間(停止させる期間)が実行期間(実行させる期間)より長くなるように間欠動作を行わせる。一例として、処理制御部113は、図2に示す例において好適な測定結果が得られた10秒停止と1秒実行を繰り返す間欠動作を行わせてもよい。例えば、この停止期間及び実行期間は、予め設定されている。なお、この停止期間及び実行期間の設定は、間欠動作を行わせるスレッドのCPU使用率、間欠動作を行わせるスレッドのアプリケーションの種類、電子機器10の動作環境(ハードウェア構成)などに応じて異なる設定としてもよい。
【0050】
また、処理制御部113は、間欠動作を行わせるスレッドのCPU使用率、間欠動作を行わせるスレッドのアプリケーションの種類、電子機器10の動作環境(ハードウェア構成)などに応じて、間欠動作を行わせる際の停止期間及び実行期間を決定してもよい。例えば、処理制御部113は、間欠動作を行わせるスレッドのCPU使用率が高いほど実行期間に対して停止期間を長くしてもよいし、当該スレッドのCPU使用率が低いほど、実行期間に対して停止期間を短くしてもよい。
【0051】
[異常検出制御処理の動作]
次に、電子機器10において制御部110が実行する異常検出制御処理の動作について説明する。図7は、本実施形態に係る異常検出制御処理の一例を示すフローチャートである。
(ステップS101)制御部110は、予め設定されたタイミングで、電子機器10のシステムの状態情報を取得し、取得した情報を取得したタイミングを示す情報と関連付けて、システム情報記憶部191に記憶させる。例えば、制御部110は、実行中のプログラム(プロセス)に含まれるスレッドごとのCPU使用率を含む情報をシステムの状態情報として取得し、取得したタイミングを示す情報と関連付けて、システム情報記憶部191に記憶させる。そして、ステップS103の処理に進む。
【0052】
(ステップS103)制御部110は、システム情報記憶部191に記憶された情報を参照し、取得したシステムの状態情報に基づいて異常を検出する。例えば、異常検出部112は、異常情報記憶部192に記憶されている異常検出モデルを用いて、取得部111が取得したシステムの状態情報に対応する異常を検出する。例えば、制御部110は、取得したスレッドごとのCPU使用率に基づいてシステムスローダウンなどの異常を検出する。そして、ステップS105の処理に進む。
【0053】
(ステップS105)制御部110は、異常を検出したか否かを判定する。制御部110は、異常を検出したと判定した場合(YES)、ステップS107の処理に進む。一方、制御部110は、異常を検出しないと判定した場合(NO)、ステップS101の処理に戻る。
【0054】
(ステップS107)制御部110は、ステップS105で異常を検出した場合、問題のあるスレッドを検出する。例えば、制御部110は、システムスローダウンなどの異常を検出した場合、CPU使用率が最も高いスレッドを問題のあるスレッドとして検出する。また、制御部110は、検出した異常の内容、異常なプロセス、問題のあるスレッドなどを示す情報が含まれる異常情報を生成し、異常情報記憶部192に記憶させる。そして、ステップS109の処理に進む。
【0055】
(ステップS109)制御部110は、異常情報記憶部192に記憶されている異常情報を参照して、問題のあるスレッドに対して停止と実行を繰り返す間欠動作を開始する。一例として、制御部110は、問題のあるスレッドに対して10秒停止と1秒実行を繰り返す間欠動作を行わせる。
【0056】
なお、制御部110は、間欠動作を行わせたスレッドの処理が終了した場合、その終了とともに、当該スレッドに対する間欠動作の制御を終了する。
【0057】
[異常検出処理の詳細]
次に、システムの状態情報に基づいて異常を検出する異常検出処理について詳しく説明する。まず、取得部111がシステムの状態情報を取得するタイミングについて説明する。図8は、本実施形態に係るシステムの状態情報の取得タイミングの一例を説明する図である。図示する例は、システムの状態情報の取得タイミングを示しており、縦軸がCPU使用率であり、横軸が時間軸である。取得部111は、時刻t1においてトリガイベントを検出すると、当該検出タイミングに応じてシステムの状態情報を取得する。
【0058】
トリガイベントは、例えば、異常検出用のアプリケーションの画面(異常検出に関する各種の操作を受け付ける画面)において、異常検出の開始を指示する操作ボタンへの操作がされたとき、または、CPU使用率が所定の閾値(例えば、10秒間に「100%/コア数」)を超えたときなどに生成される。なお、トリガイベントは、所定の時間間隔(例えば、30分)ごとに生成されてもよいし、ファン16が回転したときに生成されてもよい。
【0059】
例えば、取得部111は、時刻t1においてトリガイベントを検出すると、システムの状態情報の測定を開始し、所定の期間経過後に測定を終了する。取得部111は、時刻t1から所定の期間th(例えば30秒間)の間はCPU使用率の測定ために、自身はCPUを用いた処理は行わずに待機する。そして、時刻t1から所定の期間th(例えば30秒間)が経過した時刻t2において、取得部111は、再びシステムの状態情報を取得する。例えば、取得部111は、この時刻t1と時刻t2とで取得したシステムの状態情報の差分から各プロセスの各スレッドのCPU使用率などのデータを収集する。また、取得部111は、収集したシステムの状態情報をファイル(例えば、csvファイル)にしてシステム情報記憶部191に保存する。
【0060】
ここで、本実施形態において異常検出部112が異常の検出に用いるデータセットの一例を説明する。例えば、単にCPU使用率が高いといっても高負荷のアプリケーションの処理を正常に実行している場合もある。そこで、正常な処理と異常な処理とのそれぞれでスレッドごとのCPU使用率が実際にどのような傾向にあるかを調べる実験を行った。図9は、スレッドごとのCPU使用率の実験結果の一例を示す図である。実験では、正常な処理としては、通常の作業中のときのスレッドごとのCPU使用率を測定した。また、異常な処理としては、CPUが高負荷となる問題を持ったアプリケーションの実行中と、無限ループのバグを持ったアプリケーションの実行中とのそれぞれについて、スレッドごとのCPU使用率を測定した。この図では、横軸をCPU使用率、縦軸をスレッドの数として、正常な処理及び異常な処理のそれぞれについて、どの位のCPU使用率のスレッドが多いかを表している。その結果、実際には、CPU使用率が1~5%のスレッドの数が多い場合には正常な処理であり、異常な処理では、正常な処理のときに比較して、CPU使用率が10~30%や90~100%程度のスレッドの数が相対的に多くなる傾向が実験によりわかった。このように、正常な処理と異常な処理とでは、スレッドごとのCPU使用率に差があることがわかった。そこで、異常検出部112は、取得部111が取得したスレッドごとのCPU使用率に基づいて異常を検出する。一例として、異常検出部112は、CPU101を使用しているスレッドの合計数に対するCPU使用率が1~5%であるスレッドの数の割合を入力のデータセットとして使用する。
【0061】
図10は、異常検出モデルで用いるデータセットを説明する図である。CPU使用率の測定中に、CPU101を使用していたスレッドの合計数に対するCPU使用率1~5%のスレッド数の割合をThreCU0105Rとすると、
ThreCU0105R
=ThreCU0105×100/(NumOfThread-ThreCU00)
で表すことができる。
なお、前述したように、ThreCU00は、CPU使用率の測定中にCPU使用率が0%のスレッドの数である。ThreCU0105は、CPU使用率の測定中にCPU使用率が1~5%のスレッドの数である。NumOfThreadは、CPU使用率の測定中に、実行されていたスレッドの合計数である。
【0062】
上述したデータセットを用いて機械学習を行うことで異常検出モデルを生成することができる。機械学習を行う学習装置は、例えば、電子機器10と通信ネットワークを介して通信接続されるサーバ装置であってもよいし、電子機器10との通信接続を問わないコンピュータ装置であってもよい。例えば、機械学習としては、前述したようにOne Class SVMを用いることができる。上記学習装置は、正常なときのデータセットを学習データとして機械学習させることで異常値との識別境界を決定し、当該識別境界を基準として異常の検出が可能な異常検出モデルを生成する。
【0063】
電子機器10の異常検出部112は、学習装置で機械学習された異常検出モデルを用いて、取得部111が取得したスレッドごとのCPU使用率に対応する異常を検出する。このように、異常検出部112は、スレッドごとのCPU使用率を用いて機械学習された異常検出モデルを用いて異常を検出することで、高負荷の処理のときも低負荷の処理のときも精度よく異常を検出することができる。
【0064】
また、異常検出部112は、異常を検出した場合、問題のあるスレッドを検出する。
前述したように、問題のあるスレッドとは、例えば、異常検出時に実行されているプログラム(プロセス)に含まれるスレッドのうちCPU使用率が最も高いスレッドである。または、問題のあるスレッドとは、例えば、異常検出時に実行されているプログラム(プロセス)の中で異常と判断されるプログラム(プロセス)に含まれるスレッドのうちCPU使用率が最も高いスレッドであってもよい。
【0065】
なお、問題のあるスレッドは、1つに限定されるものではなく、複数のスレッドであってもよい。例えば、異常検出部112は、異常を検出した場合、CPU使用率が所定の閾値を超える1又は複数のスレッドを問題のあるスレッドとして検出してもよい。また、異常検出部112は、異常を検出した場合、CPU使用率が高い順に所定の数(1又は複数)のスレッドを問題のあるスレッドとして検出してもよい。
【0066】
以上説明してきたように、本実施形態に係る電子機器10は、プログラムに基づいて処理を実行するCPU(プロセッサの一例)を備えており、当該処理における異常を検出するとともに、異常の要因となる問題のあるスレッドを検出する。そして、電子機器10は、検出された問題のあるスレッドに対して停止と実行を繰り返す間欠動作を行わせる。
【0067】
これにより、電子機器10は、異常なプログラム全体を停止させるのではなく、問題のあるスレッドのみを間欠動作でゆっくりと走らせるため、デッドロック、タイムアウトエラー、UIのフリーズなどの問題の発生を抑制しつつCPUに負荷をかけているプログラムのCPU使用率を低下させることができる。
【0068】
例えば、電子機器10は、上記処理におけるスレッドごとのCPU使用率を示す情報を取得し、取得したスレッドごとのCPU使用率に基づいて、異常及び問題のあるスレッドを検出する。
【0069】
これにより、電子機器10は、単にプログラム全体のCPU使用率ではなく、スレッドごとのCPU使用率に基づいて異常を検出することにより、異常を精度よく検出することができる。よって、電子機器10は、正常な動作であるのにCPU使用率が高いというだけで、問題のないスレッドに対して間違って間欠動作をさせてしまわないようにすることができる。
【0070】
また、間欠動作において、停止期間(停止させる期間)が実行期間(実行させる期間)より長くてもよい。これにより、電子機器10は、問題のあるスレッドのCPU使用率を効果的に下げることができる。
【0071】
例えば、間欠動作における停止期間及び実行期間は、予め設定されている。これにより、電子機器10は、異常が発生したときに、予め設定された適切なデューティ比で問題のあるスレッドを間欠動作させるため、当該スレッドのCPU使用率を効果的に下げることができる。
【0072】
また、電子機器10は、スレッドごとのCPUの使用率が含まれるシステムの状態情報を取得する。そして、電子機器10は、間欠動作における停止期間及び実行期間を、取得したシステムの状態情報に基づいて決定してもよい。
【0073】
これにより、電子機器10は、異常が発生したときのシステムの状態に応じて適切なデューティ比で問題のあるスレッドを間欠動作させることができる。システムの状態とは、例えば、間欠動作を行わせるスレッドのCPU使用率、間欠動作を行わせるスレッドのアプリケーションの種類、電子機器10の動作環境(ハードウェア構成)などである。
【0074】
例えば、電子機器10は、間欠動作における停止期間及び実行期間を、間欠動作を行わせるスレッドのCPU使用率に応じて決定してもよい。例えば、電子機器10は、間欠動作を行わせるスレッドのCPU使用率が高いほど実行期間に対して停止期間を長くしてもよいし、当該スレッドのCPU使用率が低いほど、実行期間に対して停止期間を短くしてもよい。
【0075】
これにより、電子機器10は、デッドロック、タイムアウトエラー、UIのフリーズなどの問題の発生を抑制しつつCPUに負荷をかけているプログラムのCPU使用率を効果的に低下させることができる。
【0076】
また、電子機器10は、スレッドごとのCPU使用率と異常の有無に関する情報とに基づいて機械学習された異常検出モデル(学習済みモデルの一例)を用いて、異常及び問題のあるスレッドを検出する。これにより、電子機器10は、AIを用いて異常を精度よく検出することができる。
【0077】
具体的には、電子機器10は、CPUを使用しているスレッドの合計数に対する特定のCPU使用率であるスレッドの数の割合に基づいて機械学習された異常検出モデル(学習済みモデルの一例)を用いて、異常及び問題のあるスレッドを検出してもよい。
【0078】
これにより、電子機器10は、単にCPU使用率の高さで異常の有無を判断するのではないため、高負荷の処理のときも低負荷の処理のときも、AIを用いて異常を精度よく検出することができる。よって、電子機器10は、正常な動作であるのにCPU使用率が高いというだけで、問題のないスレッドに対して間違って間欠動作をさせてしまわないようにすることができる。
【0079】
なお、本実施形態では、CPU101を使用しているスレッドの合計数に対するCPU使用率1~5%であるスレッドの数の割合をデータセットとして、異常検出モデルを生成する例を説明したが、CPU使用率1~5%に限定されるものではない。例えば、CPU101を使用しているスレッドの合計数に対する任意の特定のCPU使用率であるスレッドの数の割合をデータセットとしてもよい。
【0080】
以上、図面を参照してこの発明の実施形態について詳しく説明してきたが、具体的な構成は上述のものに限られることはなく、この発明の要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
【0081】
例えば、上記実施形態では、異常検出モデルの機械学習としてOne Class SVMを用いる例を説明したが、これに限られるものではなく、他の機械学習が用いられてもよい。例えば、クラスタリング、ニューラルネットワーク、強化学習など、任意の機械学習が用いられてもよい。
【0082】
また、上記実施形態では、システムの状態情報と学習済みモデルとを用いて異常の検出を行なう例を説明したが、これに限られるものではない。例えば、学習済みモデルを使用せずに、システムの状態情報の一部または全部と異常の有無(正常or異常)とが関連付けられたデータテーブルを用いて異常の検出を行なうように構成されてもよい。また、学習済みモデルを使用せずに、システムの状態情報に基づいて異常を検出するアルゴリズムを具現化したプログラムを用いて異常の検出を行なうように構成されてもよい。
【0083】
また、上記実施形態では、システム処理部100と独立に動作するEC18は、センサハブ、チップセットなどのいずれの処理部であってもよく、EC18以外の処理部がEC18に代えてまたは協業して上述の処理を実行してもよい。また、システム処理部100とEC18とは、一体化された集積回路で構成されてもよい。
【0084】
なお、上述した電子機器10は、内部にコンピュータシステムを有している。そして、上述した電子機器10が備える各構成の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより上述した電子機器10が備える各構成における処理を行ってもよい。ここで、「記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行する」とは、コンピュータシステムにプログラムをインストールすることを含む。ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、インターネットやWAN、LAN、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。このように、プログラムを記憶した記録媒体は、CD-ROM等の非一過性の記録媒体であってもよい。
【0085】
また、記録媒体には、当該プログラムを配信するために配信サーバからアクセス可能な内部又は外部に設けられた記録媒体も含まれる。なお、プログラムを複数に分割し、それぞれ異なるタイミングでダウンロードした後に電子機器10が備える各構成で合体される構成や、分割されたプログラムのそれぞれを配信する配信サーバが異なっていてもよい。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムに既に記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【0086】
また、上述した実施形態における電子機器10が備える各機能の一部、または全部を、LSI(Large Scale Integration)等の集積回路として実現してもよい。各機能は個別にプロセッサ化してもよいし、一部、又は全部を集積してプロセッサ化してもよい。また、集積回路化の手法はLSIに限らず専用回路、または汎用プロセッサで実現してもよい。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
【0087】
また、上記実施形態の電子機器10は、パーソナルコンピュータに限られるものではなく、スマートフォンなどの携帯型の端末装置であってもよいし、ゲーム装置、家庭用電気製品、業務用電気製品など各種の電子機器に適用できる。
【符号の説明】
【0088】
10 電子機器、11 通信部、12 表示部、13 スピーカ、14 入力部、15 電源部、16 ファン、17 温度センサ、18 EC、19 記憶部、20 データベース、30 学習装置、100 システム処理部、101 CPU、102 GPU、103 メモリコントローラ、104 I/Oコントローラ、105 システムメモリ、110 制御部、111 取得部、112 異常検出部、113 処理制御部、191 システム情報記憶部、192 異常情報記憶部、193 異常検出モデル記憶部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10