SlideShare a Scribd company logo
1 of 23
分散メモリ環境における
シェルスクリプトの
高速化手法の提案

Kan Keisuke ( @9renpoto)


                           1
背景                     共有メモリ型
並列処理                     メモリ
• 作業を高速化したい
                 コア1   コア2   コア3   コア4
• 大規模な処理を行いたい
                 例:マルチコアプロセッサ
並列処理環境
1.共有メモリ型               分散メモリ型
2.分散メモリ型
                 メモリ メモリ メモリ メモリ
並列処理の難点
• 複数のプロセッサに仕事を
割振る必要がある
  ⇒通信処理が必要         ネットワーク(LANなど)
                 例:PCクラスタ
                         2
シェルスクリプト
シェル(Shell)は,コマンドを解釈しプログラムの起動
や制御などを行うプログラムである
• UNIXユーザであれば気軽に利用
• C言語などと比べ,命令1つの処理時間が長い
• 大量のデータ処理に扱うことが多い
  • 企業では売上データや受注データなどの処理に利用


多くの処理時間がかかるプログラ
ムが記述されやすい             3
関連研究
 シェルスクリプトを自動的に並列化する手法
 が提案されている[1]
 • マルチコア・SMTプロセッサ上を対象(共有メモリ型)
 • 1.4倍~1.8倍のスピードアップ
 • シェルスクリプトの自動並列化に成功
 問題点
 • 繰り返し文の並列化は行っていない
 • 共有メモリ環境での並列化が対象
    • マルチコア(4~8コア)での並列化では限界がある
[1]杉田秀,深山辰徳,蛭田智則,當仲寛哲,山名早人.“マルチコア・SMTプロセッサ上における
                                     4
シェルスクリプト高速化手法”.情報処理学会研究報告,2007-ARC-172,pp.73-78,(2007)
動機・目的
問題点
• 繰り返し文の並列化は行っていない
• 共有メモリ環境での並列化が対象
 • マルチコア(4~8コア)での並列化では限界がある

目的

•分散メモリ環境を対象として並列化を行う.

•逐次プログラムに対して少し変更を加えるだけで
 並列実行可能なスクリプトを生成する(半自動並列化)
                       5
全体像
記述系                        実行系
逐次スクリプト    生成
                task.sh
高速処理したい         リモートPC上で       タスクキュー
シェルスクリプト        実行されるタスク

生成                               タスク
実行スクリプト
実行系へtask.shをエンキュー
実行系の実行

                           6
実行系              タスク
                 リモートPC上で実行される
PCリスト
                 コマンド群(task.sh)
Host1
        タスクキュー   記述系で生成
Host2
Host3            PCリスト
Host4
・
                 並列計算に参加するPCの
          タスク    情報(PCクラスタ)
                 実行系
                 マスタ・ワーカ法により
                 動的負荷分散

                         7
実行系~マスタ・ワーカ法~
         マスタ
   マスタ   1.タスクキューに格納されているタスクを
           仕事をしていないワーカに対して割り当てる
         2.処理結果を受け取る


            ワーカ
            1.マスタより受け取ったタスクを処理
            2.処理が終わると結果をマスタへ返す
   ワーカ
2種類のプロセッサ集合に分けて処理を行う
タスクの大きさにバラつきがあっても効率よく処理できる
                       8
記述系
逐次シェルスクリプトに対して特殊コメントを入力
1.#!/bin/sh                   ユーザが行う作業
2.count=1                     1.PCリストを作成
                              2.特殊コメントの入力
3.while []; do
                              • 並列実行したい箇所を指定
4.    #bodystart              2.ツールの起動
5.    Command1                3.実行スクリプトを起動
6.    Command2
7.    #bodyend
8.    count=`expr count+ 1`
9.done                          並列処理
                                   9
記述系~特殊コメント~
繰り返し文の内部に2箇所特殊コメントを入力
1.#!/bin/sh
2.count=1
3.while []; do   開始を示す特殊コメント
4.    #bodystart
5.    Command1
                  終了を示す特殊コメント
6.    Command2
7.    #bodyend
8.    count=`expr count+ 1`
9.done


                                10
