2014/02/28

linux fstab

<file system>        <dir>         <type>    <options>             <dump> <pass>

例:
1.1.1.1:/vol/dstvol5 /data          nfs     bg,hard,intr,rsize=32768,wsize=32768,tcp,vers=3,nolock 0 0

     <options> - 使用されるファイルシステムのマウントオプション。マウントオプションにはファイルシステム固有のものもあることに気をつけて下さい。最も一般的なオプションは:

        auto - 起動時、または mount -a コマンドが実行されたときに自動でマウントします。
        noauto - 自動ではマウントしません。
        exec - ファイルシステム上のバイナリの実行を許可します。
        noexec - ファイルシステム上のバイナリの実行を禁止します。
        ro - ファイルシステムを読み込み専用でマウント。
        rw - ファイルシステムを読み書き可能でマウント。
        user - 全てのユーザーにファイルシステムのマウントを許可します。上書きしないかぎり、自動で noexec, nosuid, nodev も有効になります。
        users - ユーザーグループに入っている全てのユーザーにファイルシステムのマウントを許可します。
        nouser - root だけにファイルシステムのマウントを許可します。
        owner - デバイスの所有者にマウントを許可します。
        sync - I/O は同期されます。
        async - I/O は非同期で行われます。
        dev - ファイルシステム上の特別なデバイスを解釈します。
        nodev - ファイルシステム上の特別なデバイスを解釈しない。
        suid - suid や sgid ビットの操作を許可します。ほとんどの場合、一時的な権限で特別な作業を行うためにユーザーがバイナリ実行可能ファイルを実行できるようにするため使われます。
        nosuid - suid や sgid ビットの操作を禁止します。
        noatime - ファイルシステムの inode アクセス日時を更新しません。パフォーマンスの向上に役立ちます (#atime オプション を見て下さい)。
        nodiratime - ファイルシステムのディレクトリの inode アクセス日時を更新しません。パフォーマンスの向上に役立ちます (#atime オプション を見て下さい)。
        relatime - 変更日時にあわせて inode アクセス日時を更新します。以前のアクセス日時が現在の変更日時よりも前のときだけアクセス日時が更新されます (noatime に似ていますが、変更されたあとファイルが読み込まれたか知る必要がある mutt などのアプリケーションを破壊しません)。パフォーマンスの向上に役立ちます (#atime オプションを見て下さい)。
        discard - ブロックがフリーになったときにブロックデバイスに TRIM コマンドを実行します。ファイルシステムが SSD 上にあるときは使うことが推奨されています。
        flush - データを頻繁にフラッシュする vfat のオプション。全てのデータが書き込まれるまではコピーダイアログやプログレスバーは止まったままになります。
        nofail - 存在するときはデバイスをマウントし、存在しないときは無視します。起動時にリムーバルメディアのエラーが報告されるのを防止します。
        defaults - 使われるファイルシステムのデフォルトのマウントオプション。ext4 のデフォルトのオプションは: rw, suid, dev, exec, auto, nouser, async。
        rsize=n        NFS        サーバからファイルを読み込む際に、        NFS
                       が用いるバッファのバイト数
                       を指定する。デフォルト値はカーネルに依存する。現在は
                       1024         バイト。         (しかし         rsize=8192
                       でうまく動作するようなら、転送速度は大い向上する。)

        wsize=n        NFS          サーバにファイルを書すむ際に、         NFS
                       が用いるバッファのバイト数を
                       指定する。デフォルト値はカーネルに依存する。現在は  1024
                       バイト。               (しかし                wsize=8192
                       でうまく動作するようなら、転送速度は大い向上する。)

        timeo=n        RPC  タイムアウトの後、最初の再送を行うまでの時間を 1/10
                       秒単位で指定す    る。デフォルトは     7(つまり     0.7
                       秒)。最初のタイムアウトの後は、タイム
                       アウトの時間は倍々される。これはタイムアウトが最大値の
                       60 秒になるか、 あるいは再送の回数が指定した値よりも大-
                       くなって、メジャータイムアウト
                       となるまで続けられる。メジャータイムアウトになると、ファイルシステムがハード
                       マウントされている場合には、新たなタイムアウトシーケンスが初期値を
                       2
                       倍にして再び試みられる(シーケンス内部でのタイムアウトは倍々)。タイム
                       アウトの最大値は常に                                  60
                       秒である。ネットワークが混雑している、サーバが
                       遅い、経路に複数のルータまたはゲートウェイがある、などの場合には、このタ
                       イムアウトを増やすと全体の税修鮓上させることがで-
                       るかもしれない。

        retrans=n      マイナータイムアウトと再送の合計数がこの値を超えるとメジャータイムアウ
                       トとなる。デフォルトは                                 3
                       回。メジャータイムアウトが起こると、ファイル
                       操作は中断されるか、あるいは"server   not    responding"
                       のメッセージがコン ソールに表示される。

        acregmin=n     一般のファイル  (regular  file)  の属  (attribute) が-
                       ャッシュされる            最小の時間を秒単位で指定する。
                       この時間内では、サーバーへの新たな情報の問い合わせは行われない。
                       デフォルトは 3 秒。

        acregmax=n     一般のファイルの属世-
                       ャッシュされる最大の時間を秒単位で指定する。
                       この時間を越えると、必ずサーバーへ新たな情報の問い合わせが行われる。
                       デフォルトは 60 秒。

        acdirmin=n     ディレクトリの属世-
                       ャッシュされる最小の時間を秒単位で指定する。
                       この時間内では、サーバーへの新たな情報の問い合わせは行われない。
                       デフォルトは 30 秒。

        acdirmax=n     ディレクトリの属世-
                       ャッシュされる最大の時間を秒単位で指定する。
                       この時間を越えると、必ずサーバーへ新たな情報の問い合わせが行われる。
                       デフォルトは 60 秒。

        actimeo=n      acregmin,       acregmax,       acdirmin,       acdirmax
                       すべてを同じ値にする。デフォルト値はない。

        retry=n        フォアグラウンド、またはバックグラウンドでの         NFS
                       マウントオペレーショ
                       ンが、リトライを放棄するまでの時間を指定する。デフォルトは
                       10000 分 (だいたい一週間) である。

        namlen=n       NFS   サーバが   RPC   マウントプロトコルのバージョン  2
                       をサポートしていない
                       場合に、このオプションを用いるとリモートファイルシステムにおいてサポー
                       トされているファイル名の最大長を指定でい襦これは  POSIX
                       pathconf                                            関数
                       をサポートするために用いられる。デフォルトは 255文字。

        port=n         NFS  サーバに接続する際のポート番号を指定する。指定が  0
                       (デフォルト)             の             場合、用いるべ-
                       ポート番号をリモートホストのポートマッパーに尋ねる。も
                       しリモートホストの                                   NFS
                       デーモンがポートマッパーに登録されていなければ、
                       一般的なNFS ポート番号である 2049 を使用する。

        mountport=n    mountd のポート番号を指定する。

        mounthost=name mountd が起動されているホスト名を指定する。

        mountprog=n    リモートホストの                                   mount
                       デーモンに接続する際に、通常と異なる     RPC      プログ
                       ラム番号を用いる。このオプションは複数の             NFS
                       サーバが動作しているホス
                       トに対して用いると便利である。デフォルトは        100005
                       で、これは                  mount                   デー
                       モンに対して標準的に用いられるプログラム番号である。

        mountvers=n    リモートホストの                                   mount
                       デーモンに接続する際に、通常と異なる    RPC     バージョ
                       ン番号を用いる。このオプションは複数の               NFS
                       サーバが動作しているホスト
                       に対して用いると便利である。デフォルトは 1。

        nfsprog=n      リモートホストの                                     NFS
                       デーモンに接続する際に、通常と異なる     RPC      プログ
                       ラム番号を用いる。このオプションは複数の             NFS
                       サーバが動作しているホス
                       トに対して用いると便利である。デフォルトは        100003
                       で、これは                   NFS                    デー
                       モンに対して標準的に用いられるプログラム番号である。

        nfsvers=n      リモートホストの                                     NFS
                       デーモンに接続する際に、通常と異なる    RPC     バージョ
                       ン番号を用いる。このオプションは複数の               NFS
                       サーバが動作しているホスト
                       に対して用いると便利である。デフォルトは 2。

        nolock         NFS  ロックを無効にする。lockd を起動しない。 これは古い
                       NFS サーバーに使わなくてはならない。

        bg             最初の   NFS    マウントの試行がタイムアウトになったと-
                       に、バックグラウン
                       ドでマウントを試み続ける。マウント動作がバックグラウンドになると、その
                       NFS サーバーに対して引ぢ海行われることになっている、他の
                       mount                                               動作
                       もただちにバックグラウンドになる。これらに対して、最初のマウント試行は
                       行われない。マウントポイントが失われると、タイムアウトと同じように扱わ
                       れる。 NFS マウントのネストを許すためである。

        fg             最初の    NFS   マウントの試行がタイムアウトになったと-
                       に、再試行をフォア      グラウンドで行う。これは      bg
                       の反対の意味を持つ指定であり、こちらがデフォルト。

        soft           NFS
                       へのファイル操作がメジャータイムアウトとなった場合、呼び出したプロ
                       グラムに対し                                         I/O
                       エラーを返す。デフォルトでは、ファイル操作を無期限に
                       再試行し続ける。

        hard           NFS
                       へのファイル操作がメジャータイムアウトとなった場合、コンソールに
                       "server                   not                   respond-
                       ing"と表示し、ファイル操作を無期限に再試行し続ける。
                       これがデフォルトの動作である。

        intr           NFS
                       へのファイル操作がメジャータイムアウトとなり、かつその
                       NFS                      接続が                     hard
                       マウントされている場合、シグナルによるファイル操作の中断を許可し、
                       中断された場合には呼び出したプログラムに対して     EINTR
                       を返す。デフォル トではファイル操作の中断を許さない。

        posix          POSIX                 の手法を用いて                 NFS
                       ファイルシステムをマウントする。ファイル名の
                       最大長がマウントサーバに問い合わされるようになり、   NFS
                       ファイルシス         テムが        POSIX        pathconf
                       コマンドを正しくサポートでい襪茲Δ砲覆襦
                       これを行うためには、リモートホストが                 RPC
                       マウントプロトコルのバージョ            ン             2
                       をサポートしていなければならない。多くの             NFS
                       サーバはバージョン 1 しかサポートしていない。

        nocto          ファイルを作成するとい法⊃靴燭並粟の取得を抑制する。

        noac           属世離-
                       ャッシングのすべてを完全に無効にする。これはサーバの-
                       能を低下さ      せるが、      2      つの異なる      NFS
                       クライアントの両方が、サーバ上の共通のファイ
                       ルシステムに頻繁に書-
                       込みをしている場合に、正しい結果をそれぞれのクラ
                       イアントに返すことを保証する。

        tcp            NFS    ファイルシステムのマウントに、デフォルトの    UDP
                       プロトコルではなく  TCP  プロトコルを用いる。多くの  NFS
                       サーバは UDP しかサポートしていない。

        udp            NFS           ファイルシステムのマウントに           UDP
                       プロトコルを用いる。こちら がデフォルトである。

        数値を指定しないオプションすべてに対して、それぞれ                   no
        を前置したオプショ            ンが存在する。例えば、             nointr
        はファイル操作の中断を許可しない。
   
   
    <dump> - バックアップを作る時を決定するために dump ユーティリティによって使われます。Dump はエントリをチェックしその値を使ってファイルシステムがバックアップされるべきかどうか決定します。指定できるエントリは0か1です。0の場合、dumpはファイルシステムを無視します; 1の場合、dump はバックアップを作成します。ほとんどのユーザーは dump をインストールしないので、<dump> エントリには0を入れて下さい。
    <pass> - ファイルシステムをチェックする順番を決めるために fsck によって使われます。指定できるエントリは0か1、もしくは2です。root ファイルシステムには一番優先度の高い1を設定してください (btrfs の場合は、このフィールドは0にするべきです) - その他のファイルシステムには2を入れて下さい。0のファイルシステムは fsck ユーティリティによってチェックされません。

ssh-keygen オプション

ssh-keygen -i -f test.pub >> authorized_keys

-i==>他のキーを読んでRSAに変換して、標準出力にOUTPUTS
-f==>file

ssh proxy

windowでは同様で、.sshのしたで「~/.ssh/config」を修正する


# プロキシ環境
Host taro_px
User taro
HostName remote.co.jp
ProxyCommand connect -H proxy_server.jp:8080 %h %p
Identityfile ~/.ssh/id_rsa

# 自宅
Host taro_home
User taro
HostName remote.co.jp
Identityfile ~/.ssh/id_rsa

ssh taro_px
ssh taro home

linux cut

例:
somoWords=`hostname | cut -d'-' -f 2`
==>"-"でホスト名を分割して、2番目の物を取る


-b, --bytes byte-list     byte-listで指定した位置のバイトだけ表示する
-c, --characters character-list     character-listで指定した位置の文字だけ表示する
-d, --delimiter delim     フィールドの区切りを設定する。初期設定値はタブ
-f, --fields field-list     field-listで指定したフィールドだけ表示する
-s, --only-delimited     フィールドの区切りのない行を無視する
file     テキスト・ファイルを指定する

$ cat tel.lst
046-xxx-xxxx    Kazuhiro Fukuda    Man
03-yyyy-yyyy    Yuki Izumi    Women
03-zzzz-zzzz    Toru Tejima    Man

$ cut -c 14- tel.lst  ←14文字目以降を取り出す
Kazuhiro Fukuda Man
Yuki Izumi      Women
Toru Tejima     Man

$ cut -f 2 tel.lst    ←第2フィールドを取り出す
Kazuhiro Fukuda
Yuki Izumi
Toru Tejima

2014/02/13

linux cupInfo

/proc/cpuinfoの中身

# cat /proc/cpuinfo
processor       : 0 そのマシンに刺さっているプロセッサ(コア)の通し番号。最初が0番。
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 CPU          6400  @ 2.13GHz
stepping        : 6
cpu MHz         : 2133.675
cache size      : 2048 KB  意味不明、L1,L2,L3?
physical id     : 0 物理プロセッサID。この数値が同じプロセッサは、同じソケットに刺さっている
siblings        : 2 そのコアが乗っかっている物理プロセッサに、いくつのコアが同居しているか。1つの物理プロセッサに搭載されているコア数、兄弟?
core id         : 0 ?
cpu cores       : 2 ?
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
bogomips        : 4273.36

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 CPU          6400  @ 2.13GHz
stepping        : 6
cpu MHz         : 2133.675
cache size      : 2048 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
bogomips        : 4267.00

=>整理すると、
32コアの場合、
physical id ーー>物理ソケット(0、1、2つの物理ソケットね)
cpu cores--> 1個の物理CPUにコアの数(8、物理的的に8個のコアあるね)
siblingsー>1個の物理CPUにコアのみた目の数、HT技術のせいで。「論理的に」
core idーー>cpu coresの番号、物理的なコア


=>HT技術?
1つのCPUを2つのCPUであるように動作するのがHTという技術です。
HT技術を搭載したCPUでは、2つのソフトから送られてきた命令を
同時に処理することができるので、その分ロスが少なくなります。

最も効率のよい場合には、2倍の性能になる計算ですが、
通常は20%程度の性能向上になるようですね。

最新のパソコンでは、実際にCPU(のコア)を2つ搭載したものが主流です。
更にHT技術を導入し、実質的に4個のCPUを搭載しているかの如く振る舞う
タイプの製品も出ています。

processor :系统中逻辑处理核的编号。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
vendor_id :CPU制造商     
cpu family :CPU产品系列代号
model   :CPU属于其系列中的哪一代的代号
model name:CPU属于的名字及其编号、标称主频
stepping   :CPU属于制作更新版本
cpu MHz   :CPU的实际使用主频
cache size   :CPU二级缓存大小
physical id   :单个CPU的标号
siblings       :单个CPU逻辑物理核数
core id        :当前物理核在其所处CPU中的编号,这个编号不一定连续
cpu cores    :该逻辑核所处CPU的物理核数
apicid          :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
fpu             :是否具有浮点运算单元(Floating Point Unit)
fpu_exception  :是否支持浮点计算异常
cpuid level   :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
wp             :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
flags          :当前CPU支持的功能
bogomips   :在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
clflush size  :每次刷新缓存的大小单位
cache_alignment :缓存地址对齐单位
address sizes     :可访问地址空间位数
power management :对能源管理的支持,有以下几个可选支持功能:
  ts:  temperature sensor
  fid:   frequency id control
  vid:  voltage id control
  ttp:  thermal trip
  tm:
  stc:
  100mhzsteps:
  hwpstate:

cache ping pong

请问其中用来填充的cache_line_align的作用是?
之前有学习到c语言中宏align是内存补齐的作用,那这个不就是cache line补齐?但是啥是cache line??为啥有这么一步?

1.首先,什么是cache line?

CPU处理指令时,由于“Locality of Reference”原因,需要决定哪些数据需要加载到CPU的缓存中,以及如何预加载。因为不同的处理器有不同的规范,导致这部分工作具有不确定性。在加载的过程中,涉及到一个非常关键的术语:cache line。
cache line是能被cache处理的内存chunks,chunk的大小即为cache line size,典型的大小为32,64及128 bytes. cache能处理的内存大小除以cache line size即为cache line。
了解了cache line,然后再熟悉一下cpu上cache的一些策略

2.cpu上cache的策略

cache entry (cache条目)
包含如下部分
1) cache line : 从主存一次copy的数据大小)
2) tag : 标记cache line对应的主存的地址
3) falg : 标记当前cache line是否invalid, 如果是数据cache, 还有是否dirty
cpu访问主存的规律
1) cpu从来都不直接访问主存, 都是通过cache间接访问主存
2) 每次需要访问主存时, 遍历一遍全部cache line, 查找主存的地址是否在某个cache line中.
3) 如果cache中没有找到, 则分配一个新的cache entry, 把主存的内存copy到cache line中, 再从cache line中读取.

