Big-endian vs Little-endian

 

Big-endian vs Little-endianって?

ビッグエンディアンとリトルエンディアンという単語は、ジョナサン・スウィフトの風刺小説『ガリヴァー旅行記』の中のエピソードに由来する。ガリバー旅行記の第1部「小人国」では、卵を丸い方(大きい方)の端から割る人々 (英: Big Endians) と尖った方(小さい方)の端から割る人々 (Little Endians) との対立が描かれている。

image vs image

ちっぽけなことで喧嘩していた「小人国」たち。でも今の政治もそうではないのかな?(日本も韓国も)

話に戻ってコンピュータの世界では「CPUがメモリにデータを保存する時、どの順番で保存するのか」の定義により「ビッグエンディアンとリトルエンディアン」に単語で分かれる

「どの順番に保存するかによる」っていう文章だけだとちっぽけなことかもしれないが、メモリ分析を正確にするために欠かせない内容である

これから二つの違いについて説明しましょう

Big Endian

データの上位バイトからメモリに並べる方式

12 34 56 78だとそのまま12 34 56 78でメモリに入れるので人間が読みやすい(デバッグしやすい)

この方式の良いところは、初めてのバイトだけ取得して数値の比較ができるため速度が速い

12 34 56 78 vs 09 97 56 76を比べるとしたら初めてのバイトである「1」と「0」だけ比べれば12 34 56 78が多いというのがわかるからね!なるほど(桁数が一致するという前提でね)

 

image

 

 

Little Endian

データの下位バイトからメモリに並べる方式

12 34 56 78だと 78 56 34 12になるので人間が読む順と逆(あれ?って思うね)

Little Endianは奇数か偶数かという判別をする時にBig Endianより早いという長所がある

また、演算する時もBig Endianより速い

理由としてはCPUの中で演算を行うALUが下位から上位の順でメモリを読み込むので同じ方式にした方がきっと早いだろう

またポイントの値を参照する時に有利

image

 

 

 

ベンダーことのByte Orderingが違う

言い忘れましたが、ビッグエンディアンとリトルエンディアンのようにバイトを保存する順番のことをByte Orderingとも呼ぶ

もし違うByte Orderingを使ってる二つのPCがネットワーク通信をしようとするとByte Orderingを統一させる作業必要

その例としてはhtons(),htonl()inet_addr()関数が使われる。

後TCP/IPの標準はBig Endianである

CPUベンダーごとに使ってるByte Orderingは以下の通り

image

X86はLittle Endianか、、つまりほとんどのIntelデスクトップはLittle Endianであること

 

 

htonl,htons関数の使用例

以下のようなプログラムを作って実行してみた

vim testmemory.c
#include <stdio.h>
#include <netinet/in.h>

int main(int argc, char **argv)
{
        int data = 1234;
        int data2 = 123456789;
        int data3;

        printf("%04x\n", data);
        printf("%04x\n", data2);
        printf("network byte order 2byte: 0x%04x\n", htons(data));
        printf("network byte order 4byte: 0x%08x\n", htonl(data2));

        return 0;
}

 

結果:

gcc testmemory.c
./a.out
04d2
75bcd15
network byte order 2byte: 0xd204
network byte order 4byte: 0x15cd5b07

保存されているデータの位置が4byte基準で逆になっていることがわかる

7 5b cd 15 -> 15 cd 5b 07

7に0がついてるのは16進数にした時点で0を省略していたからです。

 

参考したページ:

http://firejune.com/1790/%EB%B9%85%EC%97%94%EB%94%94%EC%95%88%EA%B3%BC+%EB%A6%AC%ED%8B%80%EC%97%94%EB%94%94%EC%95%88+%EA%B0%9C%EB%85%90

http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/endian

http://shinluckyarchive.tistory.com/284

http://www.hackerschool.org/Sub_Html/HS_University/BOF/essential/PDF_Files/11.pdf

http://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8

http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3

https://www.uquest.co.jp/embedded/learning/lecture08.html

Amazon EC2のデータ転送量と課金まとめ

 

Internet Data Transfer

 

インターネットからEC2内の転送は無料

 