記述系~task.sh~
特殊コメント内部をtask.shへ書き出す
1.#!/bin/sh                   task.sh
2.count=1                     1.#!/bin/sh
3.while []; do                2.
4.    #bodystart              3.Command1
5.    Command1
6.    Command2                4.Command2
7.    #bodyend                task.sh
8.    count=`expr count+ 1`
9.done                        リモートPC上で実行される
                              独立なタスクとして扱われる
                                        11
変数情報
    マスタ   1. A = 0   マスタで変数が宣言される
          2. B = 0   例:A=0 , B=0




    ワーカ

分散メモリ環境⇒複数のPCを利用し並列処理
• 変数情報が異なる
• リモートPC上へ必要な変数情報を伝える必要がある
                             12
変数情報
    マスタ   1. A = 0     マスタで変数が宣言される
          2. B = 0     例:A=0 , B=0

                     リモートPCへ処理を割振る


    ワーカ

分散メモリ環境⇒複数のPCを利用し並列処理
• 変数情報が異なる
• リモートPC上へ必要な変数情報を伝える必要がある
                               13
変数情報
    マスタ   1. A = 0     マスタで変数が宣言される
          2. B = 0     例:A=0 , B=0

                     リモートPCへ処理を割振る
                     マスタで宣言された変数情報が

    ワーカ              ワーカ側では不明

分散メモリ環境⇒複数のPCを利用し並列処理
• 変数情報が異なる
• リモートPC上へ必要な変数情報を伝える必要がある
                               14
記述系~変数情報~
特殊コメント直前までの変数情報をtask.shへ伝播
1.                            task.sh
2.      環境変数情報を取得
        task.shへ伝播            1.#!/bin/sh
3.                            2.変数情報
4.    #bodystart              3.Command1
5.    Command1
6.    Command2                4.Command2
7.    #bodyend                task.sh
8.    count=`expr count+ 1`
9.done                        特殊コメント直前までの
                              変数情報をtask.shへ伝播
                                        15
記述系~実行スクリプト~
特殊コメントで指示された部分を変換する
1.#!/bin/sh
2.count=1
3.while []; do   開始を示す特殊コメント
4.    #bodystart
5.    Command1
                  終了を示す特殊コメント
6.    Command2
7.    #bodyend
8.    count=`expr count+ 1`
9.done


                                16
記述系~実行スクリプト~
特殊コメントで指示された部分を変換する
1.#!/bin/sh
2.count=1
3.while []; do
                 動的にタスクキューへ格納される
4.
•    実行系へtask.shをエンキュー
•
7.     count=`expr count + 1`
8.done
9.実行系の実行

          並列処理を行う
                                17
記述系~実行スクリプト~
特殊コメントで指示された部分を変換する
1.#!/bin/sh         繰り返し文が何回実行されても
2.count=1           タスクを格納できる
3.while []; do
                 動的にタスクキューへ格納される
4.
•    実行系へtask.shをエンキュー
•
7.    count=`expr count + 1`
8.done              繰り返し文の終了と同時に並列処理を行う
9.実行系の実行            ⇒実行結果に同期を取る
          並列処理を行う
                                18
実験
• 実験目的                      ダミープログラム
提案手法による速度向上を調べる
                     1.#!/bin/sh
タスク粒度による性能の調査
                     2.while read line ;do
                     3. #bodystart
• 実験環境               4. sleep $line
PCクラスタ:PC15台(シングルコア) 5. #bodyend
                     6.done < random.txt
• 実験に利用したプログラム
sleepコマンドを利用したダミープログラム



                                19