cache中包含的cache entry条目有限, 所以, 必须有合适的cache淘汰策略
一般使用的是LRU策略.
将一些主存区域标记为non-cacheble, 可以提高cache命中率, 降低没用的cache

回写策略
cache中的数据更新后,需要回写到主存, 回写的时机有多种
1) 每次更新都回写. write-through cache
2) 更新后不回写,标记为dirty, 仅当cache entry被evict时才回写
3) 更新后, 把cache entry送如回写队列, 待队列收集到多个entry时批量回写.

cache一致性问题
有两种情况可能导致cache中的数据过期
1) DMA, 有其他设备直接更新主存的数据
2) SMP, 同一个cache line存在多个CPU各自的cache中. 其中一个CPU对其进行了更新.

3.为啥需要cache line 补齐呢?

让我们先看一个例子,
举例:
  1. // 如下代码在SMP环境下存在cache频繁刷新问题  
  2. double sum=0.0, sum_local[NUM_THREADS];  
  3. #pragma omp parallel num_threads(NUM_THREADS)  
  4. {  
  5.  int me = omp_get_thread_num();  
  6.  sum_local[me] = 0.0;  
  7.   
  8.  #pragma omp for  
  9.  for (i = 0; i < N; i++)  
  10.  sum_local[me] += x[i] * y[i];  
  11.   
  12.  #pragma omp atomic  
  13.  sum += sum_local[me];  
  14. }  
    因为sum_local数组是个全局变量, 多个线程都会访问, 并且, 各个线程访问的地方很接近, 会导致一个线程更新, 其他CPU的cache line失效.
    所以在尽量不要让更新频率非常高(例如,计数器)和经常访问的变量分布在同一个cache line中,以避免“cache ping-pong”,亦“false sharing”现象。
      OK,为啥需要补齐呢,上面的例子里面多个线程的访问会出现false sharing现象,如果服务器采用这样的,则服务器性能会严重影响,为了解决这个问题,最简单的办法是采用cache line 补齐的方法。

