gargor 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,84 +1,81 @@
1
1
  # gargor
2
2
 
3
- `gargor`はChefで管理されたサーバのパラメータと負荷試験結果を遺伝的アルゴリズム(genetic algorithm)により機械学習し、最適値を探索します。本ソフトウェアをうまく使うことで今まで勘と経験に頼っていたサーバチューニングをより最適にかつ自動化することができます。
3
+ `gargor` is software which uses genetic algorithm to support parameter tuning of the servers controlled by Chef.Using this software, you are able to optimize and automate the server tuning, which you did until now based on a combination of my experience and intuition.  
4
4
 
5
- ## インストール
5
+ ## Install
6
6
 
7
- Ruby 1.9以降が必要です
7
+ Ruby 1.9-
8
8
 
9
- $ gem install gargor
9
+ $ [sudo] gem install gargor
10
10
 
11
- ## どのように動くのか
11
+ ## How it works
12
12
 
13
- 1. 現在のChefの設定ファイル(JSON)から個体を一つ作ります。
14
- 2. 残りの個体を突然変異により作ります。
15
- 3. 各個体に対し負荷試験(Chefによる配備→攻撃)を実施し、適応値を算出します。
16
- 4. 現世代の個体群に対して、エリートと残りを交叉および突然変異により次世代の個体群をつくります。
17
- 5. 次世代の個体群を現世代として`3.`に戻ります。これを指定した世代分実施します。
18
- 6. 最後に最も高い適応値の個体をサーバに配備して終了します
13
+ 1. Create a individual from current Chef settings (JSON file).
14
+ 2. Create remaining individuals by mutation.
15
+ 3. By performing stress-test (deloy by Chef and Attack by some stress tool) for each individuals to evaluate fitness.
16
+ 4. To create Individuals of Next-generation, Individuals of current generation are crossovered or mutated each other.
17
+ 5. Treat individuals of Next-generation as current generation. return to 3. Repeat until the max generations number of times.
18
+ 6. It ends with a deployment to the server with a individual which has the highest fitness.
19
19
 
20
- ## 使い方
20
+ ## Usage
21
21
 
22
22
  $ gargor [dsl-file]
23
23
 
24
- `gargor`の設定情報は、内部DSLによりに以下のように記述します。
24
+ The dsl-file of `gargor` should be written as belows:
25
25
 
