フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

EC2のAmazonLinuxにあるサービス「hibagent」とは何なのか?

amazon

AWSにてEC2構築中にchkconfig --listを叩いたら見慣れないものが。

hibagent        off   1:off   2:off   3:off   4:off   5:off   6:off

hibagentってなんだ??? しかも検索しても全く情報が出てこない謎。 てかついこの間検証機でコマンド叩いたときはなかったのに。

/etc/init.d/hibagent をみてみる

init系rcスクリプトなのでまずはファイルをみる。

#!/bin/bash
# hibagent daemon
# chkconfig: - 20 80
# description: EC2 instance hibernation agent
# processname: hibagent

DAEMON_PATH="/usr/bin"

NAME=hibagent
DESC="My daemon description"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/hibagent

DAEMON=hibagent
DAEMONOPTS="--config /etc/hibagent-config.cfg --pidfile $PIDFILE"
・・・

EC2 instance hibernation agentとあるのでEC2のhibernationを有効にするためのAgentでしょうか。

ハイバネーション(Hibernation)とはパーソナルコンピュータのオペレーティングシステム(以降OSと略)に備わる機能の一つで、電源を切断(シャットダウン)する前に、メインメモリが保持している内容を外部記憶装置(ハードディスクドライブ、以下ハードディスクと略)に待避させ、次にコンピュータを起動させた際、作業途中から再開できるようにする機能である。

ハイバネーション - Wikipedia

実際に動かしているdaemonをみてみよう。

[root@ip-xxx bin]# file /usr/bin/hibagent
hibagent: Python script, ASCII text executable

まさかのpythonスクリプト。バイナリじゃないのか。ラッキー。

/usr/bin/hibagentを見てみる

説明はこちら。

#!/usr/bin/python2.7
# The EC2 Spot hibernation agent. This agent does several things:
# 1. Upon startup it checks for sufficient swap space to allow hibernate and fails
#    if it's present but there's not enough of it.
# 2. If there's no swap space, it creates it and launches a background thread to
#    touch all of its blocks to make sure that EBS volumes are pre-warmed.
# 3. It updates the offset of the swap file in the kernel using SNAPSHOT_SET_SWAP_AREA ioctl.
# 4. It daemonizes and starts a polling thread to listen for instance termination notifications.
#
# This file is compatible both with Python 2 and Python 3

和訳

#!/ usr / bin / python2.7
#EC2スポットハイバネーションエージェント。このエージェントはいくつかのことを行います:
#1.起動時に、休止状態を許可して失敗するのに十分なスワップ領域があるかどうかを確認します
#もしそれが存在するが、十分ではない。
#2。スワップスペースがない場合は、スワップスペースを作成し、バックグラウンドスレッドを起動して
#すべてのブロックをタッチして、EBSボリュームが予熱されていることを確認します。
#3。SNAPSHOT_SET_SWAP_AREA ioctlを使用して、カーネル内のスワップファイルのオフセットを更新します。
#4。ポーリングスレッドをデーモン化して起動し、インスタンス終了通知を待ち受けます。
#
#このファイルは、Python 2とPython 3の両方と互換性があります

「インスタンス通知=ハイバネーション時」にメモリ上のファイルをスワップ(EBS)へ退避。 スワップサイズが足りないなら物理ファイル(swapfile)として格納という感じでしょうか。

結論

EC2をハイバネーションするならメモリを高速展開できるようになるので有効にしてもよさそうですね。