linux, コマンド, 小ネタ, 運用管理

ifconfigを含むnet-toolsが非推奨になって久しいようですが、

rhel7系からnet-toolsはおさらばとなります。
※手動で入れれば使えますが。

今思えば、ifconfig君

あなたと出会ってからこの十数年、あなたを打たなかった日はありません。

雨の日も風の日もいつも一緒だったね。

あなたがいつもいてくれたから私も輝けたんだといます。

これから私は新しいiproute2君と歩んでいくことになりますが、あなたのことは決して忘れることはないでしょう。

ifconfig君に幸あれ

P.S.
ついつい ifco[tab]ってやっちゃうのはご愛嬌です。

ということでnet-toolsとiproute2の対応表一覧です。自分の備忘録として残しておきます。

net-tools iproute2
ifconfig ip l (ip link)
ifconfig -a ip a show (ip addr show)
ifconfig eth0 up ip link set eth0 up
netstat ss
netstat -i ip -s link
netstat -l ss -l
netstat -r ip r (ip route)
route [add|del] ip route [add|del]
route -n ip route show
arp -n ip n (ip neighbor)

heartbeat+pacemakerなどで利用する仮想IPはipaddr2を利用しています。

そもそもifconfigではこのコマンドで設定されたIPは表示されません。rhel6系であってもip addr showで確認しなくてはいけません。

開発、オペレーションする側みんながこの違いを認識し共有することがミスを防ぐことになります。

linux, コマンド

 

余裕があるんだけどメモリがswapに入ってしまう現象が少なからずあると思います。

だいたい

このようにしてページキャッシュを削除しますが、キャッシュ全体を削除してしまうので、
どうしても特定のファイルのキャッシュだけ削除したいという要求が出てきます。

そんなのときに便利なツールがlinux-ftoolです。

使ってみます。

こちらでインストールは完了です。
早速試してみます。/tmpディレクトリへ移動し適当にファイルを作成しキャッシュを消費させ、
ページキャッシュの情報を覗いてみます。覗くのはlinux-fincoreコマンドを利用します。

※200Mほどキャッシュを消費したのがわかりますね。

ではキャッシュを確認してみましょう。

※testfileというファイルでまるまる200Mのキャッシュが利用されていることがわかります。

さて次に削除です。削除にはlinux-fadviseというコマンドを利用します。

削除されたことがわかるかと思います。

こちらのツール類の詳細は下記URLから確認できます。
https://code.google.com/p/linux-ftools/
基本的にはPOSIX_FADV_DONTNEED以外は使う機会が思い浮かびません。^^;

利用用途としては必要のないログなどでキャッシュが肥大化していないか確認して、
その肥大化している問題とならなさそうなページキャッシュを手動で削除する
ってところになるんだろうと思います。

linux, ネットワーク

構成は下記です。

SwitchをAとBをそれぞれ再起動を行う必要があったので、
下記コマンドでインターフェースの切り替えを行いながら作業を行うことにしました。

ところがインターフェースを切り替えると疎通が出来なくなってしまった。

bondの切り替え先のインターフェースの状況は切り替わってUPしている状態にも関わらず。

取り急ぎスタッフ全員に相談するとそのようなバグがあるとのこと。

調べてみると確かに

bondingしたインターフェース上にタグVLANを利用した場合にフェイルオーバーしないバグでした。

詳細はこちらでご確認ください
https://bugzilla.redhat.com/show_bug.cgi?id=841983

カーネルをアップデートすることにより対応が可能です。
取り急ぎカーネルをアップデートし切り替わりが可能なことを確認しています。

今回、分かったこととしては
ボンディングだとしてもスイッチメンテナンス時には手動でインターフェースを切り替えると吉。
事前に問題がわかるのが良いのかなと。

反省点としましては
bond設定時にフェイルオーバーの確認はしておくべき。
せっかくコストをかけてbondingしているにも関わらず意味ないですもんね。

linux, 小ネタ, 運用管理

デバイスがどのCPUに割り込みのリクエストを出すのかを調整するためにはaffinity設定を利用し実現します。

affinityの設定は/proc/irq配下のそれぞれのirq番号配下のsmp_affinityの値を16進数で修正しなくてはいけません。
マルチキューを持つネットワークインターフェースであればそれぞれ割り当てられているIRQ番号で設定を行っていく必要があります。
たとえばecho ffffff > /proc/irq/70/smp_affinityといった感じで設定します。
参考:マルチキューネットワークインターフェース

これを簡単に行ってくれるtunaというツールがredhatより提供されているのをつい先日知りましたので共有します。
guiからでもcliからでも利用が可能なツールです。

兎にも角にも使ってみます。

まずはインストール※centos6のupdatesレポジトリに含まれていました。

CPUが24スレッドの環境において下記のような16進数の設定になっています。
aaaaaaは1,3,5,7,9,11,13,15,17,19,21,23のCPUを利用し、
555555は0,2,4,6,8,10,12,14,16,18,20,22のCPUを利用されることになります。

この値を変更する場合は

これでp1p1のネットワークインターフェースですべてのCPUを利用することになります。

コマンドで確認してみます。

ffffffとなり設定が変更されたことがわかると思います。

注意点としてはirqbalanceで上書きされないように留意しなくてはいけないところですかね。

tuna –show_threadsとすると、たとえばnginxがどのCPUに割り込み要求を出すのかも分かりますので、
意図的にnginxの割り込み先のCPUを制御したいときなんかにも使えると思います。

うち例だとこんな感じでthreadsが表示されます。

linux, インフラ全般, クラウド

現状の仮想環境ではマルチキューが利用できません。したがってmemcachedなどのミドルウェアを仮想上で動作させると必ず一つのCPUに偏ります。これを回避するためにはrhelの7系のカーネルを待つしかありません。

と思っていたところ、

RPS/RFSの設定でCentOS6.xで仮想環境でCPUの偏りをなくすことができるようです。
RPS/RFSを使用するとソフトウェア的にNICの割り込みに使用するCPUを分散してくれます。
dmmで利用しているmemcachedのサーバで設定してみたところ、
実際にCPUコアの偏りが無くなったことが確認できました。

入れ替え前のmemcachedサーバのCPU負荷
cpuの1に偏っています。

RPS/RFS設定を行ったmemcachedサーバのCPU負荷
cpuの0,1,2,3と綺麗に分散されています。

設定例

/sys/class/net/eth0/queues/rx-0/rps_cpus は使用するCPUを指定します。
各コアを使用するかのフラグと2進数で各ビットを立て、16進数に変換します。
1,2コアを使用する場合は
2進数で 11 → 16進数に変換して3を設定。
1,2,3,4コアを使用する場合は
2進数で 1111 → 16進数に変換してfを設定。

これにより、ネットワーク系のエラーやmemcachedのレスポンスタイムが改善しています。

・入れ替え前
before_rps

・入れ替え後
after_rps

PAGE TOP