ps:在查找这个面 试题的时候,有意思的是我在淘宝核心系统团队博客上发现了对这个题目的解答,我觉得简答的不是很认真,他们是参考一篇外文文献《Avoiding and Identifying False Sharing Among Threads》,这篇文章主要解决在SMP环境下cache line被频繁刷新的的问题。所以只是简单的将大意翻译过来。
将复制过来:
在做多线程程序的时候,为了避免使用锁,我们通常会采用这样的数据结构:根 据线程的数目,安排一个数组, 每个线程一个项,互相不冲突. 从逻辑上看这样的设计无懈可击,但是实践的过程我们会发现这样并没有提高速度. 问题在于cpu的cache line. 我们在读主存的时候,数据同时被读到L1,L2中去,而且在L1中是以cache line(通常64)字节为单位的. 每个Core都有自己的L1,L2,所以每个线程在读取自己的项的时候, 也把别人的项读进去, 所以在更新的时候,为了保持数据的一致性, core之间cache要进行同步, 这个会导致严重的性能问题. 这就是所谓的False sharing问题, 有兴趣的同学可以wiki下.

解决方法很简单:
把每个项凑齐cache line的长度,实现隔离.
1
2
3
4
5
6
7
8
typedef union {
    erts_smp_rwmtx_t rwmtx;
    byte cache_line_align__[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(
                sizeof(erts_smp_rwmtx_t))];
} erts_meta_main_tab_lock_t;
或者
_declspec (align(64)) int thread1_global_variable;
__declspec (align(64)) int thread2_global_variable;
这就是为什么在高性能服务器中到处看到cache_line_align, 号称是避免cache的trash.
类似valgrind和intel vtune的工具可以做这个层次的性能