EC2からインターネット上ののマシンに送られるデータ

異なるリージョンをまたいで送られるデータ

1GBあたり$0.201、日本円で約15円

 

つまり課金対象となるのはEC2側から見てOUTのデータのみ

 

Availability Zone Data Transfer

同一リージョン間のデータ通信は無料

 

Regional Data Transfer

同一リージョン(例:東京)にある、異なるAZ間(例:ap-northeast-1aとap-northeast-1b)のデータ通信は課金対象(だけど、休め)

1GBあたり$0.01

 

Public and Elastic IP and Elastic Load Balancing Data Transfer

同一リージョン内での通信にグローバルIPアドレス(インスタンスのPublicなIPアドレス、Elastic IP、ELB)を使った場合

1GBあたり$0.01

 

 

https://www.scutum.jp/information/waf_tech_blog/2011/08/waf-blog-004.html

nomadとは

 

NomadはEasily deploy applications at any scaleというリード文からあるように、アプリケーションをデプロイするスケジューラ

 

比較対象:Amazon ECSやKubernetes、Mesos with Aurora

 

http://tbpgr.hatenablog.com/entry/2015/09/29/224231

https://www.hashicorp.com/blog/nomad.html

http://dev.classmethod.jp/tool/nomad-otto-ataglance/

openNMS

 

openNMSとは

Javaで作られているネットワーク管理アプリケーションである

postgreSQLだけサポートする

한 번의 설치로 수많은 부호까지 규모를 확장할 수 있도록 디자인된 오픈NMS는 네트워크 서비스를 자동으로 알아낼 수 있으며

애플 iOS용 이동식 클라이언트도 등장해 있는 상태

あんまり知られてないのかな?資料が足りない。

様々なリソースを監視してグラフで表示してくれるソフトである。

特徴としてはネットワークリソースの監視とは異なりWeb/DHCP/DNS、そしてデータベースアクセスなどのサービスを対象としている

http://www.itworld.co.kr/insight/63982

openNMS超基本味方

image

上記のNode IDからエージェントを検索

 

それから検索されたホストをクリックする

 

image

 

それからResource Graphsをクリック

 

すると以下のような画面が出る

image

よくわからないのでGraph Allするとすべてのグラフが出力される

 

image

 

NetAppのI/O状況も見れる

image

NFS -> netapp(cash -> hdd)

NetApp NFS v3 Read/Write = NFS apiからcashまでのR/W平均数

Start NRG-Graphing for NetApp Disk IO = cashからhddまでのI/Oの容量

cashまで行く経路と実存のディスクまで書き込みするグラフが分かれてるので原因切り分けするのによさげな感じする

 

chef利用してopenNMS設置

http://cloud.biglobe.ne.jp/hosting/blog/tech/20130924193759

 

postgresql

https://supermarket.chef.io/cookbooks/postgresql

cookbook ‘postgresql’, ‘~> 3.4.20′

node/xx.json

{
“postgresql”: {
“password”: {
“postgres”: “pwpw”
}
},
“run_list”: [“recipe[postgresql::server]”]
}

 

knife solo cook xx@xx

 

cookbook ‘opennms’, ‘~> 16.0.0′

そのままインストールできなかった

vim ./cookbooks-2/opennms/attributes/default.rb

僕の場合yumインストールが指定されたバージョンのものがなかったのでエラーとなった

 

後はpostgresqlのパスワードを指定しなくて怒られた

 vim /opt/opennms/etc/opennms-datasources.xml

にてpostgresqlのパスワード指定して

 

再度実行したらうまくいった

https://supermarket.chef.io/cookbooks/opennms

 

 

 

おわったら

 

host:8090/opennms

admin/admin

うまくいった

 

 

設定

 

 

 

 

http://gmt-24.net/archives/400

Orchestration(オーケストレーション)について

オーケストレーションには以下二つの意味に分けられると思う

あるサーバの状態に合わせて、実行する内容を動的に変える

capistrano, fabric, MCollectiveなどが該当 

サーバ同士が相互的にコミュニケーションして統制する

Serf、Apache Mesosが相当

 

参考

http://blog.shibayu36.org/entry/2013/12/09/193856