Blog Archives

real time/user CPU time/system CPU timeの違いをメモ

time(1) コマンドの出力内容 Linux で time(1) コマンドを実行すると、real time/user CPU time/system CPU timeが出力されます。 わかるような、わからないようなこの出力される時間の意味についてメモします。 各フィールドについて Real time について どの処理に時間がかかっているかはさておき、プログラムの開始から終了までを計測した時間 wall clock timeや wall time と呼ばれることもある。 User CPU time について プログラムがユーザースペースで CPU が利用された時間 ライブラリコードの実行などがここに含まれます System CPU timeについて プログラムがカーネススペースで CPU が利用された時間 システムコール(例えば disk I/O

Tagged with: , , , ,
Posted in linux

Ubuntu14.04でNFSv4を動かしてみる

ゴール nfs-server nfs-client というホスト名の Ubuntu 14.04 のサーバを2台用意し、nfs-server サーバに Network File System バージョン 4(以下 NFSv4) を構築、nfs-client サーバからマウントしてみる。 NFSv4 サーバを構築 まずは nfs-server に NFSv4 サーバを構築します。 必要なパッケージのインストール NFS サーバに必要な nfs-kernel-server パッケージをインストールします。 nfs-kernel-server は NFSv3 にも対応しているようですが、今回は NFSv4 として利用します。 共有ディレクトリを作成 次に共有ディレクトリを作成します。 今回は /tmp/no_root_squash /tmp/root_squash /etc を共有します。 ディレクトリが存在しない

Tagged with: , ,
Posted in linux, middleware

bashでコマンドライン引数にファイルの中身を渡す

標準出力先としてファイル名を指定するのではなく、ファイルの中身(body)を引数として渡すにはどうすればよいのか? 実験用スクリプト 確認のため、次の簡易的なシェルスクリプトで各コマンドライン引数を表示させる。 入力ファイルとしては次のように改行やスペースを含んだ JSON ファイルを渡す 実行コマンド 結果論としては、以下のように printf と cat をコンボすればよい 解説 ポイントとなるのは次の箇所 ここを単純に $(cat test.json) や bash 方言のショートカットである $(< test.json) とすると、改行・スペースを引数の区切りとしてみなされてしまう この問題を回避するために、ファイルの中身全体を1文字列として扱うために printf ‘%s’ でラップさせるというわけ。 Reference linux – command line arguments from a file content – Stack Overflow

Tagged with: , , ,
Posted in linux

[Linux]trickleを使ってプログラムごとにアドホックに帯域制御する

ネットワークの帯域制御は用途や手段に応じて様々な手段が存在する。 今回は、Linux 環境下で trickle を使ってプログラム単位でアドホックに帯域制御する方法をメモ。 trickle とは ユーザースペースで動作するトラフィックシェイパー ダイナミックローダーのプリローダー(LD_PRELOAD)を利用して socket の送受信に割り込んでトラフィックを制御 プログラム単位で制御 trickle をインストール RedHat Installation epel レポジトリからインストールする Ubuntu Installation 何も考えずに apt-get でインストールできる trickle を使う standalone mode(単一プログラムでの制御) collaborative mode(複数プログラム合算での制御) の2モードがある。 standalone mode プログラムごとにトラフィックを制御する trickle が一番得意とすると思われる用途 実行例 要は、コマンドの先頭に trickle {制御条件} を追加するだけと非常にお手軽。

Tagged with: , ,
Posted in linux

LD_PRELOADで動的ライブラリ関数を上書きする

動的リンクされたプログラムでは、同じ関数が複数のライブラリで定義されている場合、最初に見つかった関数が利用される。 環境変数 LD_PRELOAD で指定した共有ライブラリは最優先で読み込まれるため、簡単にプログラムの挙動を変えることができる。 実験用のプログラム まずは乱数を10個表示するだけの簡単なプログラム(random_num.c)を用意。 実験用プログラムの実行 コンパイルする GNU C Library(libc.so.6) とリンクされており、 実験用で利用する関数 rand もある。nm でシンボルを出力すると、 rand を確認できる。 実際に実行するとランダムに数字が10個表示される。 rand を上書きする 次に、本来はランダムな整数を返す rand 関数がつねに固定の整数 42 を返すように書き換え他プログラムを用意(unrandom.c)。 共有ライブラリとしてコンパイルする LD_PRELOAD でプログラムの実行 環境変数 LD_PRELOAD で作成した共有ライブラリ を指定し、同じプログラムを実行してみる。 rand 関数が固定値を返す自作ライブラリの関数に書き換わっているため、プログラムの実行結果もランダム性がなくなっているのがわかる。 rand を上書きする(元の関数も実行) 先ほどの例では関数の中身を完全に書き換えていたので、もう少しソフトに、本来の関数を実行しつつその前後で追加処理を入れたのが次のプログラム(myrandom.c)。 dlsym(RTLD_NEXT, “rand”)

Tagged with: , ,
Posted in linux

loggerコマンドの1024バイト出力制限を回避する

logger コマンドの1024バイト制限 $ cmd | logger というように、コマンドの出力結果を logger コマンド経由で syslog 出力することがある。 極稀に syslog のメッセージが途切れているという事象があり、調べてみると logger コマンドは 1024 バイトまでしか出力できないようにハードコードされているとわかる。 1024 バイト制限は “RFC 3164 : The BSD syslog Protocol” に起因していて The total length of the packet MUST be 1024 bytes or less.

Tagged with: , ,
Posted in linux

タイムゾーンの設定方法をメモ(RHEL6, RHEL7, Ubuntu編)

RHEL6(amazon Linux含む) RHEL7(systemd) Ubuntu の各環境でタイムゾーンを設定する方法をメモ。 RHEL6 まずは RedHat 6系の場合。 amazon ec2 のドキュメントにわかりやすい説明があるので、これを読めばOK Setting the Time for Your Linux Instance – Amazon Elastic Compute Cloud http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html タイムゾーンの一覧を取得 /usr/share/zoneinfo 以下のタイムゾーン情報から設定したいタイムゾーンを調べる 日本の場合 Japan Asia/Tokyo と複数の選択肢があるが、実体は同じ 候補の中には America/Indiana/Marengo のように Area/Location の2階層で完結しないものもあるので、タイムゾーンを操作するプログラムを書いている人は注意が必要。 ハードウェアクロック向け設定 ファイル /etc/sysconfig/clock

Tagged with: , , , ,
Posted in linux
Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 1 month ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 1 month ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 1 month ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 7 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 10 months ago