自分メモ

あくまで自分メモ用で、適当に更新中です。
ベアメタルクラウドでは性能が問題になるケースが多いので、過去に読んだ記事の中で良さそうなものもまとめている。あとでもう一度再分類する。

#全般
* [マルレク講演資料集](
https://www.facebook.com/notes/%E4%B8%B8%E5%B1%B1-%E4%B8%8D%E4%BA%8C%E5%A4%AB/%E3%83%9E%E3%83%AB%E3%83%AC%E3%82%AF%E8%AC%9B%E6%BC%94%E8%B3%87%E6%96%99%E9%9B%86/10203851700590435?pnref=lhc)

* Brendan D. Greggのホームページ。LinuxやXenの性能系記事が豊富。
http://www.brendangregg.com/index.html

* 新城靖先生の講義資料
http://www.coins.tsukuba.ac.jp/~yas/coins/

* Linuxカーネルの基本機能
http://itpro.nikkeibp.co.jp/article/COLUMN/20080501/300463/

#CPUベンチマーク情報
* [CPU Benchmark](http://cpubenchmark.net/cpu_list.php)

#Hyper-Threading
SoftLayerではデフォルトでonになっているハズだが、必要に応じてTicketを起票してoffってもらう。機種によってはBIOSまで初期化されないかもしれないので、誰かがHPC目的でoffに依頼したサーバーが解放された後、別のアカウントが利用する際にはoffのままになっているかもしれない。ベアメタルサーバーを使うときには常にチェックしておいた方が良い気がする。

物理サーバーでHyper-ThreadingがONになっていればThread(s) per coreが2になっていると思う。

```
物理サーバー
# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
CPU(s):                12
Thread(s) per core:    2
Core(s) per socket:    6
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Stepping:              4
CPU MHz:               1791.972
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              15360K

仮想サーバー
# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Stepping:              2
CPU MHz:               2000.072
BogoMIPS:              4000.14
Hypervisor vendor:     Xen
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              35840K
NUMA node0 CPU(s):     0

```

#Intel TXT
[Intel TXTテクノロジーの設定を確認してみました on SoftLayer](
https://www.ibm.com/developerworks/community/blogs/560da618-352c-4903-9e75-2dadfda71076/entry/intel_txt%25e3%2583%2586%25e3%2582%25af%25e3%2583%258e%25e3%2583%25ad%25e3%2582%25b8%25e3%2583%25bc%25e3%2581%25ae%25e8%25a8%25ad%25e5%25ae%259a%25e3%2582%2592%25e7%25a2%25ba%25e8%25aa%258d%25e3%2581%2597%25e3%2581%25a6%25e3%2581%25bf%25e3%2581%25be%25e3%2581%2597%25e3%2581%259f1?lang=en)

#時刻同期とタイムゾーン

```
# rpm -qa|grep glibc
glibc-common-2.12-1.149.el6_6.5.x86_64
glibc-2.12-1.149.el6_6.5.x86_64
glibc-headers-2.12-1.149.el6_6.5.x86_64
glibc-devel-2.12-1.149.el6_6.5.x86_64

# rpm -ql glibc-2.12-1.149.el6_6.5.x86_64 | grep localtime
/etc/localtime
```

CentOS6/RHEL6では、/etc/localtimeをせっかく編集しても、glibcを更新すると/etc/localtimeはデフォルト値に変更されてタイムゾーンが戻ってしまう。よってhttp://d.hatena.ne.jp/nekoruri/20150130/glibclocaltime に従って/etc/sysconfig/clockを更新してあげるのがスマートなやり方のはずだが、SoftLayerのデフォルトのタイムゾーンがCDTになっているのが気になる。

```
# date
Fri Apr  3 19:42:27 CDT 2015

# cat /etc/sysconfig/clock
ZONE="America/Chicago"
```

たまにWindowsで日本時間に設定していたのに、Standard ImageやFlexImageで展開すると15時間ずれてしまうことがあるので、もしかしたらSoftLayerはHardware ClockをDallasのLocal Timeに設定しているかもしれない。WindowsのHardware ClockはLocal Time一択なので、管理の都合を考えると、世界中でDallas時間にしている気がする。下手に/etc/sysconfig/clockをいじって・・・っていう気もするので、とりあえずヘタレらしく、

```
# cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```
で済ます。
（参考）
http://d.hatena.ne.jp/nekoruri/20150130/glibclocaltime
http://park12.wakwak.com/~eslab/pcmemo/clock/clock2.html

#Security
FlexImageを使うためにはrootアクセスが必要。またNimSoftやeVault等を導入する場合は、プロビジョニング時にrootアクセスが必要。FlexImageも使用せず、SoftLayerを素材のまま使うのであれば、セキュリティのためにもrootによるSSHアクセスは禁止した方がよい。最悪、KVM/IPMIでログインできるので。
rootアクセスが必要な場合は、普段はパスワード認証を切って秘密鍵認証を利用し、必要な時にパスワード認証を許可するという方法でも良いかもしれない。

最近よくやるのは、以下のようにSSHポートをデフォルトの22番以外にもう一つ開けておき（例では20022）、外部からのSSHアクセスは22番ではなく20022のみをiptablesに設定すること。Private側の内部通信によっては22番アクセスが欲しいことがあるので。ユーザーやアクセス元で制限すると更に良いのだけど、とりあえず外部から見えるSSHポート番号が変わるだけで、攻撃は激減するので、大抵はこれで十分。
pingの許可はStandard Monitoringを利用するならば、http://knowledgelayer.softlayer.com/faq/what-ip-ranges-do-i-allow-through-firewall などの情報を利用して限定許可した方が良さそう（個人的にはStandard Monitoringも使わないからpingもブロックする）


```
# vi /etc/ssh/sshd_config
Port 22
Port 20022
# service sshd restart

# vi /etc/sysconfig/iptables
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#--------------------------------------------------
# SSH from local NW
#--------------------------------------------------
-A INPUT -i lo -j ACCEPT

#--------------------------------------------------
# SSH from private NW
#--------------------------------------------------
-A INPUT -i eth0 -j ACCEPT

#--------------------------------------------------
# SSH from public NW
#--------------------------------------------------
-A INPUT -i eth1 -p tcp -m tcp --dport 20022 -j ACCEPT
#-I INPUT -i eth1 -p icmp --icmp-type 0 -j ACCEPT
#-I INPUT -i eth1 -p icmp --icmp-type 8 -j ACCEPT

# service iptables restart
```


#プロセス周り
* top でプロセスがスリープしている関数名を表示する
http://d.hatena.ne.jp/yohei-a/20141230/1419888007

* top でプロセスが使っていたCPU番号を表示する
http://d.hatena.ne.jp/yohei-a/20141222/1419250301

* top -H でCPU使用率の高いスレッドを調べる
http://d.hatena.ne.jp/yohei-a/20141222/1419249841

* 実行中のプロセスのlimits制限を確認するには/proc/<PID>/limitsを参照

```
# ps -ef|grep mysqld|grep -v grep
root      5995     1  0 08:58 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql     6097  5995  0 08:58 pts/0    00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

# cat /proc/6097/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7487                 7487                 processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7487                 7487                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

```

* vmstat の"r"列とマクドナルドのレジカウンター
http://d.hatena.ne.jp/yohei-a/20101206/1291668680

* 割り込みについて調べてみました
http://d.hatena.ne.jp/yohei-a/20120117/1326810276

* vmstatでは、syにハードウェア割込み（%irq）やソフトウェア割込み（%soft）をカウントする。
http://d.hatena.ne.jp/yohei-a/20141006/1412586309

* mpstatでは、割込みは%sysにはカウントされず、ハードウェア割込みは%irq、ソフトウェア割込みは%softにカウントされる。
http://d.hatena.ne.jp/yohei-a/20121025/1351160339

* sysのCPU使用率が高い場合にその内訳を調べる方法
http://d.hatena.ne.jp/yohei-a/20131208/1386485282

* ps で表示されるCPU使用率 = CPU時間 / 実行時間
http://d.hatena.ne.jp/yohei-a/20141223/1419356325

* xargsを使って複数プロセスで並列実行

```
-P5で5プロセスで実行
cat downloadurl.list | xargs -L1 -P5 curl
```

#メモリ周り
* swappiness

```
# cat /proc/sys/vm/swappiness
60
# vi /etc/sysctl.conf
vm.swappiness = 0
# sysctl -p 
```

* swapしたデータをメモリに戻す

```
swap領域の確認
# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/xvdb1                              partition       2096444 0       -1

swap領域を無効化してスワップ領域のデータをメモリにもどす
# swapoff /dev/xvdb1

/etc/fstabに記述されているswap deviceを有効化する
# swapon -a
```


* /proc/meminfoを考える
http://enakai00.hatenablog.com/entry/20110906/1315315488

* /proc/meminfo の Inactive は利用可能なメモリ領域ではない
http://d.hatena.ne.jp/yohei-a/20141230/1419910742

* Linux で物理メモリに割り当てられた共有メモリは cahced に計上される
http://d.hatena.ne.jp/yohei-a/20110813/1313203883
http://d.hatena.ne.jp/yohei-a/20120527/1338131729

# Disk構成

* fiskよりlsblkやparted。ずっと読みやすい。

```
# lsblk
NAME                                           MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
loop0                                            7:0    0  100G  0 loop
└─docker-202:2-1089543-pool (dm-2)             253:2    0  100G  0 dm
loop1                                            7:1    0    2G  0 loop
└─docker-202:2-1089543-pool (dm-2)             253:2    0  100G  0 dm
xvdb                                           202:16   0    2G  0 disk
└─xvdb1                                        202:17   0    2G  0 part  [SWAP]
xvda                                           202:0    0   25G  0 disk
├─xvda1                                        202:1    0  256M  0 part  /boot
└─xvda2                                        202:2    0 24.8G  0 part  /
sda                                              8:0    0   20G  0 disk
└─3600a09803830304d485d46366a524974 (dm-0)     253:0    0   20G  0 mpath
  └─3600a09803830304d485d46366a524974p1 (dm-1) 253:1    0   20G  0 part
sdb                                              8:16   0   20G  0 disk
└─3600a09803830304d485d46366a524974 (dm-0)     253:0    0   20G  0 mpath
  └─3600a09803830304d485d46366a524974p1 (dm-1) 253:1    0   20G  0 part
```

```
# parted -l
Model: NETAPP LUN C-Mode (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  21.5GB  21.5GB  primary  ext4


Model: NETAPP LUN C-Mode (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  21.5GB  21.5GB  primary  ext4


Model: Linux device-mapper (thin-pool) (dm)
Disk /dev/mapper/docker-202:2-1089543-pool: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End    Size   File system  Flags
 1      0.00B  107GB  107GB  ext4


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/3600a09803830304d485d46366a524974p1: 21.5GB
Sector size (logical/physical): 512B/4096B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  21.5GB  21.5GB  ext4


Model: Linux device-mapper (multipath) (dm)
Disk /dev/mapper/3600a09803830304d485d46366a524974: 21.5GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  21.5GB  21.5GB  primary  ext4


Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  2147MB  2147MB  primary  linux-swap(v1)


Model: Xen Virtual Block Device (xvd)
Disk /dev/xvda: 26.8GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  269MB   268MB   primary  ext3         boot
 2      269MB   26.8GB  26.6GB  primary  ext3

```

# I/O
* iostatの見方
http://d.hatena.ne.jp/yohei-a/20110711/1310396665

* Linux の iostat の出力結果を銀行のATMに例えて説明してみる
http://d.hatena.ne.jp/yohei-a/20111203/1322909311

* iostat -x の出力を Linux Kernel ソースコードから理解する
http://blog.etsukata.com/2013/10/iostat-x-linux-kernel.html
r/s: read request per second
w/s: write request per second
r/s + w/s: IOPS(I/O request per second)
await: （キューにいる時間＋実際のディスクでの処理時間）の平均値（単位ミリ秒）
svctm: 実際のディスクでの処理時間の平均値（単位ミリ秒）
svctm: 一回のI/O発行にかかる時間(リクエストがキューに積まれている時間を含まない)の平均値。単位はミリ秒。
もしディスクがフル稼働であれば、(r/s + w/s)*svctmは

* iostat はどのように %util を算出しているか(1)-(3)
http://d.hatena.ne.jp/yohei-a/20130923/1379950413
http://d.hatena.ne.jp/yohei-a/20130925/1380070554
http://d.hatena.ne.jp/yohei-a/20141013/1413167192

* ファイルが O_DIRECT フラグを指定してオープンされているか確認する方法
http://d.hatena.ne.jp/yohei-a/20131016/1381934605

#ネットワーク
* [Linuxでロードバランサやキャッシュサーバをマルチコアスケールさせるためのカーネルチューニング](
http://yuuki.hatenablog.com/entry/linux-networkstack-tuning-rfs)

* [Linuxにおけるカーネルパケット転送](
http://www.slideshare.net/m-asama/linux-packetforwarding)

* [10GbE時代のネットワークI/O高速化](
http://www.slideshare.net/syuu1228/10-gbeio)

* bondingでActiveなインターフェースの確認方法と変更方法
http://d.hatena.ne.jp/yohei-a/20140915/1410799829

下記はLACP（IEEE 802.3ad）の例だが、

```
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 250
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
        Aggregator ID: 2
        Number of ports: 1
        Actor Key: 9
        Partner Key: 17
        Partner Mac Address: 02:1c:73:43:bc:0b

Slave Interface: eth2
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:25:90:f2:e7:e0
Aggregator ID: 1
Slave queue ID: 0

Slave Interface: eth0
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:25:90:f2:e7:de
Aggregator ID: 2
Slave queue ID: 0

```



#画像処理

* [マルチコアを用いた画像処理](
http://www.slideshare.net/FukushimaNorishige/ssii-33751285)