結果
横軸に0秒からの乱数の範囲の上限(秒)、縦軸に速度向上率(倍)
     14.00

     12.00

     10.00

      8.00
                                                     ワーカ14台
      6.00
                                                     ワーカ8台
      4.00
 倍
 率
 上
 向
 度
 速




                                                     ワーカ2台
 )
 (




      2.00

      0.00
             1   3   5   7   9   11   13   15

                     0秒からの乱数の範囲(秒)

                                                20
結果
横軸に0秒からの乱数の範囲の上限(秒)、縦軸に速度向上率(倍)
                理想値の89.4%の速度向上
     14.00

     12.00

     10.00

      8.00
                                                      ワーカ14台
      6.00       理想値の98.6%の速度向上                       ワーカ8台
      4.00
 倍
 率
 上
 向
 度
 速




                                                      ワーカ2台
 )
 (




      2.00

      0.00
             1    3   5   7   9   11   13   15

                      0秒からの乱数の範囲(秒)

 理想値=ワーカ台数倍の速度向上                                 21
結果
横軸に0秒からの乱数の範囲の上限(秒)、縦軸に速度向上率(倍)
     14.00

     12.00

     10.00                   48.6%~82.0%の速度向上
      8.00
                                                     ワーカ14台
      6.00
                                                     ワーカ8台
      4.00
 倍
 率
 上
 向
 度
 速




                                                     ワーカ2台
 )
 (




      2.00

      0.00
             1   3   5   7   9   11   13   15

                     0秒からの乱数の範囲(秒)

                                                22
まとめ
分散メモリ環境におけるシェルスクリプト
 の半自動並列化を行った

 特殊コメントで並列箇所を指定するだけで
  並列化を行うことが可能となった
 ワーカ14台のときおよそ7倍から12倍の速度
  向上率が得られた

以上の結果より,本研究は有用であると言える
                23

More Related Content

What's hot

Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
max747
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Takuya ASADA
 
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
Satoshi Shimazaki
 
Cassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考えるCassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考える
Kazutaka Tomita
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
 
クックパッドのスケーリング
クックパッドのスケーリングクックパッドのスケーリング
クックパッドのスケーリング
Satoshi Takada
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
airtoxin Ishii
 
serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?
Sho Hashimoto
 

What's hot (20)

MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
 
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
 
Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
 
Cassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考えるCassandraのバックアップと運用を考える
Cassandraのバックアップと運用を考える
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 
クックパッドのスケーリング
クックパッドのスケーリングクックパッドのスケーリング
クックパッドのスケーリング
 
Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 

Viewers also liked (6)

Linux女子部勉強会 2012年4月21日
Linux女子部勉強会 2012年4月21日Linux女子部勉強会 2012年4月21日
Linux女子部勉強会 2012年4月21日
 
Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4Bashで競技プログラミング #w8lt #w8lt4
Bashで競技プログラミング #w8lt #w8lt4
 
競プロ、なんでお前たちやらないの?
競プロ、なんでお前たちやらないの?競プロ、なんでお前たちやらないの?
競プロ、なんでお前たちやらないの?
 
電子工作で光で動くロボットをつくろう!
電子工作で光で動くロボットをつくろう!電子工作で光で動くロボットをつくろう!
電子工作で光で動くロボットをつくろう!
 
WebブラウザでOpen usp Tukubaiを体験してみよう!(2014/02/15 第9回シェル芸勉強会 & 第27回USP友の会定例会)
WebブラウザでOpen usp Tukubaiを体験してみよう!(2014/02/15 第9回シェル芸勉強会 & 第27回USP友の会定例会)WebブラウザでOpen usp Tukubaiを体験してみよう!(2014/02/15 第9回シェル芸勉強会 & 第27回USP友の会定例会)
WebブラウザでOpen usp Tukubaiを体験してみよう!(2014/02/15 第9回シェル芸勉強会 & 第27回USP友の会定例会)
 
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413
 

Similar to 分散メモリ環境におけるシェルスクリプトの高速化手法の提案

Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Shinpei Ohtani
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
Taku Miyakawa
 

Similar to 分散メモリ環境におけるシェルスクリプトの高速化手法の提案 (20)

Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
リアルタイム処理エンジン Gearpumpの紹介
リアルタイム処理エンジンGearpumpの紹介リアルタイム処理エンジンGearpumpの紹介
リアルタイム処理エンジン Gearpumpの紹介
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
serverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようserverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみよう
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
 
TotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチTotalViewを使った代表的なバグに対するアプローチ
TotalViewを使った代表的なバグに対するアプローチ
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメ
 
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
 
Xen Nic
Xen NicXen Nic
Xen Nic
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 

Recently uploaded

Recently uploaded (7)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

分散メモリ環境におけるシェルスクリプトの高速化手法の提案