26
26
  ```ruby
27
- # 世代数: 1以上を指定してください
27
+ # generations: set > 1
28
28
  max_generations 10
29
29
 
30
- # 個体数: 1世代あたりの個体数
30
+ # individuals number of some generation.
31
31
  population 10
32
32
 
33
- # エリート: 世代交代の時に適応値の高い個体をそのまま次世代に引き継ぐ数
33
+ # elite number of some generation.(carried over)
34
34
  elite 1
35
35
 
36
- # 突然変異の確率: "0.01""1%"
36
+ # Probability of mutation set "0.01" to "1%" (when crossover)
37
37
  mutation 0.01
38
38
 
39
- # ターゲットをChefで料理するコマンド %sには、ノード名が入る
39
+ # target cook command : '%s' will replace by node name.
40
40
  target_cooking_cmd "knife solo cook %s"
41
41
 
42
- # ターゲットのノード
43
- # 攻撃前に以下のノードすべてに対してtarget_cooking_cmdが実施される
42
+ # target nodes
43
+ # performing target_cooking_command before the attack.
44
44
  target_nodes ["www-1.example","www-2.example","db-1.example"]
45
45
 
46
- # 攻撃コマンド
46
+ # attack command
47
47
  attack_cmd "ssh attacker.example ./bin/ghakai www-1.example.yml 2>/dev/null"
48
48
 
49
49
 
50
- # 攻撃結果の評価
51
- # code: attack_cmdのプロセス終了コード(普通は0:成功)
52
- # out: attack_cmdの標準出力
53
- # time: attack_cmdの実行時間
50
+ # evalute of the attack
51
+ # code: exit code of attack_cmd command (0 => succees)
52
+ # out: standard output of attack_cmd command
53
+ # time: execute time of attack_cmd
54
54
  evaluate do |code,out,time|
55
55
  puts out
56
56
  fitness = 0
57
-
58
- # 攻撃コマンドで使っている、グリーン破壊の標準出力から
59
- # FAILEDの値を抜き出し0以外は適応値0としている
57
+ # get "FAILED" count from stadard output of stress-tool,
58
+ # and set fitess to 0 when FAILED > 0.
60
59
  if time > 0 && code == 0 && /^FAILED (\d+)/ =~ out && $1 == "0"
61
- # 攻撃コマンドで使っている、グリーン破壊の標準出力から
62
- # 適応値に代用できそうなものを正規表現で取得する
63
- # request count:200, concurrenry:20, 45.060816 req/s
60
+ # get fitness from stadard output of stress-tool.
61
+ # e.g.: request count:200, concurrenry:20, 45.060816 req/s
64
62
  if /, ([\.\d]+) req\/s/ =~ out
65
63
  fitness = $1.to_f
66
64
  end
67
- # 単純に実行時間で適応値を設定したいなら以下のようにしても良い
65
+ # To get fitness simply,to use execution time
68
66
  # fitness = 1/time
69
67
  end
70
- # このブロックは必ず適応値を返すこと(整数or浮動小数)
68
+ # This block must return the fitness.(integer or float)
71
69
  fitness
72
70
  end
73
71
 
74
- # パラメータ定義
75
- # GAにより変動されるパラメータをここで定義する
76
- #
77
- # param 名前 do
78
- # json_file: 値を上書くJSONファイル nodes/*.jsonやroles/*.json
79
- # (注意!) gargorはこのjsonファイルを容赦なく書き換える
80
- # json_path: json_fileの中から書変える値の場所をJSONPath形式で指定する
81
- # mutaion: 突然変異時の値の設定
72
+ # definition of parameters(GA)
73
+ #
74
+ # param _name_ do
75
+ # json_file: Chef parameter(JSON) file (such as nodes/*.json or roles/*.json)
76
+ # (Warning!) gargor will overwrite their json files.
77
+ # json_path: to locate the value by JSONPath
78
+ # mutaion: to set value when mutaion
82
79
  param "max_clients" do
83
80
  json_file "roles/www.json"
84
81
  json_path '$.httpd.max_clients'
@@ -110,21 +107,16 @@ param "query_cache_size" do
110
107
  end
111
108
  ```
112
109
 
113
- このDSLファイルは任意のファイル名でChefのリポジトリに含めてしまうことを推奨します。`dsl-file`を省略した場合は、カレントディレクトリの`gargor.rb`を探します。
114
-
115
- ### 注意
116
-
117
- `gargor`は、DSLファイルで指定されたChefのJSONを直接(問答無用で)書き換えます。`git stash`を使うなりしてオリジナルが消えないように配慮ください。
110
+ ### Warning
118
111
 
119
- ## サンプルレシピ
112
+ The `gargor` will overwrite Chef JSON files.So you should take care of original files.
120
113
 
121
- `Chef`のサンプルレシピをTipsを交えてご紹介します。
114
+ ## Sample Chef recipe
122
115
 
123
116
  ### mysql
124
117
 
125
118
 
126
119
  ```ruby
127
- # この時点で起動しようとすると以前の設定ファイルがおかしい場合にエラーが出てしまう
128
120
  service "mysqld" do
129
121
  action :nothing
130
122
  end
@@ -134,7 +126,6 @@ template "/etc/my.cnf" do
134
126
  notifies :restart,"service[mysqld]"
135
127
  end
136
128
 
137
- # ib_logfile0,1はib_logfile1はinnodb_log_file_sizeを変えるとエラーになるので毎回消す
138
129
  file "/var/lib/mysql/ib_logfile0" do
139
130
  action :delete
140
131
  notifies :restart,"service[mysqld]"
@@ -145,7 +136,7 @@ file "/var/lib/mysql/ib_logfile1" do
145
136
  end
146
137
  ```
147
138
 
148
- このテンプレートは以下のようになっています。`innodb_buffer_pool_size`を探索対象のパラメータにしたいのですが、「`innodb_log_file_size`を`innodb_buffer_pool_size`の25%にすべし」と注意書きがあるので、`innodb_log_file_size`を設定対象にして、`innodb_buffer_pool_size`をその4倍にしています。
139
+ my.conf.erb
149
140
 
150
141
  ```
151
142
  [mysqld]
@@ -205,7 +196,7 @@ pid-file=/var/run/mysqld/mysqld.pid
205
196
 
206
197
  ### httpd
207
198
 
208
- Apacheのパフォーマンスチューニングでは以下の様にしています。レシピには全く工夫はありません。
199
+ When I tune Apache httpd servers ,The Chef recipe is as below:
209
200
 
210
201
  ```
211
202
  service "httpd" do
@@ -218,7 +209,7 @@ template "/etc/httpd/conf/httpd.conf" do
218
209
  end
219
210
  ```
220
211
 
221
- ポイントは`MinSpareServers`と`MaxSpareServers`のように上下関係のあるパラメータの決定方法を以下のように`min_spare_servers`と`range_spare_servers`としている点です。また、`ServerLimit`=`MaxClients`としています。
212
+ httpd.conf.erb
222
213
 
223
214
  ```
224
215
  <IfModule prefork.c>
@@ -231,21 +222,11 @@ MaxRequestsPerChild <%= node["httpd"]["max_request_per_child"] %>
231
222
  </IfModule>
232
223
  ```
233
224
 
234
- ## 負荷試験ツール
235
-
236
- コマンドラインで使えるものであれば、大体使うことができます。サンプルでは、[グリーン破壊](https://github.com/KLab/green-hakai/)を使わせて頂きました。
237
-
238
- 負荷試験の厳しさによって個体が全滅することがあります。すると以下のように表示され、プログラムが終了します。
225
+ ## Stress Tools
239
226
 
240
- ***** EXTERMINATION ******
241
-
242
- これは、個体の環境が厳しすぎるためで負荷の条件を緩めて再度実施してください。
243
-
244
- ## FAQ
245
-
246
- ##### `gargor`はなんて読むの?
227
+ I use [green hakai](https://github.com/KLab/green-hakai/).
247
228
 
248
- 「がるごる」
229
+ You can use ab(Apache bench) and so on.
249
230
 
250
231
  ## Contributing
251
232
 
@@ -254,3 +235,5 @@ MaxRequestsPerChild <%= node["httpd"]["max_request_per_child"] %>
254
235
  3. Commit your changes (`git commit -am 'Add some feature'`)
255
236
  4. Push to the branch (`git push origin my-new-feature`)
256
237
  5. Create new Pull Request
238
+
239
+
@@ -0,0 +1,256 @@
1
+ # gargor
2
+
3
+ `gargor`はChefで管理されたサーバのパラメータと負荷試験結果を遺伝的アルゴリズム(genetic algorithm)によ探索し、最適値を探索します。本ソフトウェアをうまく使うことで今まで勘と経験に頼っていたサーバチューニングをより最適にかつ自動化することができます。
4
+
5
+ ## インストール
6
+
7
+ Ruby 1.9以降が必要です
8
+
9
+ $ gem install gargor
10
+
11
+ ## どのように動くのか
12
+
13
+ 1. 現在のChefの設定ファイル(JSON)から個体を一つ作ります。
14
+ 2. 残りの個体を突然変異により作ります。
15
+ 3. 各個体に対し負荷試験(Chefによる配備→攻撃)を実施し、適応値を算出します。
16
+ 4. 現世代の個体群に対して、エリートと残りを交叉および突然変異により次世代の個体群をつくります。
17
+ 5. 次世代の個体群を現世代として`3.`に戻ります。これを指定した世代分実施します。
18
+ 6. 最後に最も高い適応値の個体をサーバに配備して終了します
19
+
20
+ ## 使い方
21
+
22
+ $ gargor [dsl-file]
23
+
24
+ `gargor`の設定情報は、内部DSLによりに以下のように記述します。
25
+
26
+ ```ruby
27
+ # 世代数: 1以上を指定してください
28
+ max_generations 10
29
+
30
+ # 個体数: 1世代あたりの個体数
31
+ population 10
32
+
33
+ # エリート: 世代交代の時に適応値の高い個体をそのまま次世代に引き継ぐ数
34
+ elite 1
35
+
36
+ # 突然変異の確率: "0.01"で"1%"
37
+ mutation 0.01
38
+
39
+ # ターゲットをChefで料理するコマンド %sには、ノード名が入る
40
+ target_cooking_cmd "knife solo cook %s"
41
+
42
+ # ターゲットのノード
43
+ # 攻撃前に以下のノードすべてに対してtarget_cooking_cmdが実施される
44
+ target_nodes ["www-1.example","www-2.example","db-1.example"]
45
+
46
+ # 攻撃コマンド
47
+ attack_cmd "ssh attacker.example ./bin/ghakai www-1.example.yml 2>/dev/null"
48
+
49
+
50
+ # 攻撃結果の評価
51
+ # code: attack_cmdのプロセス終了コード(普通は0:成功)
52
+ # out: attack_cmdの標準出力
53
+ # time: attack_cmdの実行時間
54
+ evaluate do |code,out,time|
55
+ puts out
56
+ fitness = 0
57
+
58
+ # 攻撃コマンドで使っている、グリーン破壊の標準出力から
59
+ # FAILEDの値を抜き出し0以外は適応値0としている
60
+ if time > 0 && code == 0 && /^FAILED (\d+)/ =~ out && $1 == "0"
61
+ # 攻撃コマンドで使っている、グリーン破壊の標準出力から
62
+ # 適応値に代用できそうなものを正規表現で取得する
63
+ # request count:200, concurrenry:20, 45.060816 req/s
64
+ if /, ([\.\d]+) req\/s/ =~ out
65
+ fitness = $1.to_f
66
+ end
67
+ # 単純に実行時間で適応値を設定したいなら以下のようにしても良い
68
+ # fitness = 1/time
69
+ end
70
+ # このブロックは必ず適応値を返すこと(整数or浮動小数)
71
+ fitness
72
+ end
73
+
74
+ # パラメータ定義
75
+ # GAにより変動されるパラメータをここで定義する
76
+ #
77
+ # param 名前 do
78
+ # json_file: 値を上書くJSONファイル nodes/*.jsonやroles/*.json
79
+ # (注意!) gargorはこのjsonファイルを容赦なく書き換える
80
+ # json_path: json_fileの中から書変える値の場所をJSONPath形式で指定する
81
+ # mutaion: 突然変異時の値の設定
82
+ param "max_clients" do
83
+ json_file "roles/www.json"
84
+ json_path '$.httpd.max_clients'
85
+ mutation rand(500)+10
86
+ end
87
+
88
+ param "innodb_log_file_size" do
89
+ json_file "nodes/db-1.example.json"
90
+ json_path '$.mysqld.innodb_log_file_size'
91
+ mutation rand(200)
92
+ end
93
+
94
+ param "sort_buffer_size" do
95
+ json_file "nodes/db-1.example.json"
96
+ json_path '$.mysqld.sort_buffer_size'
97
+ mutation rand(1000)
98
+ end
99
+
100
+ param "read_buffer_size" do
101
+ json_file "nodes/db-1.example.json"
102
+ json_path '$.mysqld.read_buffer_size'
103
+ mutation rand(1000)
104
+ end
105
+
106
+ param "query_cache_size" do
107
+ json_file "nodes/db-1.example.json"
108
+ json_path '$.mysqld.query_cache_size'
109
+ mutation rand(100)
110
+ end
111
+ ```
112
+
113
+ このDSLファイルは任意のファイル名でChefのリポジトリに含めてしまうことを推奨します。`dsl-file`を省略した場合は、カレントディレクトリの`gargor.rb`を探します。
114
+
115
+ ### 注意
116
+
117
+ `gargor`は、DSLファイルで指定されたChefのJSONを直接(問答無用で)書き換えます。`git stash`を使うなりしてオリジナルが消えないように配慮ください。
118
+
119
+ ## サンプルレシピ
120
+
121
+ `Chef`のサンプルレシピをTipsを交えてご紹介します。
122
+
123
+ ### mysql
124
+
125
+
126
+ ```ruby
127
+ # この時点で起動しようとすると以前の設定ファイルがおかしい場合にエラーが出てしまう
128
+ service "mysqld" do
129
+ action :nothing
130
+ end
131
+
132
+ template "/etc/my.cnf" do
133
+ source "www/my.cnf.erb"
134
+ notifies :restart,"service[mysqld]"
135
+ end
136
+
137
+ # ib_logfile0,1はib_logfile1はinnodb_log_file_sizeを変えるとエラーになるので毎回消す
138
+ file "/var/lib/mysql/ib_logfile0" do
139
+ action :delete
140
+ notifies :restart,"service[mysqld]"
141
+ end
142
+ file "/var/lib/mysql/ib_logfile1" do
143
+ action :delete
144
+ notifies :restart,"service[mysqld]"
145
+ end
146
+ ```
147
+
148
+ このテンプレートは以下のようになっています。`innodb_buffer_pool_size`を探索対象のパラメータにしたいのですが、「`innodb_log_file_size`を`innodb_buffer_pool_size`の25%にすべし」と注意書きがあるので、`innodb_log_file_size`を設定対象にして、`innodb_buffer_pool_size`をその4倍にしています。
149
+
150
+ ```
151
+ [mysqld]
152
+ datadir=/var/lib/mysql
153
+ socket=/var/lib/mysql/mysql.sock
154
+ user=mysql
155
+ # Default to using old password format for compatibility with mysql 3.x
156
+ # clients (those using the mysqlclient10 compatibility package).
157
+ old_passwords=1
158
+
159
+ # Disabling symbolic-links is recommended to prevent assorted security risks;
160
+ # to do so, uncomment this line:
161
+ # symbolic-links=0
162
+
163
+ skip-locking
164
+ query_cache_size = <%= node["mysqld"]["query_cache_size"] %>M
165
+ key_buffer = <%= node["mysqld"]["key_buffer"] %>K
166
+ max_allowed_packet = <%= node["mysqld"]["max_allowed_packet"] %>M
167
+ table_cache = <%= node["mysqld"]["table_cache"] %>
168
+ sort_buffer_size = <%= node["mysqld"]["sort_buffer_size"] %>K
169
+ read_buffer_size = <%= node["mysqld"]["read_buffer_size"] %>K
170
+ read_rnd_buffer_size = <%= node["mysqld"]["read_rnd_buffer_size"] %>K
171
+ net_buffer_length = <%= node["mysqld"]["net_buffer_length"] %>K
172
+ thread_stack = <%= node["mysqld"]["thread_stack"] %>K
173
+
174
+ skip-networking
175
+ server-id = 1
176
+
177
+ # Uncomment the following if you want to log updates
178
+ #log-bin=mysql-bin
179
+
180
+ # Disable Federated by default
181
+ skip-federated
182
+
183
+ # Uncomment the following if you are NOT using BDB tables
184
+ #skip-bdb
185
+
186
+ # Uncomment the following if you are using InnoDB tables
187
+ innodb_data_home_dir = /var/lib/mysql/
188
+ innodb_data_file_path = ibdata1:10M:autoextend
189
+ innodb_log_group_home_dir = /var/lib/mysql/
190
+ innodb_log_arch_dir = /var/lib/mysql/
191
+ # You can set .._buffer_pool_size up to 50 - 80 %
192
+ # of RAM but beware of setting memory usage too high
193
+ innodb_buffer_pool_size = <%= node["mysqld"]["innodb_log_file_size"]*4 %>M
194
+ innodb_additional_mem_pool_size = <%= node["mysqld"]["innodb_additional_mem_pool_size"] %>M
195
+ # Set .._log_file_size to 25 % of buffer pool size
196
+ innodb_log_file_size = <%= node["mysqld"]["innodb_log_file_size"] %>M
197
+ innodb_log_buffer_size = <%= node["mysqld"]["innodb_log_buffer_size"] %>M
198
+ innodb_flush_log_at_trx_commit = 1
199
+ innodb_lock_wait_timeout = 50
200
+
201
+ [mysqld_safe]
202
+ log-error=/var/log/mysqld.log
203
+ pid-file=/var/run/mysqld/mysqld.pid
204
+ ```
205
+
206
+ ### httpd
207
+
208
+ Apacheのパフォーマンスチューニングでは以下の様にしています。レシピには全く工夫はありません。
209
+
210
+ ```
211
+ service "httpd" do
212
+ action :nothing
213
+ end
214
+
215
+ template "/etc/httpd/conf/httpd.conf" do
216
+ source "www/httpd.conf.erb"
217
+ notifies :restart,"service[httpd]"
218
+ end
219
+ ```
220
+
221
+ ポイントは`MinSpareServers`と`MaxSpareServers`のように上下関係のあるパラメータの決定方法を以下のように`min_spare_servers`と`range_spare_servers`としている点です。また、`ServerLimit`=`MaxClients`としています。
222
+
223
+ ```
224
+ <IfModule prefork.c>
225
+ StartServers <%= node["httpd"]["start_servers"] %>
226
+ MinSpareServers <%= node["httpd"]["min_spare_servers"] %>
227
+ MaxSpareServers <%= node["httpd"]["min_spare_servers"] + node["httpd"]["range_spare_servers"] %>
228
+ ServerLimit <%= node["httpd"]["max_clients"] %>
229
+ MaxClients <%= node["httpd"]["max_clients"] %>
230
+ MaxRequestsPerChild <%= node["httpd"]["max_request_per_child"] %>
231
+ </IfModule>
232
+ ```
233
+
234
+ ## 負荷試験ツール
235
+
236
+ コマンドラインで使えるものであれば、大体使うことができます。サンプルでは、[グリーン破壊](https://github.com/KLab/green-hakai/)を使わせて頂きました。
237
+
238
+ 負荷試験の厳しさによって個体が全滅することがあります。すると以下のように表示され、プログラムが終了します。
239
+
240
+ ***** EXTERMINATION ******
241
+
242
+ これは、個体の環境が厳しすぎるためで負荷の条件を緩めて再度実施してください。
243
+
244
+ ## FAQ
245
+
246
+ ##### `gargor`はなんて読むの?
247
+
248
+ 「がるごる」
249
+
250
+ ## Contributing
251
+
252
+ 1. Fork it
253
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
254
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
255
+ 4. Push to the branch (`git push origin my-new-feature`)
256
+ 5. Create new Pull Request
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Gargor::VERSION
9
9
  spec.authors = ["Yoshihiro TAKAHARA"]
10
10
  spec.email = ["y.takahara@gmail.com"]
11
- spec.description = %q{It is software which uses generic algorithm to support parameter tuning of the servers controlled by Chef.}
12
- spec.summary = %q{An auto-tuning tool for internet servers w/ Genetic Algorithm and Chef. You can get good settings during sleeping ;) }
11
+ spec.description = %q{An auto-tuning tool for internet servers w/ Genetic Algorithm and Chef. You can get good settings during sleeping ;) }
12
+ spec.summary = %q{It is software which uses generic algorithm to support parameter tuning of the servers controlled by Chef.}
13
13
  spec.homepage = "https://github.com/tumf/gargor"
14
14
  spec.license = "MIT"
15
15
 
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  class Gargor
2
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
3
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gargor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-17 00:00:00.000000000 Z
12
+ date: 2013-06-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -43,8 +43,8 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- description: It is software which uses generic algorithm to support parameter tuning
47
- of the servers controlled by Chef.
46
+ description: ! 'An auto-tuning tool for internet servers w/ Genetic Algorithm and
47
+ Chef. You can get good settings during sleeping ;) '
48
48
  email:
49
49
  - y.takahara@gmail.com
50
50
  executables:
@@ -56,6 +56,7 @@ files:
56
56
  - Gemfile
57
57
  - LICENSE.txt
58
58
  - README.md
59
+ - README_ja.md
59
60
  - Rakefile
60
61
  - bin/gargor
61
62
  - gargor.gemspec
@@ -87,6 +88,6 @@ rubyforge_project:
87
88
  rubygems_version: 1.8.25
88
89
  signing_key:
89
90
  specification_version: 3
90
- summary: An auto-tuning tool for internet servers w/ Genetic Algorithm and Chef. You
91
- can get good settings during sleeping ;)
91
+ summary: It is software which uses generic algorithm to support parameter tuning of
92
+ the servers controlled by Chef.
92
93
  test_files: []