2014/02/12

linux yum proxy リポジトリ

これも何も考えずに使っているが、

yum repolist all--->リポジトリの一覧が表示される。数など。。。
yum list installed--->yum経由でインストール済みの一覧


他にもいろいろある。
easy_install
pip
など、
自動的に[download --complie--install]をしているね。

ーーーーーーーーーーーーーー
例:ansibleのインストール:

# yum install python-devel python-setuptools
# easy_install pip
# pip install ansible
ーーーーーーーーーーーーーー


・yum proxy
#vi /etc/yum.conf
#proxy=http://proxy.hostname.com:5273/

・CentOSのyum 接続先指定:
# cd /etc/yum.repos.d
# vi CentOS-Base.repo


★CentOS6.5 64bitのyumリポジトリにEPELを追加
wget http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
れたEPELのリポジトリの設定ファイル「/etc/yum.repos.d/epel.repo」を以下のように編集します。

[epel]
:(略)
enabled=1
↓変更
enabled=0

yumコマンドの実行時にEPELのリポジトリを使用するには、以下のようにオプション「--enablerepo=epel」を付けて実行します

# yum --enablerepo=epel install freetds-devel

linux cron

何も考えずにcrontabを使っているが。。。


■cronサービス
/etc/rc.d/init.d/crond status

