JP5527425B2 - 通信装置、負荷分散方法、および記録媒体 - Google Patents
通信装置、負荷分散方法、および記録媒体 Download PDFInfo
- Publication number
- JP5527425B2 JP5527425B2 JP2012544031A JP2012544031A JP5527425B2 JP 5527425 B2 JP5527425 B2 JP 5527425B2 JP 2012544031 A JP2012544031 A JP 2012544031A JP 2012544031 A JP2012544031 A JP 2012544031A JP 5527425 B2 JP5527425 B2 JP 5527425B2
- Authority
- JP
- Japan
- Prior art keywords
- communication
- thread
- load
- cpu
- communication device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/08—Arrangements for detecting or preventing errors in the information received by repeating transmission, e.g. Verdan system
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1812—Hybrid protocols; Hybrid automatic repeat request [HARQ]
- H04L1/1819—Hybrid protocols; Hybrid automatic repeat request [HARQ] with retransmission of additional or different redundancy
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1825—Adaptation of specific ARQ protocol parameters according to transmission conditions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1867—Arrangements specially adapted for the transmitter end
- H04L1/1887—Scheduling and prioritising arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/18—Automatic repetition systems, e.g. Van Duuren systems
- H04L1/1867—Arrangements specially adapted for the transmitter end
- H04L1/189—Transmission or retransmission of more than one copy of a message
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/20—Arrangements for detecting or preventing errors in the information received using signal quality detector
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1008—Server selection for load balancing based on parameters of servers, e.g. available memory or workload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W28/00—Network traffic management; Network resource management
- H04W28/02—Traffic management, e.g. flow control or congestion control
- H04W28/0205—Traffic management, e.g. flow control or congestion control at the air interface
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W28/00—Network traffic management; Network resource management
- H04W28/02—Traffic management, e.g. flow control or congestion control
- H04W28/0231—Traffic management, e.g. flow control or congestion control based on communication conditions
- H04W28/0236—Traffic management, e.g. flow control or congestion control based on communication conditions radio quality, e.g. interference, losses or delay
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mobile Radio Communication Systems (AREA)
Description
本発明は、通信装置、負荷分散方法、および記録媒体に関する。
従来、CPU(Central Processing Unit)とメモリを搭載した処理ユニットを複数含むマルチコアプロセッサシステムの種別としては、大別して次の2つの種別に分けることができる。一つは、他の処理ユニットのメモリをCPUから直接参照できない分散メモリ型のマルチコアプロセッサシステムであり、もう一つは、他の処理ユニットのメモリを参照可能な分散共有メモリ型、またはNUMA(Non−Uniform Memory Access)型のマルチコアプロセッサシステムである(分散共有メモリ型、NUMA型についての説明は、たとえば、非特許文献1〜非特許文献3を参照。)。
分散メモリ型、分散共有メモリ型、NUMA型のマルチコアプロセッサシステムは、大型計算機で、筐体間のような共有メモリを実現するには十分な通信帯域が得られないような状況の場合に適用されている。また、大型計算機では、非常に多くのCPUを搭載するために、共有メモリではメモリアクセスが混雑しすぎて性能が出ない場合に、分散メモリ型、分散共有メモリ型、NUMA型のマルチコアプロセッサシステムが使用されている。
処理ユニット間で負荷分散を行う場合、処理ユニット群が属する通信システムは、処理を処理ユニット間で移動させることになる。分散共有メモリ型、または、NUMA型のマルチコアプロセッサシステムにおいて、自処理ユニットのメモリと、他処理ユニットのメモリとではアクセス速度が異なるが、論理的なメモリの扱いは、共有メモリ型のマルチコアプロセッサシステムと等しい。したがって、分散共有メモリ型、または、NUMA型のマルチコアプロセッサシステムにおける処理の移動方法は、共有メモリ型のマルチコアプロセッサシステムと同等の方法を利用することができる。
一方、分散メモリ型のマルチコアプロセッサシステムにおける負荷分散に関して、たとえば、移動対象の処理が利用しているデータを、処理ユニット間の通信路を利用して移動元の処理ユニットから移動先の処理ユニットに移動させるという技術が開示されている(たとえば、下記特許文献1を参照。)。具体的に、特許文献1にかかる技術では、移動対象の処理の移動後、移動先の処理ユニットが移動対象の処理を実行すると、移動元の処理ユニットのメモリにアクセスする。これにより、分散メモリ型のマルチコアプロセッサシステムにおいて処理ユニット間にて処理の移動を実現し、負荷分散を行うことができる。
また負荷分散における、複数の処理のうち移動対象とする処理を選択する方法に適用できる技術として、スレッドの切り替え時に、メモリの容量と転送時間とに基づいたコストを算出し、コストが最も小さいスレッドに切り替えるという技術が開示されている(たとえば、下記特許文献2を参照。)。これにより、負荷分散時において、最もコストの小さい処理を移動することができる。
また、負荷分散を実行するか否かの決定方法において、定期的に複数の処理ユニットの負荷状況を監視し、処理ユニット間で負荷量の偏りが大きい場合に、負荷分散を実行するという技術が開示されている(たとえば、下記特許文献3を参照。)。
「分散共有メモリ − Wikipedia」[online]、2010年10月7日検索、インターネット<URL:http://ja.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E5%85%B1%E6%9C%89%E3%83%A1%E3%83%A2%E3%83%AA>
「NUMA − Wikipedia」[online]、2010年10月7日検索、インターネット<URL:http://ja.wikipedia.org/wiki/NUMA>
「NUMA:理論と実践 − SourceForge.JP Magazine : オープンソースの話題満載」[online]、2010年10月7日検索、インターネット<URL:http://sourceforge.jp/magazine/03/05/14/0222221>
近年では、通信装置2つを結合して使用したり、または、通信装置2つを分離し、一方の通信装置で通話を行い、他方の通信装置でネットワークに接続したり、という使用方法が提供されたセパレート型の携帯電話が存在する。それぞれの通信装置がCPUとメモリを搭載していれば、このようなセパレート型の携帯電話も、分散メモリ、または分散共有メモリ、NUMA型のマルチコアプロセッサシステムの一形態とみなせる。
また、上述した、分散メモリ型、分散共有メモリ型、NUMA型のマルチコアプロセッサシステムを適用した大型計算機では、通信路が固定されていることが想定されている。したがって、たとえば、特許文献1にかかる技術に関しても、通信路が固定されている場合の処理の移動方法を対象としている。しかしながら、前述のセパレート型の携帯電話では、通信装置間が結合、または分離した状態によって通信速度が大きく変化し、負荷分散を行うにも、通信状態によっては処理の移動が高負荷となってしまい、処理効率が低下するという問題があった。
たとえば、セパレート型の携帯電話において、通信装置間が分離されて無線接続状態で情報を通信している場合、上述した分散共有メモリ型、またはNUMA型を前提とした負荷分散を行うと、低速な無線接続状態で通信装置間での通信を頻繁に行うため、通信に時間がかかってしまうという問題があった。
本発明は、上述した従来技術による問題点を解消するため、通信装置間の通信状態に応じた負荷分散を実行できる通信装置、負荷分散方法、および記録媒体を提供することを目的とする。
上述した課題を解決し、目的を達成するため、開示の通信装置は、第1中央処理装置と第1メモリとを含む第1通信装置と、第2中央処理装置と第2メモリとを含む第2通信装置とが、第1通信装置の第1負荷量と第2通信装置の第2負荷量とに基づいて負荷分散を行い、第1通信装置と第2通信装置とが無線通信を行う場合には第1負荷分散を行い、第1通信装置と第2通信装置とが有線通信を行う場合には第1負荷分散とは異なる第2負荷分散を行う。
本通信装置、負荷分散方法、および記録媒体によれば、通信装置間の通信状態に応じた負荷分散を実行でき、通信装置の処理効率が向上するという効果を奏する。
以下に添付図面を参照して、開示の通信装置、負荷分散方法、および記録媒体の好適な実施の形態を詳細に説明する。
(通信システム100のハードウェア)
図1は、実施の形態1にかかる通信システム100のハードウェアを示すブロック図である。図1において、通信システム100は、通信装置101#0、通信装置101#1を含む。また、通信システム100は、3つ以上の通信装置101を含んでもよい。以下、接尾記号“#0”は、通信装置101#0に含まれるハードウェア、ソフトウェアであることを示し、接尾記号“#1”は、通信装置101#1に含まれるハードウェア、ソフトウェアであることを示す。
図1は、実施の形態1にかかる通信システム100のハードウェアを示すブロック図である。図1において、通信システム100は、通信装置101#0、通信装置101#1を含む。また、通信システム100は、3つ以上の通信装置101を含んでもよい。以下、接尾記号“#0”は、通信装置101#0に含まれるハードウェア、ソフトウェアであることを示し、接尾記号“#1”は、通信装置101#1に含まれるハードウェア、ソフトウェアであることを示す。
たとえば、通信システム100は、通信装置101#0、通信装置101#1を1台として扱うセパレート型の携帯端末である。ユーザは、通信装置101#0と通信装置101#1を結合して使用したり、または通信装置101#0と通信装置101#1の結合を解除し、分離して使用したりすることが可能である。以下、通信装置101#0のハードウェアについて説明を行うが、通信装置101#1も通信装置101#0と同様のハードウェアを含む。
通信装置101#0は、中央処理装置となるCPU102#0と、ROM(Read‐Only Memory)103#0と、RAM(Random Access Memory)104#0と、を含む。また、通信装置101#0は、フラッシュROMコントローラ105#0と、フラッシュROM106#0と、タイマー107#0と、ディスプレイ108#0と、電源管理機構109#0と、有線通信I/F110#0と、無線通信I/F111#0と、を含む。また、各部はバス112#0によってそれぞれ接続されている。
ここで、CPU102#0は、通信装置101#0の全体の制御を司る。さらにCPU102#0は、稼働中のプログラムのメモリへのアクセス回数を計測するアクセスカウンタ113#0を有する。メモリとはROM103#0、RAM104#0、フラッシュROM106#0等である。ROM103#0は、ブートプログラム、アプリケーションなどの実行オブジェクトを記憶している。RAM104#0は、CPU102#0のワークエリアとして使用される。
フラッシュROMコントローラ105#0は、CPU102#0の制御に従ってフラッシュROM106#0に対するデータのリード/ライトを制御する。フラッシュROM106#0は、フラッシュROMコントローラ105#0の制御で書き込まれたデータを記憶する記録媒体である。データの具体例としては、通信システム100を使用するユーザが有線通信I/F110#0、無線通信I/F111#0を通して取得した画像データ、映像データなどや、または本実施の形態の負荷分散設定をするプログラムが格納されていてもよい。また、フラッシュROM106#0は、たとえば、メモリカード、SDカードなどを採用することができる。
タイマー107#0は、定期的にCPU102#0に通知する機能を有する。具体的には、タイマー107#0は、クロックをカウントし、カウント数があらかじめ指定した値になったときに、CPU102#0に割込信号を通知する。
ディスプレイ108#0は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ108#0は、たとえば、TFT液晶ディスプレイなどを採用することができる。また、ディスプレイ108#0は、ユーザによる押下を受け付けるタッチパネルであってもよい。また、ディスプレイ108は、通信装置101#0、通信装置101#1のうち、いずれか1つの通信装置101が有していてもよい。さらに、ディスプレイ108を有していない通信装置101は、ユーザによって数字、各種指示などの入力が行われるキーボードを有していてもよい。
電源管理機構109#0は、通信装置101#0が有するバッテリの残容量の監視と電源電圧、CPU102#0等に供給されるクロックの周波数を制御する。有線通信I/F110#0と無線通信I/F111#0は、通信回線を通じて通信装置101#1と接続する。有線通信I/F110#0は、有線回線を通じて有線通信I/F110#1と接続し、無線通信I/F111#0は、無線回線を通じて無線通信I/F111#1と接続する。たとえば、有線接続にはUSB(Universal Serial Bus)端子による接続、無線接続にはIEEE 802.15やIEEE802.11といった規格に従った接続を採用することができる。
また、無線通信I/F111#0と、無線通信I/F111#1とは、直接通信するアドホック通信となるが、無線通信I/F111#0は、無線LANを経由してインターネットなどのネットワークに接続してもよい。また、有線通信I/F110#0と有線通信I/F110#1は、通信装置101#0と通信装置101#1の結合を解除することで、有線回線を切断することも可能である。以下、有線回線が切断され、無線回線による通信が行われている通信状態を無線接続状態、有線回線による通信が行われている通信状態を有線接続状態と呼称する。
図2は、通信システム100の通信状態に応じたソフトウェアの負荷分散の状態を示す説明図である。符号201で示すブロック図は、通信状態が無線接続状態である場合の通信システム100を示しており、符号202で示すブロック図は、通信状態が有線接続状態である場合の通信システム100を示している。通信装置101#0は、OS203#0を実行し、通信装置101#1は、OS203#1を実行する。OS203#0、OS203#1は、それぞれ通信装置101#0、通信装置101#0を制御するソフトウェアである。さらに、OS203#0、OS203#1の機能により、プロセス204、プロセス205、プロセス206がCPU102#0、CPU102#1に割り当てられる。
プロセス204〜プロセス206は、内部にスレッドを有する。スレッドとはCPUで行う処理を管理するための基本単位であり、プロセスはスレッドが利用するメモリやデバイスの管理単位である。プロセス204〜プロセス206の具体例として、プロセス204は、スレッド204−1〜スレッド204−3という3つのスレッドを含む。同様に、プロセス205は、スレッド205−1〜スレッド205−3という3つのスレッドを含む。プロセス206は、スレッド206−1〜スレッド206−2という2つのスレッドを含む。
また、説明を簡略化するために、図2における各スレッドの負荷量は全て等しく、1つのスレッドの負荷量=1として説明を行う。さらに、CPU102#0、CPU102#1は、与えられた負荷量を実行可能な周波数で実行すると仮定する。ここで、消費電力は周波数に応じて加速度的に増加するため、図2の説明では、CPUの消費電力をCPUが実行するスレッドの負荷量の合計を2乗した値と設定する。
符号201で示すブロック図では、通信状態が無線接続状態であり、プロセス単位で負荷分散を行っている。以下、プロセス単位の負荷分散を、第1負荷分散と呼称する。プロセス間では、データを共有することが少ない。したがって、第1負荷分散では通信量は小さくなる。また、具体的な負荷量として、CPU102#0は、スレッド204−1〜スレッド204−3、スレッド206−1、スレッド206−2を実行しているため、負荷量=5となる。また、CPU102#1は、スレッド205−1〜スレッド205−3を実行しているため、負荷量=3となる。したがって、CPU102#0の消費電力=25となり、CPU102#1の消費電力=9となり、第1負荷分散時の通信システム100の消費電力=25+9=34となる。
次に、通信装置101#0と通信装置101#1が結合され、通信状態が無線通信から有線通信に遷移した場合のCPU102#0、CPU102#1の負荷量、消費電力を説明する。
符号202で示すブロック図では、通信状態が有線接続状態であり、スレッド単位で負荷分散を行っている。以下、スレッド単位の負荷分散を、第2負荷分散と呼称する。スレッドの方がプロセスと比較して粒度が細かいため、第2負荷分散は、第1負荷分散よりも通信装置101の負荷量を均等に近づけることが可能である。また、スレッド間では、データを共有することが多い。したがって、第2負荷分散の通信量は、第1負荷分散の通信量に比べ大きくなる。このように、第2負荷分散の通信量は大きくなるが、有線通信は無線通信と比較し一桁ほど通信速度が速いため、通信量が大きくなっても効率のよい負荷分散を実行することができる。
具体的な負荷量として、CPU102#0は、スレッド204−1〜スレッド204−3、スレッド206−1を実行しているため、負荷量=4となる。また、CPU102#1は、スレッド205−1〜スレッド205−3、スレッド206−2を実行しているため、負荷量=4となる。したがって、CPU102#0の消費電力=16となり、CPU102#1の消費電力=16となり、第2負荷分散時の通信システム100の消費電力=16+16=32となる。以上のように、粒度が細かい第2負荷分散は、第1負荷分散よりも消費電力を減少させることが可能である。
このように、実施の形態1にかかる通信システム100は、通信装置101間での通信速度が通信状態によって大きく変化することを考慮して、通信状態に応じた効率のよい負荷分散を実現する。
図3は、負荷分散の具体例を示す説明図である。図2にて第1負荷分散および第2負荷分散における通信システム100の実行状態を説明したが、図3では、通信システム100の運用時の具体例にて、負荷分散の状態を説明する。符号301で示す通信システム100は、負荷分散が行われていない状態であり、符号302で示す通信システム100は、第1負荷分散が行われている状態であり、符号303で示す通信システム100は、第2負荷分散が行われている状態である。
符号301で示す通信システム100では、通信装置101#0が動画再生プロセスと待ち受けプロセスを実行し、通信装置101#1は特にプロセスを実行していない。負荷分散が行われていない符号301で示す通信システム100では、負荷量が通信装置101#0に偏っているため、負荷バランスは悪い。負荷バランスが悪いため、通信システム100全体の消費電力は大きくなる。
負荷バランスが悪くなると消費電力が大きくなる理由としては、消費電力は周波数に応じて加速度的に増加するので、負荷量が大きくなった通信装置101の消費電力が加速度的に大きくなるためである。したがって、負荷分散し、最大の周波数を低下させた方が、全体の消費電力を小さくすることができる。また、通信装置101間の通信量に関しては、通信装置101#0で全ての処理が行われているため、小さくなる。
符号302で示す通信システム100では、通信装置101#0が動画再生プロセスを実行し、通信装置101#1が待ち受けプロセスを実行している。第1負荷分散が行われている符号302で示す通信システム100では、負荷が通信装置101#0と通信装置101#1とに分散され、負荷バランスは符号301で示す通信システム100よりよくなる。負荷バランスがよくなった結果、通信システム100全体の消費電力は、符号301で示す通信システム100より小さくなる。通信装置101間の通信量に関しては、プロセス間通信が発生するため、符号301で示す通信システム100より大きくなる。
符号303で示す通信システム100では、通信装置101#0が動画再生プロセス内の動画再生1スレッドを実行し、通信装置101#1が動画再生プロセス内の動画再生2スレッドと待ち受けプロセスを実行している。動画再生1スレッドは、たとえば、動画再生の映像部分の処理を行い、動画再生2スレッドは、動画再生の音声部分の処理を行う。
第2負荷分散が行われている符号303で示す通信システム100では、通信装置101#0の負荷と通信装置101#1の負荷が均等に近くなるように負荷分散され、負荷バランスは符号302で示す通信システム100よりさらによくなる。負荷バランスがさらによくなった結果、通信システム100全体の消費電力は、符号302で示す通信システム100より小さくなる。通信装置101間の通信量に関しては、スレッド間通信が発生し、スレッド間では共有されるデータが多いため、符号302で示す通信システム100より大きくなる。
(実施の形態1にかかる通信システム100の機能)
次に、実施の形態1にかかる通信システム100の機能について説明する。図4は、通信システム100の負荷分散設定の実行決定および負荷分散設定の機能を示すブロック図である。なお、OS203による、プロセスのメモリ管理、アクセス監視、通信状態監視を含めた機能については、図13にて後述する。通信システム100は、決定部401と、選択部402と、設定部403と、プロセス移動部404と、スレッド移動部405と、を含む。この制御部となる機能(決定部401〜スレッド移動部405)は、記憶装置に記憶されたプログラムをCPU102#0が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図1に示したROM103#0、RAM104#0、フラッシュROM106#0などである。
次に、実施の形態1にかかる通信システム100の機能について説明する。図4は、通信システム100の負荷分散設定の実行決定および負荷分散設定の機能を示すブロック図である。なお、OS203による、プロセスのメモリ管理、アクセス監視、通信状態監視を含めた機能については、図13にて後述する。通信システム100は、決定部401と、選択部402と、設定部403と、プロセス移動部404と、スレッド移動部405と、を含む。この制御部となる機能(決定部401〜スレッド移動部405)は、記憶装置に記憶されたプログラムをCPU102#0が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図1に示したROM103#0、RAM104#0、フラッシュROM106#0などである。
なお、図4では、決定部401〜スレッド移動部405は、通信装置101#0の機能として図示しているが、他の通信装置101が、決定部401〜スレッド移動部405を有していてもよい。
決定部401は、負荷分散の設定を行うことを決定する機能を有する。たとえば、決定部401は、通信装置101#0の負荷量と通信装置101#1の負荷量との差分が所定値以上であるときに負荷分散の設定を決定する。また、決定部401は、通信装置101#0の負荷量と通信装置101#1の負荷量から算出される目標負荷量と、通信装置101#0の負荷量と、の差分が所定値以上であるときに負荷分散の設定を決定してもよい。なお、目標負荷量については、通信装置101#0の負荷量およびバッテリ残量と、通信装置101#1の負荷量およびバッテリ残量と、から算出してもよい。なお、通信装置101の負荷量とは、通信装置101内のCPU102の負荷量である。CPU102の具体的な負荷量の算出方法については、図11にて後述する。
また、決定部401は、タイマー107#0からの通知に基づいて負荷分散の設定を行うか否かを決定してもよい。なお、決定されたか否かという情報は、CPU102#0のレジスタ、キャッシュメモリ、RAM104#0等の記憶装置に格納される。
選択部402は、決定部401によって負荷分散の設定が行われると決定された場合、移動対象スレッドまたは移動対象プロセスを選択する機能を有する。たとえば、選択部402は、通信装置101#0のメモリから通信装置101#1のメモリへの転送時間に基づいて通信装置101#1のメモリに転送する移動対象プロセスを選択する。また、選択部402は、スレッドのメモリへのアクセス頻度または過去のスレッドの転送履歴に基づいて、通信装置101#1に転送する移動対象スレッドを選択してもよい。なお、転送履歴は、たとえば、通信装置101#1から移動してきたスレッドの情報をRAM104#0内に記憶することで、転送履歴としてもよい。
または、選択部402は、プロセスが割り当てられているCPUと異なるCPUに割り当てられているスレッドを、過去に移動してきたスレッドとして判断して、移動対象スレッドに選択してもよい。なお、選択された移動対象スレッドまたは移動対象プロセスの情報は、CPU102#0のレジスタ、キャッシュメモリ、RAM104#0等の記憶領域に記憶される。
設定部403は、通信装置101#0と通信装置101#1とが無線通信を行う場合には第1負荷分散の実行を設定し、通信装置101#0と通信装置101#1とが有線通信を行う場合には第2負荷分散の実行を設定する機能を有する。具体的には、選択部402によって移動対象プロセスが選択された場合、設定部403は、プロセス移動部404に対して移動対象プロセスを移動するように指示することで、第1負荷分散の実行を設定する。同様に、選択部402によって移動対象スレッドが選択された場合、設定部403は、スレッド移動部405に対して移動対象スレッドを移動するように指示することで、第2負荷分散の実行を設定する。
プロセス移動部404は、移動対象プロセスを移動元のCPU102から移動先のCPU102に移動させる機能を有する。具体的には、プロセス移動部404は、プロセスが実行中に使用するデータを記憶しているプロセス用データ領域を移動元のRAM104から移動先のRAM104へ転送する。続けて、プロセス移動部404は、移動対象プロセスが割り当てられていたCPUを移動元のCPU102から移動先のCPU102にすることで、移動対象プロセスの移動を完了する。なお、プロセスの具体的な移動方法については、図9にて後述する。
スレッド移動部405は、移動対象スレッドを移動元のCPU102から移動先のCPU102に移動させる機能を有する。具体的には、スレッド移動部405は、移動対象スレッドが割り当てられていたCPUを移動元のCPU102から移動先のCPU102にする。そして、スレッド移動部405は移動先のCPU102が移動対象スレッドの実行によってプロセス用データ領域にアクセスする場合、通信路を経由して、移動元のRAM104にアクセスするように設定する。なお、スレッドの具体的な移動方法については、図10にて後述する。
以上、決定部401は、決定部401が含まれる通信装置101が負荷分散を実行するか否か、また選択部402、設定部403は、選択部402、設定部403が含まれる通信装置101にて割り当てられているプロセス、スレッドに対して機能していた。さらに、決定部401〜設定部403は、各部が割り当てられている通信装置101とは異なる他の通信装置101に対して機能してもよい。
たとえば、通信システム100内に、通信装置101#0、通信装置101#1とは異なる通信装置101#2が存在する場合を想定する。この場合、通信装置101#2に含まれる決定部は、通信装置101#0の負荷量およびバッテリ残量と、通信装置101#1の負荷量およびバッテリ残量と、を取得して、通信装置101#0の負荷分散の設定を実行するか否かを判断してもよい。決定後、通信装置101#2に含まれる選択部は、通信装置101#0に割り当てられているプロセスおよびスレッドの情報を参照し、移動対象スレッドまたは移動対象プロセスを選択する。
移動対象プロセスが選択された場合、通信装置101#2に含まれる設定部403は、通信装置101#0のプロセス移動部404に対して移動対象プロセスを移動するように指示する。また、移動対象スレッドが選択された場合、通信装置101#2に含まれる設定部403は、通信装置101#0のスレッド移動部405に対して移動対象スレッドを移動するように指示する。
図5は、通信状態が無線接続状態における負荷分散の動作を示す説明図である。図5では、通信システム100がプロセス単位の負荷分散となる第1負荷分散を行っている状態を示している。具体的には、通信装置101#0がプロセスA、プロセスBを実行し、通信装置101#1がプロセスCを実行している。また、プロセスAはメモリ使用量が小さく、プロセスB、プロセスCはメモリ使用量が大きい。
通信システム100は、通信装置101の負荷を定期的に取得し、負荷バランスが悪くなった場合、移動対象プロセスを選択し、移動対象プロセスを移動する。移動対象プロセスの選択方法は、負荷量が大きい方の通信装置101で実行されているプロセスのうち、メモリ使用量が最も小さいプロセスとする。
たとえば、図5では、通信装置101#0の負荷量が増大し、負荷バランスが悪くなっている。通信装置101#0は、CPU102#0が実行するプロセスAとプロセスBのうち、メモリ使用量が最も小さいプロセスAを移動対象プロセスに選択し、プロセスAを通信装置101#1に移動する。なお、移動するか否かの選択方法として、通信システム100は、移動対象プロセスのメモリ使用量から算出される移動コストと、負荷バランスとに基づいて選択する。移動コストは、たとえば、下記(1)式を用いて算出してもよい。
移動コスト=移動対象プロセスのメモリ使用量/通信速度 …(1)
通信システム100は、(1)式を用いて移動コストを算出し、移動コストと、現在の通信装置101#1の負荷量から負荷バランスが均等になる目標値を減じた目標負荷量との差分と、を比較する。比較後、目標負荷量との差分が移動コスト以上である場合、通信システム100は、移動対象プロセスを移動する。なお、無線通信における移動対象プロセスの移動方法については、図9にて後述する。さらに、移動コストを具体的に算出した例については、図11にて後述する。
図6は、通信状態が有線接続状態における負荷分散の動作を示す説明図である。図6では、通信システム100がスレッド単位の負荷分散となる第2負荷分散を行っている状態を示している。具体的には、通信装置101#0がプロセスA内のスレッドA−1、スレッドA−2、プロセスB内のスレッドB−1を実行し、通信装置101#1がスレッドB内のスレッドB−2、プロセスC内のスレッドC−1、スレッドC−2を実行している。また、プロセスA〜プロセスCのメモリ使用量は図5で示した状態と等しい。
さらに、各スレッドのアクセス頻度として、スレッドA−1、スレッドB−1、スレッドC−1のアクセス頻度は低く、スレッドA−2、スレッドB−2のアクセス頻度は高い。スレッドC−2のアクセス頻度はアクセス頻度:低のスレッド群とアクセス頻度:高のスレッド群との中間である。
通信システム100は、通信装置101の負荷を定期的に取得し、負荷バランスが悪くなった場合、移動対象スレッドまたは移動対象プロセスを選択し、移動対象スレッドまたは移動対象プロセスを移動する。移動対象スレッドまたは移動対象プロセスの選択方法は、負荷量が大きい方の通信装置101で実行されているスレッドまたはプロセスのうち、次の選択方法に基づいて選択する。
選択方法1:負荷量が大きい方の通信装置101は、実行されているスレッドのうち、過去に移動してきたスレッドを移動対象スレッドに選択する。過去に移動したスレッドが存在しない場合、負荷量が大きい方の通信装置101は、選択方法2による選択方法を試みる。
選択方法2:負荷量が大きい方の通信装置101は、実行されているスレッドのうち、アクセス頻度が最も低いスレッドを移動対象スレッドに選択する。負荷量が大きい方の通信装置101は、アクセス頻度が低いスレッド順に、移動した際に負荷バランスが目標負荷量に近づくか検証する。負荷バランスが目標負荷量に近づくスレッドが存在しない場合、負荷量が大きい方の通信装置101は、選択方法3による選択方法を試みる。
選択方法3:負荷量が大きい方の通信装置101は、実行されているプロセスのうち、メモリ使用量の小さいプロセスを移動対象プロセスに選択する。
通信システム100は、選択方法1〜選択方法3を実行することで、移動対象スレッドまたは移動対象プロセスを選択し、移動対象スレッドまたは移動対象プロセスを移動する。なお、有線通信における移動対象スレッドまたは移動対象プロセスの移動方法については、図10にて後述する。さらに、選択方法1、選択方法2では、スレッドを移動されることで発生する移動コストと、負荷バランスとに基づいて選択する。具体的な移動コストの算出例は、図12にて後述する。
このように、通信装置101間が有線接続状態の場合は、高速で通信装置101間の通信が可能なため、スレッド単位の負荷分散となる第2負荷分散が有効となる。とはいえ、完全な共有メモリ型のマルチコアシステムと異なり、自身の通信装置101のメモリを参照するより他の通信装置101のメモリを参照した方が若干遅いため、メモリアクセスを頻繁に行う処理を移動させるとかえって効率が悪くなる可能性がある。このため、選択方法1、選択方法2による移動させても効率がよくなるスレッドが無い場合、通信システム100は、選択方法3によるプロセス単位の負荷分散となる第1負荷分散を行う。
図7は、通信状態が有線接続状態から無線接続状態に遷移した場合の動作を示す説明図である。図7では、通信装置101#0と通信装置101#1とが結合されており通信状態が有線接続状態となる状態から、通信装置101#0と通信装置101#1との結合が解除され、通信状態が無線接続状態へ遷移した状態における動作を示している。図7におけるスレッド、プロセスの状態は、図6で示した状態と等しい。有線接続状態であったときには、通信システム100は第2負荷分散を行っており通信量が大きいため、通信量が小さい第1負荷分散に遷移する。
図7の例では、通信システム100が第2負荷分散を行っており、通信装置101#0が移動してきたスレッドB−1を実行している。この状態で無線接続状態に遷移すると、通信システム100は、通信速度が低下するにも関わらず通信量が大きいために、効率が悪化する。したがって、通信装置101#0はスレッドB−1を通信装置101#1に移動させ、通信システム100が第1負荷分散を行うようにする。
図8は、通信状態が無線接続状態から有線接続状態に遷移した場合の動作を示す説明図である。図8では、通信装置101#0と通信装置101#1との結合が解除されており、通信状態が無線接続状態となる状態から、通信装置101#0と通信装置101#1とが結合され有線接続状態へ遷移した状態における動作を示している。図8におけるスレッド、プロセスの状態について、スレッドのアクセス頻度とプロセスのメモリ使用量は図6で示した状態と等しい。プロセスの割当状態については、通信装置101#0がプロセスAを実行し、通信装置101#1がプロセスB、プロセスCを実行する。
プロセス単位となる第1負荷分散よりスレッド単位となる第2負荷分散の方が、細かな粒度で負荷分散が可能で、より負荷バランスを取りやすいため、通信システム100は、有線接続状態として再度負荷分散を検討する。具体的には、通信システム100は、図6で示した第2負荷分散の設定を実行し、通信装置101間の負荷バランスをよくする。
図9は、通信装置101間のプロセスの移動方法を示す説明図である。通信装置101内には、CPUの要求するメモリアクセスを処理するMMU(Memory Management Unit)901が存在する。MMU901の機能には、メモリアクセスに関する様々な処理が存在するが、図9、図10では、MMU901の機能のうち論理アドレスを物理アドレスに変換する機能を用いて、プロセスの移動方法およびスレッドの移動方法を説明する。
はじめにMMU901が有する論理アドレスを物理アドレスに変換する機能について説明する。MMU901は、変換テーブル902を参照する。変換テーブル902は、論理アドレスフィールドと、物理アドレスフィールドという2つのフィールドを含み、論理アドレスと物理アドレスを関連付けるテーブルである。また、変換テーブル902は、プロセスごとに存在しており、RAM104に格納されている。また、論理アドレスは、プロセスAがアクセスする論理アドレス空間903のアドレスであり、物理アドレスは、ROM103、RAM104等に割り当てられた物理アドレス空間904のアドレスである。
たとえば、変換テーブル902#0の例を用いて、CPU102#0が論理アドレス“0x00000010”に対してアクセス要求を行った場合、MMU901#0は、変換テーブル902#0より、“0x00001010”に変換する。
続けて、無線接続状態におけるプロセスの移動方法について説明する。通信装置101#0が実行するプロセスBを、通信装置101#1に移動させる場合を想定する。プロセスBの論理アドレス空間903には、プログラムコードが格納されたコードセグメントや、変数等が格納されたデータセグメント等が存在する。なお、図9、図10には図示していないが、移動対象となる領域として、コードセグメント、データセグメント以外に、プロセス実行中に動的に確保されるヒープセグメント、スタックセグメント等が存在する。
コードセグメントの論理アドレス範囲は、“0x00000000”〜“0x00000fff”とし、データセグメントの論理アドレス範囲は、“0x00001000”〜“0x00001fff”と想定する。
MMU901#0は、変換テーブル902#0のレコード905を参照して、論理アドレス範囲“0x00000000”〜“0x00000fff”を物理アドレス範囲“0x00001000”〜“0x00001fff”に変換している。また、MMU901#0は、レコード906を参照して、論理アドレス範囲“0x00001000”〜“0x00001fff”を物理アドレス範囲“0x3fff0000”〜“0x3fff0fff”に変換している。
プロセスBの移動要求が行われると、通信システム100は、物理アドレス空間904#0のうち、プロセスBが使用している領域を、物理アドレス空間904#1にコピーする。具体的に、通信システム100は、物理アドレス空間904#0内の領域“0x00001000”〜“0x00001fff”を、物理アドレス空間904#1内の領域“0x10000000”〜“0x10000fff”にコピーする。同様に、通信システム100は、物理アドレス空間904#0内の領域“0x3fff0000”〜“0x3fff0fff”を、物理アドレス空間904#1内の領域“0x10003000”〜“0x10003fff”にコピーする。
データのコピー後、通信システム100は、変換テーブル902を再構築する。具体的には、通信装置101#1は、OS203#1の機能によって、変換テーブル902#0のレコード905、レコード906を参照元として変換テーブル902#1にレコード907、レコード908を生成する。
続けて、通信装置101#1は、レコード907の物理アドレスフィールドを、“0x00001000”〜“0x00001fff”から“0x10000000”〜“0x10000fff”に書き換える。同様に、通信装置101#1は、レコード908の物理アドレスフィールドを、“0x3fff0000”〜“0x3fff0fff”から“0x10003000”〜“0x10003fff”に書き換える。なお、コピー終了後、レコード905、レコード906は消去されてもよい。
このように、図9に示した移動方法では、物理アドレス空間904に格納されているプロセスのデータをコピーすることで、プロセスの移動を行う。下記説明において、図9で説明した移動方法を第1の移動方法と呼称する。
図10は、通信装置101間でのスレッドの移動方法を示す説明図である。図10では、通信装置101#0が実行するプロセスB内のスレッドB−1を、通信装置101#1に移動させる場合を想定する。プロセスBの論理アドレス空間903、変換テーブル902#0、物理アドレス空間904#0の状態は、図9におけるプロセスBの移動前の状態と等しい。
スレッドB−1の移動要求が行われると、通信システム100は、物理アドレス空間904とは別のアドレス空間となる、通信用空間1001を確保する。具体的には、通信装置101#0は、領域”0x40000000”〜”0x7fffffff”を通信用空間1001#0として確保する。同様に、通信装置101#1も、領域”0x40000000”〜”0x7fffffff”を通信用空間1001#1として確保する。なお、図10の例では通信用空間1001の領域が通信装置101#0と通信装置101#1とで一致しているが、アドレスが異なる領域を確保してもよい。
確保された通信用空間1001は、他の通信装置101の物理アドレス空間904と関連付けられる。たとえば、通信用空間1001#1のアドレス”0x40000000”は、物理アドレス空間904#0の“0x00000000”に関連付けられる。
そして、通信システム100は、変換テーブル902を再構築する。具体的には、通信装置101#1は、OS203#1の機能によって、変換テーブル902#0のレコード905、レコード906を参照元として変換テーブル902#1にレコード1002、レコード1003を生成する。続けて、通信装置101#1は、レコード1002、レコード1003の物理アドレスフィールドを、関連付けられた通信用空間1001のアドレスに書き換える。
具体的には、通信装置101#1は、レコード1002の物理アドレスフィールドを、“0x00001000”〜“0x00001fff”から“0x40001000”〜“0x40001fff”に書き換える。同様に、通信装置101#1は、レコード1003の物理アドレスフィールドを、“0x3fff0000”〜“0x3fff0fff”から“0x40002000”〜“0x40002fff”に書き換える。書き換え後、通信システム100は、CPU102#0に割り当てられていたスレッドB−1を、CPU102#1に割り当てる。これにより、スレッドB−1の移動が完了する。
移動完了後、CPU102#1が、スレッドB−1の実行中にMMU901#0の変換によって通信用空間1001#1にアクセス要求があった場合に、通信路を介して、関連付けられた物理アドレス空間904#0にアクセスする。たとえば、CPU102#1が、論理アドレス“0x00000010”に対する読み込み要求を実行した場合、MMU901#1は、通信用空間1001#1のアドレス“0x40000010”に変換する。続けて、通信装置101#1は、有線通信I/F110を経由して、通信用空間1001#1のアドレス“0x40000010”に対応する物理アドレス空間904#0のアドレス“0x00000010”のデータを取得する。
このように、図10に示した移動方法では、通信用空間1001を確保し、通信用空間1001にアクセスされた場合、関連付けられた他の通信装置101の物理アドレス空間904に格納されているデータにアクセスすることで、スレッドの移動を行う。下記説明において、図10で説明した移動方法を第2の移動方法と呼称する。第2の移動方法では、特定の通信装置101のRAM104のデータを、特定の通信装置101と他の通信装置101で共有する状態となる。
なお、図10で示した第2の移動方法について、アクセスカウンタ113のカウント対象となるメモリは、RAM104等の物理メモリの他に、通信用空間1001も含む。具体的には、CPU102#1が通信用空間1001#1にアクセスした場合、CPU102#1は、アクセスカウンタ113#1をインクリメントする。
第1の移動方法と第2の移動方法を比較すると、オーバーヘッドについては、第1の移動方法は、データのコピーに時間がかかることから、オーバーヘッドは大きい。第2の移動方法は、通信用空間1001を確保し、変換テーブル902に書き換えれば済むため、オーバーヘッドは小さい。また、第1の移動方法と第2の移動方法の通信量について、第1の移動方法は、1度データコピーを行うと通信量は小さくなる。第2の移動方法は、アクセス要求のたびに通信が発生するため、通信量は大きくなる。
図11は、第1負荷分散における移動対象プロセスの選択例を示す説明図である。図11に示す通信システム100は、無線通信によって接続されており、第1負荷分散を行っている。具体的には、通信装置101#0は、プロセスA、プロセスBを実行しており、通信装置101#1は、プロセスCを実行している。プロセスA〜プロセスCのメモリ使用量は、プロセスA:300[Kバイト]、プロセスB:2[Mバイト]、プロセスC:1[Mバイト]である。
また、CPU102#0にかけられる最大の負荷量を100[%]とした場合に、CPU102#0の負荷量は、70[%]であり、通信装置101#0のバッテリ残量は、40[%]である。同様に、CPU102#1の負荷量は、30[%]であり、通信装置101#0のバッテリ残量は、60[%]である。また、無線通信の通信速度は、10[Mbps]である。
なお、CPUの負荷量の算出方法としては、CPUの単位時間あたりの実行時間の比率を負荷量として算出する。また、別の算出方法としては、CPUに割り当てられている処理数に基づいて、算出してもよい。または、CPUに割り当てられている処理に付与されている処理量情報の合計を、CPUの負荷量として算出してもよい。なお、処理量情報は、事前に各処理を計測しておく。
負荷バランスの目標値は、通信装置101間のバッテリ残量に基づいて算出してもよい。たとえば、通信システム100は、通信装置101間のバッテリ残量が等しい場合、または、バッテリ残量を考慮しない場合、負荷バランスの目標値を1対1に設定する。具体的には、通信装置101#0の負荷量が70%、通信装置101#1の負荷量が30%であれば、通信システム100は、負荷バランスの目標値を50%:50%に設定する。また、通信装置101間のバッテリ残量が6対4の比であれば、通信システム100は、負荷バランスも6対4の比となるように負荷バランスの目標値を設定する。通信装置101ごとに基本となる消費電力が異なる場合、通信システム100は、消費電力量比とバッテリ残量比から負荷バランスの目標値を設定する。
図11の例では、通信装置101#0のバッテリ残量が40[%]、通信装置101#1のバッテリ残量が60[%]であるため、負荷バランスの目標値を通信装置101#0=40[%]、通信装置101#1=60[%]に設定する。負荷量の大きい通信装置101#0の目標負荷量との差分は、70[%]−40[%]=30[%]となる。
続けて、通信装置101#0は、実行中のプロセス群から移動対象プロセスを選択する。移動対象プロセスは、移動させることにより通信装置101#0の負荷バランスが負荷バランスの目標値に近づき、かつ、目標負荷量との差分に対して移動コストが充分に小さい、といった条件を満たすプロセスとなる。CPUの負荷量は、CPUの単位時間あたりの実行時間の比率であるため、たとえば、通信装置101#0は、負荷量の監視間隔に目標負荷量との差分をかけて得られる時間を移動時間の許容閾値として算出し、移動時間の許容閾値と移動コストを比較する。移動コストが小さければ移動にかける時間よりも負荷改善による稼働率向上の効果の方が大きくなる。
図11の例では、負荷量の監視間隔が、1[秒]であると想定すると、移動時間の許容閾値は、1[秒]*0.3=300[ミリ秒]となる。また、移動コストが小さくなるプロセスは、(1)式よりメモリ使用量の小さいプロセスであるから、図11の例ではプロセスAが移動コストの最も小さいプロセスになる。プロセスAの移動コストは、(1)式より、300[Kバイト]/10[Mbps]=240[ミリ秒]となる。結果、300≧240となるため、通信装置101#0は、プロセスAを移動対象プロセスに選択する。
図12は、第2負荷分散における移動対象スレッドの選択例を示す説明図である。図12に示す通信システム100は、有線通信I/F110#0、有線通信I/F110#1によって接続されており、第2負荷分散を行っている。具体的には、通信装置101#0は、プロセスA、プロセスB内のスレッドB−1、スレッドB−2を実行しており、通信装置101#1は、プロセスB内のスレッドB−3と、プロセスCを実行している。
また、プロセスA〜プロセスCのメモリ使用量は、プロセスA:300[Kバイト]、プロセスB:2[Mバイト]、プロセスC:1[Mバイト]である。また、スレッドのアクセス頻度については、負荷量の監視間隔にメモリにアクセスした回数とする。具体的には、プロセスA内のスレッドA−1:8*10^5[回]、スレッドA−2:6*10^6[回]、スレッドB−1:8*10^6[回]、スレッドB−2:3*10^5[回]である。同様に、スレッドB−3:4*10^6[回]、スレッドC−1:2*10^5[回]、スレッドC−2:2*10^6[回]である。
また、CPU102#0の負荷量は、65[%]であり、通信装置101#0のバッテリ残量は、40[%]である。同様に、CPU102#1の負荷量は、35[%]であり、通信装置101#0のバッテリ残量は、60[%]である。また、有線通信の通信速度は、100[Mbps]である。また、通信装置101#0のバッテリ残量が40[%]、通信装置101#1のバッテリ残量が60[%]であるため、負荷バランスの目標値を通信装置101#0=40[%]、通信装置101#1=60[%]に設定する。負荷量の大きい通信装置101#0の目標負荷量との差分は、65[%]−40[%]=25[%]となる。
続けて、通信装置101#0は、実行中のスレッド群の中から移動対象スレッドを選択する。移動対象スレッドは、移動による負荷の増加も考慮して負荷バランスが目標値に近づくといった条件を満たすスレッドとなる。スレッドを通信装置101#0から通信装置101#1に移動すると、通信に伴う時間が増加する。したがって、通信装置101#0は、負荷量の監視間隔に目標負荷量との差分をかけて得られる時間を移動時間の許容閾値として算出し、移動時間の許容閾値と、スレッドの処理時間およびスレッドの移動による通信増加時間の合計値である移動コストと、を比較する。移動コストが小さければ移動にかける時間よりも負荷改善による稼働率向上の効果の方が大きくなる。
また、スレッドの移動による通信増加時間の算出方法としては、下記(2)式で算出することができる。
通信増加時間=スレッドのアクセス頻度*1回のアクセスのデータ量/通信速度 …(2)
図12の例にて、負荷量の監視間隔が、1[秒]であると想定すると、移動時間の許容閾値は、1[秒]*0.25=250[ミリ秒]となる。また、通信増加時間が小さくなるスレッドは、(2)式より、スレッドのアクセス頻度が低いスレッドであるから、図12の例では、スレッドB−2が通信増加時間の最も小さいスレッドになる。スレッドB−2の処理時間に関しては、スレッドB−2の負荷量が10[%]であることから、CPU102#0は、スレッドB−2を負荷量の監視間隔の10[%]となる1[秒]*0.1=100[ミリ秒]実行していることになる。
スレッドB−2の移動による通信増加時間に関しては、1回のアクセスのデータ量を32[ビット]と想定すると、(2)式より、3*10^5[回]*32/100[Mbps]=96[ミリ秒]と算出される。以上より、スレッドB−2の移動コストは、100[ミリ秒]+96[ミリ秒]=196[ミリ秒]となる。移動時間の許容閾値と移動コストを比較すると、250≧196となるため、通信装置101#0は、スレッドB−2を移動対象スレッドに選択する。
なお、負荷量の大きい通信装置101の実行するスレッド群に、他の通信装置101から移動してきたスレッドが存在する場合、通信装置101は、移動してきたスレッドのうち、アクセス頻度が最も高いスレッドを移動対象スレッドとして選択してもよい。移動してきたスレッドは通信に伴う負荷が常に発生しているため、移動してきたスレッドを移動元の通信装置101に戻すことで、通信装置101間の通信量が減少し、負荷量の大きい通信装置101の負荷量が減少する。さらに、通信装置101間の通信による負荷の分、通信システム100全体の負荷量も減少することになる。
図13は、通信システム100の機能を示すブロック図である。図13では、OS203の機能と、負荷分散設定機能とを含めた機能を図示している。また、図13では、通信装置101#0の機能を図示しているが、通信装置101#1も通信装置101#0と等しい機能を含む。
通信装置101#0は、メモリ管理部1301、アクセス監視部1302、タスク管理部1303、負荷監視部1304、通信状態監視部1305、負荷分散設定部1306を含む。また、RAM104#0は、プロセス用データ領域1307と、OS用データ領域1308を格納している。また、タスク管理部1303内には、プロセス管理部1309、スレッド管理部1310が含まれる。負荷監視部1304内には、決定部401が含まれる。負荷分散設定部1306内には、選択部402、設定部403、プロセス移動部404、スレッド移動部405が含まれる。また、プロセス用データ領域1307内には、プロセス管理情報1311とスレッド管理情報1312とが含まれる。
メモリ管理部1301は、プロセスが使用する領域を管理する機能を有する。たとえば、メモリ管理部1301は、新たにプロセスが生成された場合に、プロセス用データ領域1307をRAM104#0上に確保する。また、メモリ管理部1301は、プロセスが確保したメモリサイズをメモリ使用量としてプロセス管理情報1311に設定する。
アクセス監視部1302は、CPU102#0が搭載しているアクセスカウンタ113#0を参照してスレッドのアクセス頻度を更新する。たとえば、アクセス監視部1302は、タイマー107#0からの通知を受けた場合、アクセスカウンタ113#0を参照して、CPU102#0が現在稼働中のスレッドに対応するスレッド管理情報1312のアクセス頻度を更新する。
タスク管理部1303は、プロセスまたはスレッドをCPU102#0に割り付けて実行させるという機能を有する。また、タスク管理部1303はCPU102#0の稼働率と、稼働中のそれぞれのスレッドの実行時間の割合から、通信装置101#0の負荷量と、それぞれのスレッドの負荷量を算出する。算出後、タスク管理部1303は、通信装置101#0の負荷量をRAM104のOS用データ領域1308内に、スレッドの負荷量をスレッド管理情報1312内に記録する。さらに、タスク管理部1303は、自身の負荷状況に応じて、たとえば負荷量が低ければ周波数と電圧を落とし、負荷量が高ければ周波数と電圧を上げるといった操作を電源管理機構109#0を制御して行う。
また、タスク管理部1303のプロセス管理部1309は、ROM103からプロセス用データ領域1307にプロセスの実行イメージを展開する。また、プロセス管理部1309は、プロセス用データ領域1307内にプロセス管理情報1311を生成する。タスク管理部1303のスレッド管理部1310は、スレッドが生成された場合に、プロセス用データ領域1307内にスレッド管理情報1312を生成する。
負荷監視部1304は、CPU102#0の負荷状況を監視する機能を有する。具体的には、負荷監視部1304は、自身の通信装置101の負荷量と他の通信装置101の負荷量とを取得して、自身の負荷量と最小負荷の通信装置101の負荷量差が所定値以上であれば、決定部401により負荷分散の実行を決定する。具体的に、決定部401は、負荷分散設定部1306に負荷分散を行うように指示を出す。または、負荷監視部1304は、自身の負荷量とバッテリ残量に基づいて、目標となる負荷量を設定し、負荷量差が所定値以上であるときに、負荷分散設定部1306に負荷分散の設定を行うように指示を出してもよい。通信装置101#0の負荷量の取得に関して、負荷監視部1304は、タスク管理部1303より取得する。
通信状態監視部1305は、現在の通信状態を監視する機能を有する。具体的には、通信状態監視部1305は、有線通信I/F110#0から有線通信の切断または接続の通知を受け、負荷分散設定部1306に対して、現在の通信状態に適応した負荷分散の設定を行うように指示を出す。
負荷分散設定部1306は、負荷分散の設定を行う機能を有する。具体的には、負荷分散設定部1306は、選択部402によって移動対象スレッドまたは移動対象プロセスを選択し、設定部403によって負荷分散の設定をする。移動対象プロセスが選択された場合、負荷分散設定部1306は、プロセス移動部404によって移動対象プロセスを移動することで、通信システム100の負荷分散を第1負荷分散に設定する。移動対象スレッドが選択された場合、負荷分散設定部1306は、スレッド移動部405によって移動対象スレッドを移動することで、通信システム100の負荷分散を第2負荷分散に設定する。
プロセス用データ領域1307は、プロセスが実行中に使用するデータを記憶する領域である。プロセス用データ領域1307には、プロセス管理情報1311と、プロセスに含まれるスレッドの個数に等しい数分のスレッド管理情報1312とが含まれる。プロセス用データ領域1307の記憶内容については、図14にて後述する。OS用データ領域1308は、通信装置101の状態を記憶する領域である。OS用データ領域1308についても、図14にて後述する。
図14は、プロセス用データ領域1307とOS用データ領域1308の記憶内容の一例を示す説明図である。プロセス用データ領域1307は、プロセス管理情報1311とスレッド管理情報1312とプログラムコード1401とデータ1402とを含む。
プロセス管理情報1311は、プロセスID、割当CPU、メモリ使用量、変換テーブル、という4つのフィールドを含む。プロセスIDフィールドには、該当のプロセスを一意に特定する情報が格納される。たとえば、プロセスIDフィールドは、プロセスの名称が格納されてもよいし、プロセス用データ領域1307が格納されたアドレスを示すポインタなどが格納されてもよい。割当CPUフィールドには、該当のプロセスが割り当てられたCPUのIDが格納される。メモリ使用量フィールドには、RAM104のうち、該当のプロセスが確保しているメモリサイズが格納される。変換テーブルフィールドには、MMU901にてアクセスされる変換テーブル902へのポインタが格納される。
たとえば、図12のプロセスBにおけるプロセス管理情報1311の各フィールドの格納値を例とすると、プロセスIDフィールドには、“プロセスB”というIDが格納される。割当CPUフィールドには、“CPU102#0”というIDが格納される。メモリ使用量フィールドには、2[Mバイト]という数値が格納される。変換テーブルフィールドには、変換テーブル902#0へのポインタが格納されている。
スレッド管理情報1312は、スレッドID、割当CPU、アクセス頻度、優先度という4つのフィールドを含む。スレッドIDフィールドには、該当のスレッドを一意に特定する情報が格納される。割当CPUフィールドには、該当のスレッドが割り当てられたCPUのIDが格納される。アクセス頻度フィールドには、該当のスレッドのRAM104へのアクセス頻度が格納される。優先度フィールドには、該当のスレッドの優先度が格納される。
たとえば、図12のスレッドB−2におけるスレッド管理情報1312の各フィールドの格納値を例とすると、スレッドIDフィールドには、“スレッドB−3”というIDが格納される。割当CPUフィールドには、“CPU102#1”というIDが格納される。アクセス頻度フィールドは、4*10^6[回]という数値が格納される。優先度フィールドは、“低”という情報が格納される。
また、プログラムコード1401は、該当のプロセスのプログラムソースを機械語に変換したデータである。なお、プログラムコード1401は図9で説明したコードセグメントに格納されている。データ1402は、該当のプロセス、または該当のプロセスに属するスレッドが使用しているデータである。なお、データ1402は、図9で説明したデータセグメント、ヒープセグメント、スタックセグメントに格納されている。
OS用データ領域1308は、プロセスリスト1403とスレッドリスト1404と負荷量1405と通信状態1406とを含む。プロセスリスト1403は、自身のCPU102で実行しているプロセスのリストである。スレッドリスト1404は、自身のCPU102で実行しているスレッドのリストである。負荷量1405は、自身の通信装置101の負荷量である。通信状態1406は、自身の通信装置101と他の通信装置101との通信状態の情報が格納される。
たとえば、図12の通信装置101#0におけるOS用データ領域1308の各フィールドの値を例とすると、プロセスリストフィールドには、プロセスA、プロセスBという2つのプロセスが含まれるリストが格納される。スレッドリストフィールドには、スレッドA−1、スレッドA−2、スレッドB−1、スレッドB−2という4つのスレッドが含まれるリストが格納される。負荷量フィールドには、65[%]という数値が格納されている。通信状態フィールドには、有線接続状態を示す情報が格納されている。
通信システム100は、図13で示した機能部と図14で示したデータを用いて負荷分散の設定を行う。以下、図15〜図22では、図13で示した機能部の処理のフローチャートを記述する。また、図15〜図22のフローチャートを実行するCPUは、通信装置101#0内のCPU102#0を想定して説明するが、他の通信装置101内のCPU102も等しい処理を行う。
図15は、負荷監視部1304の処理を示すフローチャートである。CPU102#0は、タイマー107#0からの通知、または有線接続通知を受信する(ステップS1501)。通知の受信後、CPU102#0は、タスク管理部1303から、自身の通信装置101の負荷量を取得する(ステップS1502)。負荷量の取得後、CPU102#0は、電源管理機構109から自身の通信装置101のバッテリ残量を取得する(ステップS1503)。バッテリ残量の取得後、CPU102#0は、他の通信装置101と通信して、他の通信装置101の負荷量とバッテリ残量とを取得する(ステップS1504)。
他の通信装置101の負荷量とバッテリ残量とを取得後、CPU102#0は、自身の通信装置101の目標負荷量を算出する(ステップS1505)。なお、バッテリ残量に基づいた目標負荷量の算出方法として、CPU102#0は、たとえば、下記(3)式を実行する。
目標負荷量=(自身の通信装置101の負荷量+他の通信装置101の負荷量)*自身の通信装置101のバッテリ残量/(自身の通信装置101のバッテリ残量+他の通信装置101のバッテリ残量) …(3)
目標負荷量の算出後、CPU102#0は、負荷量−目標負荷量が所定値以上か否かを判断する(ステップS1506)。負荷量−目標負荷量が所定値以上の場合(ステップS1506:Yes)、CPU102#0は、負荷量−目標負荷量を目標負荷量との差分として記録する(ステップS1507)。記録後、CPU102#0は、負荷分散設定部1306に負荷分散設定の開始を指示し(ステップS1508)、負荷監視部1304の処理を終了する。負荷量−目標負荷量が所定値より小さい場合(ステップS1506:No)、CPU102#0は、負荷監視部1304の処理を終了する。
図16は、アクセス監視部1302の処理を示すフローチャートである。CPU102#0は、タイマー107#0からの通知を受信し(ステップS1601)、CPU102#0のアクセスカウンタ113#0の値を取得する(ステップS1602)。値の取得後、CPU102#0は、アクセス頻度を算出する(ステップS1603)。アクセス頻度の算出方法として、たとえば、CPU102#0は、アクセス頻度=(アクセスカウンタ113の値/タイマー107の通知間隔)を実行する。
アクセス頻度の算出後、CPU102#0は、アクセスカウンタ113#0をリセットする(ステップS1604)。リセット後、CPU102#0は、タスク管理部1303から現在稼働中のスレッドを取得する(ステップS1605)。取得後、CPU102#0は、取得したスレッドに対応するスレッド管理情報1312内のアクセス頻度を更新する(ステップS1606)。
図17は、通信状態監視部1305の処理を示すフローチャートである。CPU102#0は、有線切断通知、または有線接続通知を受信したかを判断する(ステップS1701)。通知を受けていない場合(ステップS1701:通知なし)、CPU102#0は、通知を受信するまで待機し(ステップS1702)、再びステップS1701の処理に移行する。
有線切断通知を受信した場合(ステップS1701:有線切断通知を受信)、CPU102#0は、無線接続状態であることを記録する(ステップS1703)。記録後、CPU102#0は、負荷分散設定部1306に無線接続状態への変更を通知し(ステップS1704)、通信状態監視部1305の処理を終了する。なお、無線接続状態への変更を受けた負荷分散設定部1306は、第2負荷分散から第1負荷分散への切替処理を実行する。切替処理の詳細は、図22にて後述する。
有線接続通知を受信した場合(ステップS1701:有線接続通知を受信)、CPU102#0は、有線接続状態であることを記録し(ステップS1705)、通信状態監視部1305の処理を終了する。
図18は、負荷分散設定部1306による負荷分散設定処理を示すフローチャートである。CPU102#0は、負荷分散設定の開始指示を受信し、(ステップS1801)、通信状態監視部1305に通信状態を問い合わせる(ステップS1802)。問い合わせ後、CPU102#0は、通信状態が有線接続状態か否かを判断する(ステップS1803)。有線接続状態である場合(ステップS1803:Yes)、CPU102#0は、移動対象スレッド選択処理を実行し(ステップS1804)、負荷分散設定処理を終了する。なお、移動対象スレッド選択・移動処理の詳細は、図19、図20にて後述する。無線接続状態である場合(ステップS1803:No)、CPU102#0は、移動対象プロセス選択・移動処理を実行する(ステップS1805)。移動対象プロセス選択・移動処理の詳細は、図21にて後述する。
図19は、負荷分散設定部1306による移動対象スレッド選択・移動処理を示すフローチャート(その1)である。図19で示すフローチャートでは、過去に移動してきたスレッドを検索し、過去に移動してきたスレッドが存在する場合に、移動対象スレッドとして選択して移動を行う処理を示している。
CPU102#0は、タスク管理部1303へ、自CPUに割り当てられている全スレッドを問い合わせる(ステップS1901)。なお、タスク管理部1303は、自CPUに割り当てられている全スレッドの情報が記載されたスレッドリスト1404を参照して、問い合わせに応答する。
問い合わせた後、CPU102#0は、自CPUに割り当てられているスレッドから、未選択のスレッドを選択する(ステップS1902)。選択後、CPU102#0は、選択可能なスレッドが存在したか否かを判断する(ステップS1903)。選択可能なスレッドが存在した場合(ステップS1903:Yes)、CPU102#0は、選択されたスレッドが属するプロセス管理情報1311を取得する(ステップS1904)。取得後、CPU102#0は、選択されたスレッドが属するプロセスと選択されたスレッドの割当CPUを比較する(ステップS1905)。
比較結果から、CPU102#0は、割当CPUが一致したかを判断する(ステップS1906)。割当CPUが一致しなかった場合(ステップS1906:No)、CPU102#0は、選択されたスレッドを移動してきたスレッドとして記録する(ステップS1907)。記録後、CPU102#0は、ステップS1902の処理に移行する。また、割当CPUが一致した場合(ステップS1906:Yes)、CPU102#0は、ステップS1902の処理に移行する。
全スレッドを選択し終え、選択可能なスレッドが存在しなかった場合(ステップS1903:No)、CPU102#0は、移動してきたスレッドが存在するかを判断する(ステップS1908)。移動してきたスレッドが存在する場合(ステップS1908:Yes)、CPU102#0は、負荷監視部1304から目標負荷量との差分を取得する(ステップS1909)。取得後、CPU102#0は、目標負荷量との差分から負荷増加時間の許容閾値を算出する(ステップS1910)。
算出後、CPU102#0は、移動してきたスレッドの中からアクセス頻度が最も高いスレッドを選択する(ステップS1911)。選択後、CPU102#0は、タスク管理部1303から選択されたスレッドの負荷量から選択されたスレッドの負荷量を取得する(ステップS1912)。取得後、CPU102#0は、取得した負荷量から選択されたスレッドの処理時間を算出する(ステップS1913)。算出後、CPU102#0は、移動コストをスレッドの処理時間に設定し(ステップS1914)、負荷増加時間の許容閾値が移動コスト以上か否かを判断する(ステップS1915)。
負荷増加時間の許容閾値が移動コスト以上である場合(ステップS1915:Yes)、CPU102#0は、選択されたスレッドを移動対象スレッドに設定する(ステップS1918)。設定後、CPU102#0は、スレッド移動部405に移動対象スレッドの移動を指示し(ステップS1919)、移動対象スレッド選択・移動処理を終了する。
なお、移動対象スレッドの移動方法については、過去に第2の移動方法により移動してきたスレッドを移動元のCPU102に戻す方法となる。このとき、移動元のCPU102には、移動してきたスレッドが属するプロセスの変換テーブル902が存在するため、変換テーブル902に関する処理は特に行わなくてよい。もし、移動してきたスレッドを戻すことにより、移動先のCPU102から移動してきたスレッドが属するプロセス内のスレッドが全く存在しなくなる場合、移動先のRAM104に存在するプロセスに対応する変換テーブル902を消去してもよい。
負荷増加時間の許容閾値が移動コストより小さい場合(ステップS1915:No)、CPU102#0は、移動してきたスレッドの中から次にアクセス頻度の高いスレッドを選択する(ステップS1916)。選択後、CPU102#0は、選択可能なスレッドが存在したかを判断する(ステップS1917)。選択可能なスレッドが存在した場合(ステップS1917:Yes)、CPU102#0は、ステップS1912の処理に移行する。選択可能なスレッドが存在しなかった場合(ステップS1917:No)、または、移動してきたスレッドが存在しない場合(ステップS1908:No)、CPU102#0は、図20で示すフローチャートに移行する。
図20は、負荷分散設定部1306による移動対象スレッド選択・移動処理を示すフローチャート(その2)である。図20で示すフローチャートでは、過去に移動してきたスレッドが無い場合、現在実行中のスレッドの中から、移動対象スレッドを選択し、移動する処理を示している。
CPU102#0は、負荷監視部1304から目標負荷量との差分を取得する(ステップS2001)。取得後、CPU102#0は、目標負荷量との差分から負荷増加時間の許容閾値を算出する(ステップS2002)。算出後、CPU102#0は、自CPUに割り当てられるスレッドの中からアクセス頻度の最も低いスレッドを選択する(ステップS2003)。選択後、CPU102#0は、選択されたスレッドの移動による通信増加時間を算出する(ステップS2004)。なお、通信増加時間の算出方法は、(2)式で算出することができる。
算出後、CPU102#0は、タスク管理部1303から選択されたスレッドの負荷量を取得する(ステップS2005)。取得後、CPU102#0は、取得した負荷量から選択されたスレッドの処理時間を算出する(ステップS2006)。算出後、CPU102#0は、移動コストを、選択されたスレッドの処理時間および算出した通信増加時間の合計値に設定する(ステップS2007)。
移動コストを設定後、CPU102#0は、負荷増加時間の許容閾値が移動コスト以上であるかを判断する(ステップS2008)。負荷増加時間の許容閾値が移動コスト以上である場合(ステップS2008:Yes)、CPU102#0は、選択されたスレッドを移動対象スレッドに設定する(ステップS2009)。続けて、CPU102#0は、スレッド移動部405に移動対象スレッドの移動を指示し(ステップS2010)、移動対象スレッド選択・移動処理を終了する。
なお、移動対象スレッドの移動方法については、第2の移動方法によって移動先のCPU102に移動する。また、移動対象スレッドを移動する際、CPU102#0は、移動対象スレッドと同じプロセスに属する残余のスレッドの割当CPUを確認してもよい。確認した結果、残余のスレッドの割当CPUが全て移動先のCPU102となっていた場合、CPU102#0は、第1の移動方法によって、移動対象スレッドが属するプロセスを、移動先のCPU102に移動してもよい。
負荷増加時間の許容閾値が移動コストより小さい場合(ステップS2008:No)、CPU102#0は、次にアクセス頻度の低いスレッドを選択する(ステップS2011)。CPU102#0は、選択可能なスレッドが存在したかを判断する(ステップS2012)。選択可能なスレッドが存在した場合(ステップS2012:Yes)、CPU102#0は、ステップS2004の処理に移行する。
自CPUに割り当てられている全てのスレッドを選択し終え、選択可能なスレッドが存在しなかった場合(ステップS2012:No)、CPU102#0は、移動対象プロセス選択・移動処理を実行し(ステップS2013)、移動対象スレッド選択・移動処理を終了する。なお、ステップS2012:Noのルートでは、有線接続状態において、移動を行っても負荷を減少することができるスレッドが存在しなかったことを示している。
図21は、負荷分散設定部1306による移動対象プロセス選択・移動処理を示すフローチャートである。図21に示すフローチャートは、移動対象プロセス選択・移動処理の有線接続状態で適切なスレッドが見つからなかった場合、または、無線接続状態の場合に実行される。
CPU102#0は、負荷監視部1304から目標負荷量との差分を取得する(ステップS2101)。取得後、CPU102#0は、目標負荷量との差分から移動時間の許容閾値を算出する(ステップS2102)。算出後、CPU102#0は、タスク管理部1303から自CPUに割り当てられているプロセスを取得する(ステップS2103)。取得後、CPU102#0は、メモリ使用量が最も小さなプロセスを選択する(ステップS2104)。
選択後、CPU102#0は、タスク管理部1303から選択されたプロセスに属する全スレッドの負荷量を取得する(ステップS2105)。取得後、CPU102#0は、全スレッドの負荷量を足したプロセスの総負荷量を算出する(ステップS2106)。算出後、CPU102#0は、目標負荷量との差分がプロセスの総負荷量以上か否かを判断する(ステップS2107)。目標負荷量との差分がプロセスの総負荷量以上である場合(ステップS2107:Yes)、CPU102#0は、メモリ使用量からプロセスの移動コストを算出する(ステップS2108)。なお、移動コストの算出方法は、(1)式で算出することができる。
算出後、CPU102#0は、移動時間の許容閾値が移動コスト以上か否かを判断する(ステップS2109)。移動時間の許容閾値が移動コスト以上である場合(ステップS2109:Yes)、CPU102#0は、選択されたプロセスを移動対象プロセスに設定する(ステップS2110)。設定後、CPU102#0は、プロセス移動部404に移動対象プロセスの移動を指示し(ステップS2111)、移動対象プロセス選択・移動処理を終了する。なお、移動対象プロセスの移動方法については、第1の移動方法によって移動対象プロセスを移動する。
目標負荷量との差分がプロセスの総負荷量より小さい場合(ステップS2107:No)、CPU102#0は、次にメモリ使用量が小さなプロセスを選択する(ステップS2112)。移動時間の許容閾値が移動コストより小さい場合も(ステップS2109:No)、CPU102#0は、ステップS2112の処理に移行する。CPU102#0は、選択可能なプロセスが存在したかを判断する(ステップS2113)。選択可能なプロセスが存在した場合(ステップS2113:Yes)、CPU102#0は、ステップS2105の処理に移行する。自CPUに割り当てられているプロセスを全て選択し終え、選択可能なプロセスが存在しなかった場合(ステップS2113:No)、CPU102#0は、移動対象プロセス選択・移動処理を終了する。
図22は、負荷分散設定部1306による、有線通信から無線通信に遷移した際の第2負荷分散から第1負荷分散への切替処理を示すフローチャートである。CPU102#0は、無線接続状態への変更通知を受信する(ステップS2201)。受信を契機に、CPU102#0は、タスク管理部1303へ自CPUに割り当てられている全スレッドを問い合わせる(ステップS2202)。問い合わせ後、CPU102#0は、自CPUに割り当てられたスレッドから未選択のスレッドを選択する(ステップS2203)。選択後、CPU102#0は、選択可能なスレッドが存在したかを判断する(ステップS2204)。
選択可能なスレッドが存在した場合(ステップS2204:Yes)、CPU102#0は、選択されたスレッドが属するプロセス管理情報1311を取得する(ステップS2205)。取得後、選択されたスレッドが属するプロセスと選択されたスレッドの割当CPUを比較する(ステップS2206)。比較結果から、CPU102#0は、割当CPUが一致したかを判断する(ステップS2207)。割当CPUが一致しなかった場合(ステップS2207:No)、CPU102#0は、選択されたスレッドを移動対象スレッドに設定する(ステップS2208)。
設定後、CPU102#0は、スレッド移動部405に、移動対象スレッドを移動対象スレッドが属するプロセスと同じCPUに移動するように指示する(ステップS2209)。指示後、CPU102#0は、ステップS2203の処理に移行する。割当CPUが一致した場合(ステップS2207:Yes)、CPU102#0は、ステップS2203の処理に移行する。自CPUに割り当てているスレッドを全て選択し終え、選択可能なスレッドが存在しなかった場合(ステップS2204:No)、CPU102#0は、切替処理を終了する。
図15〜図22のフローチャートでは、通信装置101が2つである場合を想定していた。もし通信装置101が3つ以上ある場合でも、負荷分散設定は1対1の通信装置101間で行われる。このとき、図19と図22でのフローチャートにて、移動してきたスレッドを戻す判定を、プロセスの割当先CPUをみて現在対象としている通信装置101から移動してきたスレッドに限定するように変更すれば対応することができる。具体的には、ステップS1901、ステップS2202の処理にて、「全スレッドを問い合わせる」処理を、「プロセスの割当CPUが負荷分散設定を行っているCPUとなるスレッドを問い合わせる」処理に置き換える。
また、通信装置101が3つ以上ある場合の負荷監視部1304は、後述する図23のように、複数ある通信装置101から負荷分散設定を行う通信装置101を決定する処理が追加される。図23で示すフローチャートでは、バッテリ残量が多い通信装置101を、優先的に負荷分散設定を行う対象とするような処理となっている。
図23は、通信装置101が3つ以上ある場合の負荷監視部1304の処理を示すフローチャートである。図23のフローチャートを実行するCPUは、通信装置101#0内のCPU102#0を想定して説明するが、他の通信装置101内のCPU102も等しい処理を行う。また、図23におけるステップS2301〜ステップS2303は、ステップS1501〜ステップS1503と等しい処理を行うため、説明を省略する。
ステップS2303の処理終了後、CPU102#0は、他の全通信装置101と通信して、他の通信装置101の負荷量とバッテリ残量を取得する(ステップS2304)。取得後、CPU102#0は、バッテリ残量が最も多いCPUを選択する(ステップS2305)。ステップS2305の処理にて選択されたCPUが、負荷分散設定を行う対象の通信装置101の候補となる。選択後、CPU102#0は、自CPUの目標負荷量を算出する(ステップS2306)。算出後、CPU102#0は、負荷量−目標負荷量が所定値以上か否かを判断する(ステップS2307)。
負荷量−目標負荷量が所定値以上である場合(ステップS2307:Yes)、CPU102#0は、選択された通信装置101が移動処理中かを判断する(ステップS2308)。移動処理中である場合(ステップS2308:Yes)、CPU102#0は、移動処理が終了するまで待機し(ステップS2309)、移動処理の完了後、ステップS2304の処理に移行する。移動が完了すると、負荷量が変化するため、CPU102#0は、ステップS2304を実行することで、再度移動による負荷量の変化を確認して、対象の通信装置101を決定することになる。
移動処理中でない場合(ステップS2308:No)、CPU102#0は、負荷量−目標負荷量の値を目標負荷量との差分として記録する(ステップS2310)。記録後、CPU102#0は、負荷分散設定部1306に負荷分散設定の開始を指示し(ステップS2311)、負荷監視部1304の処理を終了する。負荷量−目標負荷量が所定値より小さい場合(ステップS2307:No)、CPU102#0は、次にバッテリ残量が多い通信装置101を選択する(ステップS2312)。
選択後、CPU102#0は、選択可能な通信装置101が存在したかを判断する(ステップS2313)。選択可能な通信装置101が存在した場合(ステップS2313:Yes)、CPU102#0は、ステップS2306の処理に移行する。全ての通信装置101を選択し終え、選択可能な通信装置101が存在しなかった場合(ステップS2313:No)、CPU102#0は、負荷監視部1304の処理を終了する。
以上説明したように、実施の形態1にかかる通信装置、負荷分散方法、および記録媒体によれば、通信システムの通信状態に応じて、無線接続状態には第1負荷分散を行い、高速な有線接続状態には通信量が大きいが装置の負荷がより均等になる第2負荷分散を行う。これにより、通信システムは、通信状態に適した負荷分散を行うことで、処理効率を向上することができる。また、通信システム内の負荷バランスを均等に近づけることで、消費電力を削減することができる。
また、通信システムは、第1負荷分散において、第1通信装置のCPUが実行するプロセスのプログラムコードおよびデータを第2通信装置に転送してもよい。これにより、通信システムは、プロセス単位の移動が行えるため、プロセス単位での負荷分散を実現することができる。
また、通信システムは、第2負荷分散において、第1通信装置のCPUが実行するプロセスに含まれるスレッドを第2通信装置に転送してもよい。これにより、通信システムは、スレッド単位の移動が行えるため、スレッド単位での負荷分散を実現することができる。
また、通信システムは、第1通信装置の負荷量と第2通信装置の負荷量の差分が所定値以上であるときに、負荷分散を実行することを決定してもよい。これにより、通信システムは、負荷分散の実行が過剰に行われることを防ぐことができる。
また、通信システムは、タイマーからの通知に基づいて、負荷分散を実行するか否かを決定してもよい。これにより、通信システムは、周期的に負荷分散を実行でき、負荷分散の実行が過剰に行われることを防ぐことができる。
また、通信システムは、第1通信装置のメモリから第2通信装置のメモリへの転送時間に基づいて、第2通信装置に移動する移動対象プロセスを選択してもよい。プロセスの中には、負荷量が小さくても、メモリ使用量が大きいプロセスも存在しており、このようなプロセスが移動すると移動コストが大きくなり、通信システムの処理効率が低下する。したがって、メモリの転送時間に基づいて移動対象プロセスを決定することにより、通信システムは、移動に伴う負荷量を最小にしつつ、負荷バランスをよくし、消費電力を削減することができる。
また、通信システムは、第1通信装置のメモリへのアクセス頻度または過去のスレッドの転送履歴に基づいて、第2通信装置に移動する移動対象スレッドを選択してもよい。スレッド単位の負荷分散は通信量が増大するため、通信量が最小となる移動対象スレッドを選択することで、移動に伴う負荷量を最小にしつつ、負荷バランスをよくすることができる。
また、負荷量が大きくなった通信装置に過去に他の通信装置から移動してきたスレッドがある場合、移動してきたスレッドを戻すことで、通信装置間の通信量が減少する。したがって、通信システムは、過去に移動してきたスレッドを戻すことで、負荷量を減少しつつ、負荷バランスをよくすることができる。
(実施の形態2の概要説明)
実施の形態1にかかるプロセス移動部404では、プロセス用データ領域1307全体を、移動元のRAM104から移動先のRAM104にコピーしていた。しかしながら、プロセス用データ領域1307の一部のデータに関して、移動先のCPU102が、移動先の記憶領域に同じデータを保有している場合も存在する。この場合、プロセス用データ領域1307のうち、移動先のCPU102にて既に保有しているデータについてはコピーしないようにすることで、プロセス移動処理に伴う通信量を削減することができる。以下、図24〜図26を参照して、実施の形態2にかかるプロセス移動部404の動作について説明を行う。
実施の形態1にかかるプロセス移動部404では、プロセス用データ領域1307全体を、移動元のRAM104から移動先のRAM104にコピーしていた。しかしながら、プロセス用データ領域1307の一部のデータに関して、移動先のCPU102が、移動先の記憶領域に同じデータを保有している場合も存在する。この場合、プロセス用データ領域1307のうち、移動先のCPU102にて既に保有しているデータについてはコピーしないようにすることで、プロセス移動処理に伴う通信量を削減することができる。以下、図24〜図26を参照して、実施の形態2にかかるプロセス移動部404の動作について説明を行う。
また、実施の形態2にかかる通信システム100のハードウェアは、実施の形態1にかかる通信システム100のハードウェアと等しく、実施の形態2にかかる通信システム100の機能は、実施の形態1にかかる通信システム100の機能とほぼ等しい。以下、実施の形態1と異なる機能を有するプロセス移動部404の動作について説明を行う。
図24は、実施の形態2における移動対象プロセスの移動における動作を示す説明図である。図24で示す通信システム100は、通信装置101#0で実行中である移動対象プロセスを、通信装置101#1に移動させる場合を想定している。
ROM103#0には、移動対象プロセスの生成元となる実行オブジェクト2401#0が格納されている。実行オブジェクト2401#0には、プログラムコード2402#0、初期値データ2403#0、識別情報2404#0が格納されている。プログラムコード2402#0は、移動対象プロセスのプログラムソースを機械語に変換したデータである。初期値データ2403#0は、移動対象プロセス、または移動対象プロセスに属するスレッドが使用するデータの初期値である。また、図24では、実行オブジェクト2401#0と同一の実行オブジェクトである実行オブジェクト2401#1がROM103#1に格納されていることを想定する。
識別情報2404#0は、実行オブジェクト2401を一意に特定する情報である。移動対象プロセスのプログラムソースが設計者などによって変更された後、ビルドツールが再度ビルドし、実行オブジェクト2401が再生成された場合、識別情報2404#0は、プログラムソース変更前の値とは異なる値となるように設定される。これにより、識別情報2404が等しい実行オブジェクト2401は、内容が同一であると保証でき、実施の形態2の特徴である同じデータを保持しているか否かが判定できるようになる。
なお、識別情報2404の具体例としては、実行オブジェクト2401の名称と、ビルドするたびに値がインクリメントされるようなIDと、を結合したデータであってもよい。また別の具体例として、識別情報2404は、移動対象プロセスの名称と、プログラムコード2402および初期値データ2403から生成されるハッシュ値と、を結合したデータであってもよい。
なお、ハッシュ値が結合される例である場合に、通信装置101が、識別情報2404が存在しない実行オブジェクト2401を無線通信I/F111等によってダウンロードした状態を想定する。このとき、通信装置101は、ダウンロードした実行オブジェクト2401を参照してハッシュ値を生成し、識別情報2404を生成してもよい。これにより、識別情報2404が存在しなかった実行オブジェクト2401であっても、通信システム100は実施の形態2による通信量の削減を適用できるようになる。
通信装置101#0は、実行オブジェクト2401#0を移動対象プロセス起動時にロードし、RAM104#0にプロセス用データ領域2405#0を展開する。プロセス用データ領域2405#0には、プログラムコード2406#0、データ2407#0、識別情報2408#0が格納されている。なお、図24では図示していないが、図13、図14で説明したプロセス管理情報1311、スレッド管理情報1312も、プロセス用データ領域2405#0に存在する。
プログラムコード2406#0と識別情報2408#0は、それぞれ、プログラムコード2402#0と識別情報2404#0と同一の内容が展開されている。データ2407#0は、初期値データ2403#0と同一の内容が展開された後、移動対象プロセスに伴って内容の更新・追加が行われる。
移動対象プロセスの移動指示が発生した場合、プログラムコード2406#0については、移動対象プロセスの実行中に変更されることが無いため、通信装置101#0は、通信装置101#0にプログラムコード2406#0を送信しなくてよい。データ2407#0については、移動対象プロセスの実行中に変更されることがあるため、通信装置101#0は、データ2407#0と初期値データ2403#0との差分を生成する。差分生成後、通信装置101#0は、通信装置101#1に差分を送信する。
通信装置101#1に実行オブジェクト2401#0と等しい実行オブジェクト2401#1が存在するか否かの判断方法については、初めに、通信装置101#0が識別情報2408#0を通信装置101#1に通知する。次に、通信装置101#1が、識別情報2408#0と一致する識別情報2408#1を含む実行オブジェクト2401#1が存在するかを検索することで、等しい実行オブジェクト2401#1が存在するかを判断することができる。
差分を受信する通信装置101#1は、ROM103#1に格納されている実行オブジェクト2401#1をあらかじめRAM104#1に展開しておく。差分を受信後、通信装置101#1は、差分をデータ2407#1に適用する。
以下、図25、図26に示すフローチャートにて、移動元および移動先の通信装置101のプロセス移動部404の処理を示す。図25、図26に示すフローチャートでは、移動元の通信装置101を通信装置101#0と想定し、移動先の通信装置101を通信装置101#1と想定して説明を行う。また、通信システム100の運用中にて、通信装置101#1が移動元の通信装置101、通信装置101#0が移動先の通信装置101となってもよい。
図25は、実施の形態2における移動元の通信装置101#0でのプロセス移動部404の移動元処理を示すフローチャートである。CPU102#0は、RAM104#0から移動対象プロセスの識別情報2408#0を取得する(ステップS2501)。取得後、CPU102#0は、通信装置101#1に識別情報2408#0を通知し、実行オブジェクト2401#0と同一の実行オブジェクト2401#1が存在するかを問い合わせる(ステップS2502)。問い合わせの応答結果によって、CPU102#0は、移動先の通信装置101#1に実行オブジェクト2401#1が存在したかを判断する(ステップS2503)。
実行オブジェクト2401#1が存在した場合(ステップS2503:Yes)、CPU102#0は、移動元の通信装置101#0に、実行オブジェクト2401#0が存在するかを判断する(ステップS2504)。実行オブジェクト2401#0が存在する場合(ステップS2504:Yes)、CPU102#0は、実行オブジェクト2401#0の初期値データ2403#0とデータ2407#0を比較して差分情報を生成する(ステップS2505)。差分情報を生成後、CPU102#0は、差分情報と識別情報2408#0とプロセス管理情報1311#0とスレッド管理情報1312#0とを、移動情報として設定する(ステップS2506)。
実行オブジェクト2401#0が存在しない場合(ステップS2504:No)、CPU102#0は、データ2407#0と識別情報2408#0とプロセス管理情報1311#0とスレッド管理情報1312#0と、を移動情報として設定する(ステップS2507)。なお、実行オブジェクト2401#0が存在しない状態となる具体例としては、移動対象プロセスが一旦移動した際に再度移動元の通信装置101に戻る場合、または、実行オブジェクトをロードした後に対応する実行オブジェクトが更新された場合等である。
同一の実行オブジェクトが存在しなかった場合(ステップS2503:No)、CPU102#0は、プロセス用データ領域2405#0全体を移動情報として設定する(ステップS2508)。ステップS2506、ステップS2507、ステップS2508の終了後、CPU102#0は、移動先の通信装置101#1に設定された移動情報を送信し(ステップS2509)、送信後、CPU102#0は、プロセス移動部404の移動元処理を終了する。
なお、図25のフローチャートを適用することにより、通信量が減少するため、図21のステップS2108の処理で実行される移動コストの算出方法を、メモリ使用量に基づく算出方法から、実際に送信するデータ量に基づく算出方法に変更してもよい。
図26は、実施の形態2における移動先の通信装置101#1でのプロセス移動部404の移動先処理を示すフローチャートである。CPU102#1は、移動情報を受信する(ステップS2601)。受信後、CPU102#1は、移動情報がプロセス用データ領域2405#0全体かを判断する(ステップS2602)。移動情報がプロセス用データ領域2405#0全体である場合(ステップS2602:Yes)、CPU102#1は、移動情報をプロセス用データ領域2405#1としてRAM104#1に展開する(ステップS2603)。
展開後、CPU102#1は、展開されたプロセス管理情報1311#1とスレッド管理情報1312#1に基づいて、移動対象プロセスと移動対象プロセスに含まれるスレッドをOS203#1に登録する(ステップS2608)。登録後、CPU102#1は、プロセス移動部404の移動先処理を終了する。
移動情報がプロセス用データ領域2405全体でない場合(ステップS2602:No)、CPU102#1は、識別情報2408#0に対応する実行オブジェクト2401#1をRAM104#1に展開する(ステップS2604)。なお、ステップS2604の処理について、CPU102#1は、ステップS2601の処理による受信を待たず、移動元の通信装置101#0からの問い合わせを受けた直後に、事前に実行しておいてもよい。展開後、CPU102#1は、移動情報に差分情報が含まれているか否かを判断する(ステップS2605)。
差分情報が含まれていない場合(ステップS2605:No)、CPU102#1は、受信したデータ2407#0を、データ2407#1へ上書きし(ステップS2606)、ステップS2608の処理に移行する。差分情報が含まれている場合(ステップS2605:Yes)、CPU102#1は、受信した差分情報をデータ2407#1に適用し(ステップS2607)、ステップS2608の処理に移行する。
以上説明したように、実施の形態2にかかる通信装置、負荷分散方法、および記録媒体によれば、プロセスを移動する際に、移動先の通信装置に実行オブジェクトが存在する場合、プログラムコードを除いたデータを送信する。これにより、通信システムは、負荷分散の実行に伴う通信量を減少させることができ、処理効率を高めることができる。
また、通信システムは、移動元の通信装置に実行オブジェクトが存在する場合、データ部分の差分を生成し、差分を移動先の通信装置に送信してもよい。これにより、通信システムは、負荷分散の実行に伴う通信量をさらに減少させることができ、処理効率を高めることができる。
(実施の形態3の概要説明)
実施の形態2にかかる通信システム100では、識別情報2408を用いて移動先の通信装置101に実行オブジェクト2401が存在するかを判断し、判断結果に基づいて実行オブジェクトの差分をコピーしていた。しかしながら、差分を取るのに時間がかかるため、通信装置101間の通信速度が十分に速い場合は差分を取らずに全データをコピーした方が効率がよくなる場合がある。したがって、実施の形態3にかかる通信システム100では、実施の形態2におけるプロセス移動部404の移動元処理にて、コピー内容となる移動情報を設定する際に通信状態を確認する。
実施の形態2にかかる通信システム100では、識別情報2408を用いて移動先の通信装置101に実行オブジェクト2401が存在するかを判断し、判断結果に基づいて実行オブジェクトの差分をコピーしていた。しかしながら、差分を取るのに時間がかかるため、通信装置101間の通信速度が十分に速い場合は差分を取らずに全データをコピーした方が効率がよくなる場合がある。したがって、実施の形態3にかかる通信システム100では、実施の形態2におけるプロセス移動部404の移動元処理にて、コピー内容となる移動情報を設定する際に通信状態を確認する。
通信状態が有線接続状態の場合、通信システム100は、プログラムコード2406のコピーは行わないようにし、データ2407は差分を取らずに全てコピーする。通信状態が無線接続状態の場合、通信システム100は、データ2407の差分を取りコピーを行う。以下、図27を参照して、実施の形態3にかかるプロセス移動部404の動作について説明を行う。また、実施の形態3にかかる通信システム100のハードウェアは、実施の形態2にかかる通信システム100のハードウェアと等しく、実施の形態3にかかる通信システム100の機能は、実施の形態2にかかる通信システム100の機能とほぼ等しい。以下、実施の形態2と異なる機能を有するプロセス移動部404の移動元の処理について説明を行う。
図27は、実施の形態3における移動元の通信装置101#0でのプロセス移動部404の移動元処理を示すフローチャートである。図27に示すフローチャートでも、図25に示したフローチャートと同様に、移動元の通信装置101を通信装置101#0と想定し、移動先の通信装置101を通信装置101#1と想定して説明を行う。また、図27で示すステップS2701〜ステップS2704、ステップS2706〜ステップS2710の各処理は、ステップS2501〜ステップS2504、ステップS2505〜ステップS2509の各処理と等しいため、説明を省略する。
ステップS2704の処理後、CPU102#0は、通信状態が無線接続状態か否かを判断する(ステップS2705)。通信状態が無線接続状態である場合(ステップS2705:Yes)、CPU102#0は、ステップS2706の処理に移行する。通信状態が有線接続状態である場合(ステップS2705:No)、CPU102#0は、ステップS2708の処理に移行する。
以上説明したように、実施の形態3にかかる通信装置、負荷分散方法、および記録媒体によれば、プロセス移動時に、有線接続状態であればデータの差分を生成せず、そのままデータを移動先の通信装置に転送する。これにより、通信システムは、高速な有線接続を活用して差分の生成に伴う時間を省くことができ、処理効率をさらに高めることができる。
また、実施の形態1〜実施の形態3にかかる通信システム100は、通信状態が有線接続状態と無線接続状態という2つの状態を前提として説明を行っていた。また、図18において、通信状態が無線接続状態の場合スレッド単位の負荷分散を検討しない理由は、無線接続状態で図19、図20のフローチャートを実行しても、移動コストが非常に大きくなり、負荷バランスが向上するスレッドが存在しないためである。したがって、通信速度の異なる3つ以上の状態が存在する場合、低速の通信速度の状態に関しては、図19、図20のフローチャートを実行しないようにしてもよい。または、どの通信速度であっても図19、図20のフローチャートを実行するようにしておいてもよい。
また、通信速度が遅い方に変化した場合、通信システム100は、一旦移動してきたスレッドを移動元の通信装置101に戻して再度負荷分散を検討する。通信速度が速い方に変化した場合、通信システム100は、移動してきたスレッドをそのままの状態にして、再度負荷分散を検討する。
なお、本実施の形態で説明した負荷分散方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。負荷分散方法を実行するプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD、半導体メモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また負荷分散方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
100 通信システム
101 通信装置
102 CPU
107 タイマー
110 有線通信I/F
111 無線通信I/F
112 バス
401 決定部
402 選択部
403 設定部
404 プロセス移動部
405 スレッド移動部
101 通信装置
102 CPU
107 タイマー
110 有線通信I/F
111 無線通信I/F
112 バス
401 決定部
402 選択部
403 設定部
404 プロセス移動部
405 スレッド移動部
Claims (8)
- 複数のスレッドを有するプロセスを処理する演算部と、
前記演算部で処理する前記プロセスを記憶する記憶部と
を有する通信装置であって、前記演算部は、
前記プロセスを実行する場合の第1負荷量と、前記通信装置と通信する他の通信装置がプロセスを実行する場合の第2負荷量とに基づいて、前記他の通信装置と無線通信を行う場合には前記他の通信装置との間でプロセス単位で負荷分散を行い、前記他の通信装置と有線通信を行う場合にはスレッド単位で負荷分散を行う
通信装置。 - 前記演算部は、
前記第1負荷量と前記第2負荷量との差分が所定値以上であるときに、前記他の通信装置と無線通信を行う場合には前記他の通信装置との間でプロセス単位で負荷分散を行い、前記他の通信装置と有線通信を行う場合にはスレッド単位で負荷分散を行う
請求項1に記載の通信装置。 - 前記通信装置は、更にタイマーを含み、
前記演算部は、
前記タイマーからの通知に基づいて前記他の通信装置と無線通信を行う場合には前記他の通信装置との間でプロセス単位で負荷分散を行うか否かを決定し、前記タイマーからの通知に基づいて前記他の通信装置と有線通信を行う場合にはスレッド単位で負荷分散を行うか否かを決定する
請求項1または請求項2に記載の通信装置。 - 前記演算部は、
前記記憶部から前記他の通信装置が実行するプロセスを記憶する他の記憶部への転送時間に基づいて前記他の記憶部に転送するプロセスを選択する
請求項1乃至請求項3の何れか一に記載の通信装置。 - 前記演算部は、
スレッドの前記記憶部へのアクセス頻度または過去のスレッドの転送履歴に基づいて、前記他の通信装置に転送するスレッドを選択する
請求項1乃至請求項4の何れか一に記載の通信装置。 - コンピュータが、
複数のスレッドを有するプロセスを実行する場合の第1負荷量と、前記コンピュータと通信する他のコンピュータがプロセスを実行する場合の第2負荷量とに基づいて、前記他のコンピュータと無線通信を行う場合には前記他のコンピュータとの間でプロセス単位で負荷分散を行い、前記他のコンピュータと有線通信を行う場合にはスレッド単位で負荷分散を行う
処理を実行する負荷分散方法。 - 前記コンピュータが、
前記第1負荷量と前記第2負荷量との差分が所定値以上であるときに、前記他のコンピュータと無線通信を行う場合には前記他のコンピュータとの間でプロセス単位で負荷分散を行い、前記他のコンピュータと有線通信を行う場合にはスレッド単位で負荷分散を行う
処理を実行する請求項6に記載の負荷分散方法。 - コンピュータに、
複数のスレッドを有するプロセスを実行する場合の第1負荷量と、前記コンピュータと通信する他のコンピュータがプロセスを実行する場合の第2負荷量とに基づいて、前記他のコンピュータと無線通信を行う場合には前記他のコンピュータとの間でプロセス単位で負荷分散を行い、前記他のコンピュータと有線通信を行う場合にはスレッド単位で負荷分散を行う
処理を実行させる負荷分散プログラムが格納される前記コンピュータがアクセス可能な記録媒体。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2010/070365 WO2012066633A1 (ja) | 2010-11-16 | 2010-11-16 | 通信装置、負荷分散方法、および記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2012066633A1 JPWO2012066633A1 (ja) | 2014-05-12 |
JP5527425B2 true JP5527425B2 (ja) | 2014-06-18 |
Family
ID=46083597
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012544031A Expired - Fee Related JP5527425B2 (ja) | 2010-11-16 | 2010-11-16 | 通信装置、負荷分散方法、および記録媒体 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9021217B2 (ja) |
JP (1) | JP5527425B2 (ja) |
WO (1) | WO2012066633A1 (ja) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9237093B2 (en) * | 2013-03-14 | 2016-01-12 | Silicon Graphics International Corp. | Bandwidth on-demand adaptive routing |
US9274722B2 (en) * | 2013-12-06 | 2016-03-01 | Concurrent Ventures, LLP | System, method and article of manufacture for monitoring, controlling and improving storage media system performance |
US10048895B2 (en) | 2013-12-06 | 2018-08-14 | Concurrent Ventures, LLC | System and method for dynamically load balancing storage media devices based on a mid-range performance level |
US8954615B1 (en) * | 2013-12-06 | 2015-02-10 | Concurrent Ventures, LLC | System, method and article of manufacture for monitoring, controlling and improving storage media system performance based on temperature ranges |
US9436404B2 (en) | 2013-12-06 | 2016-09-06 | Concurrent Ventures, LLC | System and method for dynamically load balancing across storage media devices having fast access rates |
US10235096B2 (en) | 2013-12-06 | 2019-03-19 | Concurrent Ventures, LLC | System and method for dynamically load balancing storage media devices based on an average or discounted average sustained performance level |
US8954614B1 (en) * | 2013-12-06 | 2015-02-10 | Concurrent Ventures, LLC | System, method and article of manufacture for monitoring, controlling and improving storage media system performance based on temperature |
US8984172B1 (en) * | 2013-12-06 | 2015-03-17 | Concurrent Ventures, LLC | System, method and article of manufacture for monitoring, controlling and improving storage media system performance based on storage media device fill percentage |
WO2015151548A1 (ja) * | 2014-04-03 | 2015-10-08 | ソニー株式会社 | 電子機器および記録媒体 |
US9367442B2 (en) * | 2014-07-12 | 2016-06-14 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Allocating memory usage based on voltage regulator efficiency |
JP6428012B2 (ja) * | 2014-07-16 | 2018-11-28 | 富士通株式会社 | 分散処理プログラム、分散処理管理装置及び分散処理方法 |
US10255091B2 (en) * | 2014-09-21 | 2019-04-09 | Vmware, Inc. | Adaptive CPU NUMA scheduling |
KR102528692B1 (ko) * | 2016-01-04 | 2023-05-08 | 한국전자통신연구원 | 중앙처리장치의 동적 주파수 조절 장치 및 그 방법 |
JP2018010507A (ja) * | 2016-07-14 | 2018-01-18 | 富士通株式会社 | メモリ管理プログラム、メモリ管理方法及びメモリ管理装置 |
CN107733805B (zh) * | 2016-08-12 | 2021-04-16 | 腾讯科技(深圳)有限公司 | 业务负载调度方法和装置 |
US10382535B2 (en) * | 2016-10-05 | 2019-08-13 | Vmware, Inc. | Pairwise comparison for load balancing |
US10452573B2 (en) | 2016-12-06 | 2019-10-22 | Hewlett Packard Enterprise Development Lp | Scripted arbitration circuit |
US10944694B2 (en) | 2016-12-06 | 2021-03-09 | Hewlett Packard Enterprise Development Lp | Predictive arbitration circuit |
US10721185B2 (en) | 2016-12-06 | 2020-07-21 | Hewlett Packard Enterprise Development Lp | Age-based arbitration circuit |
US10237198B2 (en) | 2016-12-06 | 2019-03-19 | Hewlett Packard Enterprise Development Lp | Shared-credit arbitration circuit |
US10693811B2 (en) | 2018-09-28 | 2020-06-23 | Hewlett Packard Enterprise Development Lp | Age class based arbitration |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07152699A (ja) * | 1993-11-29 | 1995-06-16 | Canon Inc | 情報処理方法及び装置及びシステム |
JPH0830472A (ja) * | 1994-07-19 | 1996-02-02 | Canon Inc | 負荷分散方式 |
JPH0877026A (ja) * | 1994-08-31 | 1996-03-22 | Canon Inc | 情報処理方法とその装置 |
JP2003058520A (ja) * | 2001-08-09 | 2003-02-28 | Mitsubishi Heavy Ind Ltd | コンピュータの配置方法 |
JP2005346327A (ja) * | 2004-06-02 | 2005-12-15 | Sony Corp | 情報処理装置および方法、並びにプログラム |
JP2008191949A (ja) * | 2007-02-05 | 2008-08-21 | Nec Corp | マルチコアシステムおよびマルチコアシステムの負荷分散方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5884077A (en) | 1994-08-31 | 1999-03-16 | Canon Kabushiki Kaisha | Information processing system and method in which computer with high load borrows processor of computer with low load to execute process |
JP2008152470A (ja) | 2006-12-15 | 2008-07-03 | Hitachi Ltd | データ処理システム及び半導体集積回路 |
JP2009199414A (ja) | 2008-02-22 | 2009-09-03 | Renesas Technology Corp | マイクロコンピュータ |
-
2010
- 2010-11-16 WO PCT/JP2010/070365 patent/WO2012066633A1/ja active Application Filing
- 2010-11-16 JP JP2012544031A patent/JP5527425B2/ja not_active Expired - Fee Related
-
2013
- 2013-05-07 US US13/889,109 patent/US9021217B2/en not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07152699A (ja) * | 1993-11-29 | 1995-06-16 | Canon Inc | 情報処理方法及び装置及びシステム |
JPH0830472A (ja) * | 1994-07-19 | 1996-02-02 | Canon Inc | 負荷分散方式 |
JPH0877026A (ja) * | 1994-08-31 | 1996-03-22 | Canon Inc | 情報処理方法とその装置 |
JP2003058520A (ja) * | 2001-08-09 | 2003-02-28 | Mitsubishi Heavy Ind Ltd | コンピュータの配置方法 |
JP2005346327A (ja) * | 2004-06-02 | 2005-12-15 | Sony Corp | 情報処理装置および方法、並びにプログラム |
JP2008191949A (ja) * | 2007-02-05 | 2008-08-21 | Nec Corp | マルチコアシステムおよびマルチコアシステムの負荷分散方法 |
Also Published As
Publication number | Publication date |
---|---|
US20130246715A1 (en) | 2013-09-19 |
US9021217B2 (en) | 2015-04-28 |
JPWO2012066633A1 (ja) | 2014-05-12 |
WO2012066633A1 (ja) | 2012-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5527425B2 (ja) | 通信装置、負荷分散方法、および記録媒体 | |
JP7163430B2 (ja) | リソースを提供するためのシステム、方法、及び非一時的コンピュータ可読媒体 | |
US20190050334A1 (en) | Adaptable data caching mechanism for in-memory cluster computing | |
US9652161B2 (en) | System, method, and medium of optimizing load reallocation in an in-memory data management grid | |
CN109684074B (zh) | 物理机资源分配方法及终端设备 | |
US9626217B2 (en) | Information processing apparatus, information processing method, recording medium and information processing system | |
JP4679584B2 (ja) | オーバーレイネットワークにおけるサービス問い合わせのルーティング | |
KR102172169B1 (ko) | 분산형 클라우드 기반 어플리케이션 실행 시스템, 이에 적용되는 장치 및 장치의 동작 방법 | |
US20180157729A1 (en) | Distributed in-memory database system and method for managing database thereof | |
US20240078235A1 (en) | Task-execution planning using machine learning | |
JP5733136B2 (ja) | 情報処理装置の制御方法、制御プログラム及び情報処理装置 | |
CN111443870B (zh) | 一种数据处理的方法、设备及存储介质 | |
KR20200080458A (ko) | 클라우드 멀티-클러스터 장치 | |
KR20130064292A (ko) | 스마트 폰을 위한 클라우드 서비스 시스템 및 방법 | |
CN112230757B (zh) | 用于通过腾空cpu和存储器的子集来降低功率的方法和*** | |
JP6081212B2 (ja) | 計算機システム及びリソース管理装置並びにリソース管理方法 | |
KR20190132009A (ko) | 블록체인 기반 트랜잭션 관리 시스템 및 그 동작 방법 | |
WO2012120655A1 (ja) | スケジューリング方法およびスケジューリングシステム | |
US11704306B2 (en) | Restricted views to control information access in a database system | |
JP5691229B2 (ja) | オンラインストレージシステム、及びオンラインストレージサービスの提供方法 | |
WO2012001776A1 (ja) | マルチコアシステム、スケジューリング方法およびスケジューリングプログラム | |
Nayyer et al. | Revisiting VM performance and optimization challenges for big data | |
JP5435133B2 (ja) | 情報処理装置、情報処理装置の制御方法及びプログラム | |
CN114244714A (zh) | 域名配置管理方法、装置及***、计算机可读存储介质 | |
JP5699589B2 (ja) | 処理割り当て装置、処理割り当てシステム、処理割り当て方法、処理割り当てプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20140210 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20140318 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140331 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5527425 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |