中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

Graviton2のアクセラレータの効果

前回の続き 2020-06-18から1日間の記事一覧 - 中年engineerの独り言 - crumbjp

2xlarge以上は圧縮アクセラレータが付くらしい

https://d1.awsstatic.com/events/reinvent/2019/REPEAT_1_Deep_dive_on_Arm-based_EC2_instances_powered_by_AWS_Graviton_CMP322-R1.pdf

P24.

• 1Tbit/s of compression accelerators
 • 2xlarge and larger instances will have a compression device
 • DPDK and Linux kernel drivers will be available ahead of GA
 • Data compression at up to 15GB/s and decompression at up to 11GB/s

本番をサーバの負荷

・c6g.xlarge x 11 から c6g.2xlarge x 10 に変更

f:id:hiroppon:20200720173617p:plain
CPU

微妙にCPU数が減っているにも関わらず負荷は低減した。 プロセスの構成は、nginx => nodejs (express) 。

・nginx のCPU負荷が劇的に低減 => gzip on; の部分が効いたと思われる。

・nodejsの負荷も下がった。socketIOのペイロード圧縮部分が効いていると思われる。

というわけで、c6g.xlarge x2 よりは c6g.2xlarge x1 の方がお得。

AWS Graviton、Graviton2 インスタンス別性能

前回の続報 crumbjp.hateblo.jp

ARM64バイナリ用のインスタンスタイプ別の状況

網羅的にやる気は無く、自分に必要な範囲で調べただけ。

instance type CPU能力 SPOT AZ
a1系 m6gの半額程度 潤沢 1a,1d
m6g系 c6gと遜色なし 買える 1a, 1c
c6g系 枯渇 1a, 1c
r6g c6gと同程度? 枯渇 1a, 1c

見ての通り a1系(Graviton)は性能が低いが スポット在庫が安定しているのでコストメリットが高い。 しかしAZの取り回しが面倒だ。

スポットの価格も1dの方が格段に安い

f:id:hiroppon:20200618122242p:plain:w300

フットワークの軽いインフラ屋さんが居ないと使いにくいが利益はある。

CPU実測

f:id:hiroppon:20200618122610p:plain:w300

水:m6g.xlarge、橙:a1.xlarge、他:c6g.xlarge

間違いなくm6gはお得。

AWS Graviton2

最大40%のコストカット!

aws.amazon.com

魅力的だが、ARMアーキテクチャのプロセッサなのでバイナリから違うのが面倒くさい。 サラのOSディストリビューションから作り直しなので現行のサービスでテストするにはかなりの障壁。 人柱記事が出てくるまで時間がかかりそうだ。

僕は人柱は滅多にやらない主義なのだけど 価格の魅力に負けて食いついた。

ubuntu18.04 ARM64の問題

ubuntu-defaults-jaが提供されてない!

でも、幸いな事にこれ以外に大きい問題はなかった。 コレくらいなら、by hand でなんとかできそう。

オンデマンドの価格

c5系の80%の値付けになっている。 Amazonは40%のコスト削減が出来ると大口を叩いているがCPUが相当早いということかな?

aws.amazon.com

タイプ CPUs モリー 価格/h
c5.xlarge 4 8GiB $0.1712
c6g.xlarge 4 8GiB $0.214

プロダクションに適用

www.gacraft.jp

アドネットプラットフォームの処理は、CPU処理が多く、DB処理が少ない(殆どをキャッシュで処理するため)。 また少しでも早くレスポンスを返したい為、C系のサーバーを使っている。 この環境に1台混ぜてみる。(STGインスタンスタイプを小さいモノにしてケチって居たためよく解らなかった。。)

CPU使用率

f:id:hiroppon:20200616124611p:plain
CPU
設定をミスってリクエストが寄り過ぎて焦って落としたのはご愛嬌w

  • 一番下の水色 c6g.xlarge
  • 中央の塊が c5.xlarge
  • 上の2つが m3.xlarge

m3はスポットインスタンス(c5が枯渇して買えない為・・・)。ECUが全然違うので、同じxlargeでも全然違いますな。 そして肝心のc6gは、顕著に早いって訳ではないが、c5相当のECU換算20以上はありそうだ。 なので、Amazonの40%は吹きすぎ(CPUだけの話じゃないのかな?)だが、リーズナブルである事は間違いない。

socket.io が nodejs12系で落ちる

なんで今のコードでnodejs10系では問題にならなかったのかが解らないのだけど、ずっと問題なく動いていた。 それがnodejs12系では落ちる様になった。(EPIPE)

github.com

とりあえずPRを送っておいたが、取り込まれるまで待てないので socket.io からforkしてそっちを使うことにする。

github.com

package.json にはこんな感じで指定すればいい。

"dependencies": {
  "socket.io": "crumbjp/socket.io#2.3.0_patched"

mecab-gyp 1.0.6 nodejs12対応

mecab-gyp

nodejsmecab を扱いたい時、選択肢がほとんどない。 オプションが渡せなかったりforkしてるモジュールだったりで使い物にならない。

仕方がないので自分で作っているのだが、nodejs10 -> nodejs12 でv8.hが大きく変わってコンパイル出来なくなった。 引数や戻り値の受け渡しの部分なので、ほとんどのネイティブコール系のモジュールが影響を受け、こんな感じの対応が必要。

github.com

mecab-ipadic-neologd 池田さん森さん問題

mecab-ipadic-neologd

github.com

mecabの精度を劇的に上げてくれるのだけど、頑張りすぎな所があって、、

mecab -d ./lib/mecabdic <<< '森さん池田さん'
森さん       名詞,固有名詞,人名,一般,*,*,森さん,モリサン,モリサン
池田  名詞,固有名詞,人名,姓,*,*,池田,イケダ,イケダ
さん  名詞,接尾,人名,*,*,*,さん,サン,サン
EOS

森さん は特別扱いか・・・

ちなみに ipadic のままだと

mecab  <<< '森さん池田さん'
森     名詞,固有名詞,人名,姓,*,*,森,モリ,モリ
さん  名詞,接尾,人名,*,*,*,さん,サン,サン
池田  名詞,固有名詞,人名,姓,*,*,池田,イケダ,イケダ
さん  名詞,接尾,人名,*,*,*,さん,サン,サン
EOS