■cronの設定ファイル

cronの設定ファイルは、以下の表の通りです。crond は、毎分、以下の設定ファイルの内容に変更がないかを確認し、変更があった場合には、それを反映して実行します。

/var/spool/cron/user    全ユーザ    ユーザの自動タスク設定ファイル
===>このファイルの作成/編集は、 'crontab -e' とコマンドを実行して行ないます。

/etc/crontab    root    毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル
/etc/cron.hourly    root    毎時実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.daily    root    毎日実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.monthly    root    毎月実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.weekly    root    毎週実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.d    root    上記以外の自動タスク設定ファイルを置くディレクトリ

分    0~59
時    0~23
日    1~31
月    1~12 or jan~dec
曜日    0~7 [0,7は日曜日] or sun~sat
コマンド    有効なコマンドを記述します。空白を含むことも可能ですが、標準のBourne Shellの書式に従って記述します。


リスト     0,15,30,45     分フィールドで指定した場合、15分に一度処理を実行します。
範囲     1-5     曜日フィールドで指定した場合、月曜日~金曜日に処理を実行します。
共存     1,3,7-9     時間フィールドで指定した場合、1時、3時、7時、8時、9時に処理を実行します。
間隔値     1-5/2     時間フィールドで指定した場合、1時、3時、5時に処理を実行します。なお、間隔値は、「/」の後ろに指定した値の間隔で処理を実行します。


■「/etc/crontab」
通常、このファイルには、以下のように、「cron.monthly」、「cron.weekly」、「cron.daily」、「cron.hourly」配下のファイルが、指定時間ごとに実行されるように設定されています。


■アクセス制御
vi /etc/cron.allow


■ansibleでcron 削除
ansible ** -s -i hosts -m command -a "touch /tmp/mycron"
ansible ** -s -i hosts -m command -a "crontab /tmp/mycron"
ansible ** -s -i hosts -m command -a "rm /tmp/mycron"

2014/02/07

linux dd disk速度測定

linux dd ファイルの変換とコピーを行う

if=file     入力ファイルを指定する。指定がない場合は標準入力を表す
of=file     出力ファイルを指定する。指定がない場合は標準出力を表す
ibs=bytes     一度に指定したバイトのブロックを読み出す
obs=bytes     一度に指定したバイトのブロックを書き込む
bs=bytes     一度に指定したバイトのブロックを読み書きする
cbs=bytes     一度に指定したバイトのブロックを変換する
skip=blocks     入力ファイルの先頭から指定したブロックをスキップする
seek=blocks     出力ファイル中の指定したブロックをスキップする
count=blocks     入力ファイルから出力ファイルへ指定したブロックをコピーする
conv=code     コード変換を行する。指定できるコードは後述のコード表を参照


$dd bs=1M count=100 if=/dev/zero of=/home/ore/disktest oflag=direct(memoryのbuffer cacheを無効にする)
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.06987 seconds, 1.5 GB/s
ーーー>

/dev/zero は、Unix系オペレーティングシステムにおけるスペシャルファイルの1つで、全てヌルキャラクタ(ASCII の NUL、0x00)の内容を読み出すことができる。
典型的利用例として、何らかの情報を上書きするキャラクタストリームとして使う

ディスク スペック情報

・例:
interface:Serial ATA600
キャッシュ:
回転数:
平均シークタイム:
・Serial ATAーー>SATA
従来のATA仕様の後継仕様で、
Serial ATA 1.0 は 1.5Gbps--->150M/s
Serial ATA 300 は 3.5Gbps--->300M/s
Serial ATA 600 は 6.0Gbps--->600M/s

例:
interface:Ultra320
キャッシュ:
回転数:15000 rpm
平均シークタイム:
下記は並行なやつ
SCSI-->small computer system interface
SCSI2->
SCSI3->Ultra320


SASは全二重通信が可能なので、送信と受信を同時並行で実行できる。
パラレルSCSIやパラレル/シリアルATAは、送信と受信を定期的に切り替える半二重通信である。

Serial ATAの方が早いね。。

ディスクI/O

ディスクI/Oのボトルネックーー>ディスクI/O
CPUのボトルネックーー>CPUのクロック速度、CPUの奪い合う
ネットワークのボトルネックーー>ネットワークまたはストレージ回線の帯域幅
CPUとI/Oのバランスーー>圧縮技術を併用、インメモリ化・フラッシュディスク・SSDなどの利用により,ディスクI/Oレスポンスが高速化されても,同じようにバランスの変化が起きます。よかれと思って実施したチューニングが,思わぬ被害を生んでしまう可能性もあるのです。
ロックのボトルネックーー>規模データに多数のユーザが同時にアクセスした場合,メモリ上やディスク上にて,同一データまたは特定グループのデータに対するロックの競合が発生する

    I/Oレスポンス=I/O要求処理にかかる応答時間
        ==>一度に扱うデータ量が小さいシステムの場合,1データブロックのI/O時間を表すレスポンスを向上させることが重要になり
    I/Oスループット=単位時間当たりのI/O処理量
        ==>売上分析など,一度に対象となるデータが大きい(数GBなど)場合は,1データブロックの処理時間よりも,単位時間あたりにどれだけ多くのデータを読み書きできるかが重要になる
   
    ミクロなI/O性能を論じる場合 ⇒レスポンスを考える
    マクロなI/O性能を論じる場合 ⇒スループットを考える



    I/O時間 = ストレージがデータを取得する時間
            + ストレージからデータベースへデータを転送する時間
            + データベースサーバでI/O処理を行う時間


・索引,エクステント,ブロックが断片化している

2014/02/04

Linux viで文字コード

ShiftJIS で開く
$ vi -c ":e ++enc=cp932" index.html

EUCで開く
$ vi -c ":e ++enc=euc-jp" index.html

UTF8で開く
$ vi -c ":e ++enc=utf8" index.html

ansible

かなり使い方安い。。。

python製

ーーーーーーーーーーーーーー
例:ansibleのインストール:

# yum install python-devel python-setuptools
# easy_install pip
# pip install ansible
ーーーーーーーーーーーーーー

★設定ファイル
/etc/ansible/ansible.cfg
/etc/ansible/hosts

★環境変数に追加する
$ echo "source /usr/local/src/ansible/hacking/env-setup" >> ~/.bash_profile

★ansible --version
 ansible --v デバッグ
 ansible-doc yum モジュールの説明
 ansible --help

★ansible all -i hosts -a "cat /etc/redhat-release" -k
allーー>すべてのホスト
-i 対象ホストファイル
-m モジュール名, --module-name
-k, --ask-pass
-a 直接コマンドを実行する

★インストール
ansible all -i hosts -m yum -a "name=httpd state=latest" -k

★削除
$ ansible all -m file -a "dest=/home/ansible/foo/ state=absent" -i hosts -k

★mkdir -p と同じで深い階層のディレクトリも一発で作成できました。
$ ansible all -m file -a "dest=/home/ansible/foo/bar/baz state=directory" -i hosts -k

★state に「link」を指定し、src にリンク元ファイルのパスを指定します。
$ ansible all -m file -a "src=/etc/httpd/conf/httpd.conf dest=/home/ansible/httpd.conf state=link" -i hosts -u root -k

★コピー
$ ansible all -m file -a "dest=/home/ansible/test.conf mode=600" -i hosts -k
★他
ansible all -s -i hosts -m command -a "chmod -R 775 /someone_sv"
ansible all -s -i hosts -m command -a "chown -R someone:someone /someone_sv"
ansible all -s -i hosts -m copy -a "src=./log4j.xml dest=/somewhere/log4j.xml"
ansible all -s -i hosts -m cron -a "minute=20 job=/some.sh name='test'"
ansible all -s -i hosts -m copy -a "src=./some.sh dest=/somewhere/some.sh owner=root group=root mode=755"

★Playbook
mysql.yml
 - hosts: all
    user: root
    vars:
        mysql_port: 3306
    handlers:
    - name: restart iptables
      service: name=iptables state=restarted
    tasks:
     - name: install mysql
        yum: name=mysql state=installed
        yum: name=$item state=installed
        with_items:
        - mysql
        - mysql-server
        - mysql-devel
     - name: insert iptables rule
      lineinfile: dest=/etc/sysconfig/iptables state=present regexp="{{ mysql_port }}"
                  insertafter="^:OUTPUT " line="-A INPUT -p tcp --dport {{ mysql_port }} -j ACCEPT"
   
   
    notify: restart iptables
    - include: redis.yml
      vars:
        a: a
        b: b
        c: c
        d: d
       
    ・redis.yml
     - name: install redis packages
       action: yum name=$item state=installed
       with_items:
        - ${libunwind}
        - ${libunwind_devel}
        - ${gperftools_libs}
       - ${redis}

    - name: start redis
    action: service name=redis state=started enabled=yes
                 
変数の参照
$var
${var}
{{ var }}
                 
実行:ansible-playbook mysql.yml -i hosts -k

★handlers
ーー>task の実行により何か変更が発生した場合のみ実行したい処理を定義するために用意されているのが handler です。
例えば、設定ファイルの変更が発生した場合のみ、サービスを再起動したい、といった事を実現するための仕組みです。
handler が実行されるタイミングは対象の task 実行後ではなく、 Playbook の最後になります。
また、複数の task から同じ handler が notify されていた場合でも一度だけしか実行されません。

★Role
include を更に便利にしたような仕組みとして Role というものが用意されています。
Role ではサーバの役割毎にディレクトリを分け、更にその下にセクション毎にディレクトリを分けた構造で Playbook を管理します
要するに、推奨されている規約に従ってディレクトリ構造を作成しておけば自動的にファイルが include される仕組みです。


mysql
├─hosts
├─site.yml
└─roles
    └─mysql
        ├─handlers
        │  └─main.yml
        ├─tasks
        │  └─main.yml
        ├─templates
        │  └─my.cnf.j2
        └─vars
            └─main.yml
roles/x/tasks/main.yml が存在すれば自動的に読み込まれる
roles/x/handlers/main.yml が存在すれば自動的に読み込まれる
roles/x/vars/main.yml が存在すれば自動的に読み込まれる
copy タスクで roles/x/files/ 以下のファイルはパスを指定せずに参照可能
script タスクで roles/x/files/ 以下のファイルはパスを指定せずに参照可能
template タスクで roles/x/templates/ 以下のファイルはパスを指定せずに参照可能


■The command module takes the command name followed by a list of space-delimited arguments.
The given command will be executed on all selected nodes.
It will not be processed through the shell, so variables like $HOME and operations like "<", ">", "|", and "&" will not work
(use the shell module if you need these features).

Mysql体系结构和存储引擎 读书笔记



l  OracleLINUX版本是多进程构架!
l  当启动实MYSQL会去读取配置文件,然后根据配置文件来启动数据库实例
--》可以理解为从硬盘中读出来放到内存中,不同的配置文件只会影响到内存中的结果。
---》不同配置文件的数据库之间的移植问题不大

master thread
 loop
   1秒の操作
      
   10秒の操作
      
 background loop
 flush loop
 suspend loop

・bin-logは全DBに対して、1%のoverheadがある。
・varcharの65535制限は、すべての列の合計である。
 実際、他の情報もあるので、65535以下の物になる