# opcontrol --start && [filepath]
# opcontrol --stop
# opreport -c [filepath] or # opreport -c | grep [filename]
gcc -g でコンパイルしておけば,opannotate が使えて,プロファイリング後に
# opannotate -s [filepath]
とするとソースコード内で何行目が何回呼ばれたかが分かるっていう優れもの.
こりゃ便利.
しかし全体プロファイリングするんじゃなくてとあるアプリケーションのコールグラフだけ欲しいんだよなー.
とあるアプリケーションだけのプロファイル方法を調べなきゃ.
2010年10月19日火曜日
OProfileインストール
gprof だとマルチスレッドのアプリケーションのプロファイルがとれないという噂だったので,
OProf を使うことになりました.
OProf は gprof 同様,コールグラフもとれるし,マルチスレッドにも対応している優れものらしい.
インストール時のメモ.
まずはDownload OProfileから最新版のソースをダウンロード.
./configure をしたところ,ライブラリがいくつかないと言われた.
①configure: error: popt library not found
なので単純に yum install popt* で,poptライブラリをゲット.
(popt-devel.i386 : Development files for the popt library
popt-static.i386 : Static library for parsing command line parameters)
②configure: error: liberty library not found
yum で liberty を探しても見つからない.
ぐぐってみたら,Installing Oprofile | KernelTrapにいきついた.
そこで,yum install binutils-devel で,libertyライブラリをゲット.
(binutils-devel.i386 : BFD and opcodes static libraries and header files)
これで無事に ./congfigure → make → make install と,インストールを終えられた.
あとは
# opcontrol --start でプロファイル開始
# opcontrol --shutdown でプロファイル終了
# opreport でプロファイル結果の表示
/var/lib/oprofile/samples 内にデータが保存されていくようです.
これを変えたい場合は,--session-dir=で指定すればOK
取り急ぎここまで.
OProf を使うことになりました.
OProf は gprof 同様,コールグラフもとれるし,マルチスレッドにも対応している優れものらしい.
インストール時のメモ.
まずはDownload OProfileから最新版のソースをダウンロード.
./configure をしたところ,ライブラリがいくつかないと言われた.
①configure: error: popt library not found
なので単純に yum install popt* で,poptライブラリをゲット.
(popt-devel.i386 : Development files for the popt library
popt-static.i386 : Static library for parsing command line parameters)
②configure: error: liberty library not found
yum で liberty を探しても見つからない.
ぐぐってみたら,Installing Oprofile | KernelTrapにいきついた.
そこで,yum install binutils-devel で,libertyライブラリをゲット.
(binutils-devel.i386 : BFD and opcodes static libraries and header files)
これで無事に ./congfigure → make → make install と,インストールを終えられた.
あとは
# opcontrol --start でプロファイル開始
# opcontrol --shutdown でプロファイル終了
# opreport でプロファイル結果の表示
/var/lib/oprofile/samples 内にデータが保存されていくようです.
これを変えたい場合は,--session-dir=で指定すればOK
取り急ぎここまで.
2010年7月13日火曜日
カーネル内で一定時間ごとの動作を行う
カーネル内ってnanosleepとか使えないんですね(Linux-2.6.25)
関数の定義なかった(*_*)
なので、カーネルタイマーを使って一定時間ごとに動作を行うのが良さそうです。
下のページが詳しく書いてあってすごくわかりやすかった!!
のでとりあえずメモメモ。
カーネルタイマーを使う
jiffiesが単位になるから精度は10msってことかな。(HZによるけど)
関数の定義なかった(*_*)
なので、カーネルタイマーを使って一定時間ごとに動作を行うのが良さそうです。
下のページが詳しく書いてあってすごくわかりやすかった!!
のでとりあえずメモメモ。
カーネルタイマーを使う
jiffiesが単位になるから精度は10msってことかな。(HZによるけど)
2010年7月8日木曜日
MySQLをソースからインストール
めちゃ久々の投稿.
MySQLのインストールでこけたのでメモ.
ソースDLして,./configure をした後の make で2度こけました.
1)../depcomp: line 512: exec: g++: not found
→ yum install gcc-c++ で解決
2)./include/my_global.h:988: error: redeclaration of C++ built-in type ‘bool’
→ make clean
make distclean
した後はじめからやり直して無事 make 通りました.
ソースからインストールした場合ってアンインストールするのってどうするんだろう.
Makefileに特に記述ないぽいから,ディレクトリをがしがし消すのであっているのかな.
相変わらず謎なことだらけだな…
努力しないと.
そして make install したら
/usr/bin/install: memory exhausted
と言われた.
めっちゃメモリ残ってるのに何このエラー!
同じような状況の人が数人いたようなのですが,解決されてないのかな…困ったナ.
http://forums.mysql.com/read.php?11,224710
**7/9 追記**
configureの時にオプションで --with-low-memory をつけると解決するとありましたが,
私の場合ではそれでもだめでした.
selinuxに関するログをはいた後にこのエラーが出たので selinux を止めちゃうという対処法でとりあえずはインストールしてしまいました.
MySQLのインストールでこけたのでメモ.
ソースDLして,./configure をした後の make で2度こけました.
1)../depcomp: line 512: exec: g++: not found
→ yum install gcc-c++ で解決
2)./include/my_global.h:988: error: redeclaration of C++ built-in type ‘bool’
→ make clean
make distclean
した後はじめからやり直して無事 make 通りました.
ソースからインストールした場合ってアンインストールするのってどうするんだろう.
Makefileに特に記述ないぽいから,ディレクトリをがしがし消すのであっているのかな.
相変わらず謎なことだらけだな…
努力しないと.
そして make install したら
/usr/bin/install: memory exhausted
と言われた.
めっちゃメモリ残ってるのに何このエラー!
同じような状況の人が数人いたようなのですが,解決されてないのかな…困ったナ.
http://forums.mysql.com/read.php?11,224710
**7/9 追記**
configureの時にオプションで --with-low-memory をつけると解決するとありましたが,
私の場合ではそれでもだめでした.
selinuxに関するログをはいた後にこのエラーが出たので selinux を止めちゃうという対処法でとりあえずはインストールしてしまいました.
2010年1月7日木曜日
メモリ関連のメモ
カーネル内でメモリを動的に確保するために使う kmalloc と vmalloc.
あれ,これの違いはなんだろう?と思い調べる.
●kmalloc:確保するメモリをスラブから取得している
-割り当てられたアドレス空間には物理ページがマッピング済みなのでページフォルトは起きない
-アドレス空間にマッピングされているページは連続
●vmalloc:vmalloc用の領域からアドレス空間を割り当て(kmallocの拡張版)
-割り当てられたアドレス空間には物理ページがマッピングされていない場合がある
-アドレス空間にマッピングされるページは非連続
という違いがあるよう.
kmalloc により確保した領域(というかスラブが確保した領域)は /proc/slabinfo で見られるようです.
vmallocの仕組みが未だにしっくりこない…(@_@)
ということで参考ページは以下.メモメモ.
スラブアロケータ - Linuxカーネルメモ
kmalloc,vmalloc - Linuxカーネルメモ
Omicron Linux/vmalloc
あれ,これの違いはなんだろう?と思い調べる.
●kmalloc:確保するメモリをスラブから取得している
-割り当てられたアドレス空間には物理ページがマッピング済みなのでページフォルトは起きない
-アドレス空間にマッピングされているページは連続
●vmalloc:vmalloc用の領域からアドレス空間を割り当て(kmallocの拡張版)
-割り当てられたアドレス空間には物理ページがマッピングされていない場合がある
-アドレス空間にマッピングされるページは非連続
という違いがあるよう.
kmalloc により確保した領域(というかスラブが確保した領域)は /proc/slabinfo で見られるようです.
vmallocの仕組みが未だにしっくりこない…(@_@)
ということで参考ページは以下.メモメモ.
スラブアロケータ - Linuxカーネルメモ
kmalloc,vmalloc - Linuxカーネルメモ
Omicron Linux/vmalloc
2009年11月19日木曜日
システムコールの追加
Linux2.6.25カーネルにシステムコールの追加をするのでメモメモ.
ちなみにその時にx86? bit数?とかかなり初歩的なことが分かっていないことが発覚したので,それについても近いうちにまとめます.
●システムコールの追加のためにすること
1)システムコール番号の登録
2)システムコールテーブルに登録
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
4)ヘッダファイルの作成
5)システムコール本体の作成
6)カーネルの再構築
以下,詳しくやることを書いていきます.
1)システムコール番号の登録
include/asm/unistd_32.h に
#define __NR_システムコール名 システムコール番号
を追加.
/usr/include/asm/unistd_32.hにも同様に追記する
/*62bitb版OSの場合は,unistd_64.hに追記する*/
/*OSのbit数は$uname -iで調べました*/
2)システムコールテーブルに登録
arch/x86/kernel/syscall_table_32.S に
.long sys_システムコール名
を追加.
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
arch/x86/kernel/Makefile のobj-yの項目に
システムコール名.o
を追加.
4)ヘッダファイルの作成
4-1)カーネル空間用
include/linux/システムコール名.h を作成
#ifndef NR_システムコール名_H
#define NR_システムコール名_H
#include <linux/unistd.h>
#include <linux/linkage.h>
#define システムコール名(arg1) syscall(__NR_システムコール名, arg1)
#endif
4-2)ユーザ空間用
/usr/include/linux/システムコール名.h を作成
4-1で作成したヘッダファイルの#include <linux/linkage.h>を#include <linux/syscall.h>に変更したものを作成する
5)システムコール本体の作成
システムコール名.cというファイルを以下のように作成し,arch/x86/kernel/以下に保存する.
#include <linux/システムコール名.h>
asmlinkage 関数型 sys_システムコール名 (引数){
/* システムコールの内容を記述 */
}
6)カーネルの再構築
make bzImage && make install をした後に再起動!
システムコールをユーザモードプロセスから利用する場合は,ファイル内に#include <linux/システムコール名.h>を記述して利用する
これでいけるハズ
ちなみにその時にx86? bit数?とかかなり初歩的なことが分かっていないことが発覚したので,それについても近いうちにまとめます.
●システムコールの追加のためにすること
1)システムコール番号の登録
2)システムコールテーブルに登録
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
4)ヘッダファイルの作成
5)システムコール本体の作成
6)カーネルの再構築
以下,詳しくやることを書いていきます.
1)システムコール番号の登録
include/asm/unistd_32.h に
#define __NR_システムコール名 システムコール番号
を追加.
/usr/include/asm/unistd_32.hにも同様に追記する
/*62bitb版OSの場合は,unistd_64.hに追記する*/
/*OSのbit数は$uname -iで調べました*/
2)システムコールテーブルに登録
arch/x86/kernel/syscall_table_32.S に
.long sys_システムコール名
を追加.
3)追加するシステムコールのオブジェクトファイル名をMakefileに追記
arch/x86/kernel/Makefile のobj-yの項目に
システムコール名.o
を追加.
4)ヘッダファイルの作成
4-1)カーネル空間用
include/linux/システムコール名.h を作成
#ifndef NR_システムコール名_H
#define NR_システムコール名_H
#include <linux/unistd.h>
#include <linux/linkage.h>
#define システムコール名(arg1) syscall(__NR_システムコール名, arg1)
#endif
4-2)ユーザ空間用
/usr/include/linux/システムコール名.h を作成
4-1で作成したヘッダファイルの#include <linux/linkage.h>を#include <linux/syscall.h>に変更したものを作成する
5)システムコール本体の作成
システムコール名.cというファイルを以下のように作成し,arch/x86/kernel/以下に保存する.
#include <linux/システムコール名.h>
asmlinkage 関数型 sys_システムコール名 (引数){
/* システムコールの内容を記述 */
}
6)カーネルの再構築
make bzImage && make install をした後に再起動!
システムコールをユーザモードプロセスから利用する場合は,ファイル内に#include <linux/システムコール名.h>を記述して利用する
これでいけるハズ
2009年9月28日月曜日
コンテキストスイッチのソースコード
今後手を加える予定なのでここにメモしときます.
(Linux2.6.25 kernel)
●コンテキストスイッチをしている箇所
kenrel/sched.c 内 context_switch()
switch_mm() によってプロセス空間の切り替え,switch_to() によって各種レジスタの切り替えを行っている.
●コンテキストを切り替える際に保存する情報
task_structに格納している
:定義は include/linux/sched.h l994
更に,CPU依存の低レベルな実行コンテキストは thread_struct に格納している
:定義は include/asm-x86/processor.h l315
以下はソースコードコピペ(長すぎて邪魔だったので消しましたw 09/10/15)
(Linux2.6.25 kernel)
●コンテキストスイッチをしている箇所
kenrel/sched.c 内 context_switch()
switch_mm() によってプロセス空間の切り替え,switch_to() によって各種レジスタの切り替えを行っている.
●コンテキストを切り替える際に保存する情報
task_structに格納している
:定義は include/linux/sched.h l994
更に,CPU依存の低レベルな実行コンテキストは thread_struct に格納している
:定義は include/asm-x86/processor.h l315
以下はソースコードコピペ(長すぎて邪魔だったので消しましたw 09/10/15)
2009年9月17日木曜日
クロスリファレンスLXR
カーネルのソースコードを参照しやすくするために入れました.
入れ方&使い方は全てここに集約されています.
ViVa! Saborigineer. - クロスリファレンス
とりあえず使い方だけメモメモ
1.lxr/sourceにソースファイルを展開
lxr/source/バージョン名/sourceとなるようにして作成
2.genxrefを使って、lxr/source/バージョン名/にデータベース(fileidx,xref)を作成
$ ../../bin/genxref source/
3.fileidx、xrefのアクセス権の変更
$ chmod 644 fileidx xref
4."freetext search"、"file search"用のインデックスを作成
$ cd /var/www/html/lxr/source/バージョン名/
$ glimpseindex -H . source
$ chmod 644 .glimpse_*
5.versionsにバージョン名を追加
デフォルトのバージョン名を変更する場合は、defversionを変更
とり急ぎメモだけ.
入れ方&使い方は全てここに集約されています.
ViVa! Saborigineer. - クロスリファレンス
とりあえず使い方だけメモメモ
1.lxr/sourceにソースファイルを展開
lxr/source/バージョン名/sourceとなるようにして作成
2.genxrefを使って、lxr/source/バージョン名/にデータベース(fileidx,xref)を作成
$ ../../bin/genxref source/
3.fileidx、xrefのアクセス権の変更
$ chmod 644 fileidx xref
4."freetext search"、"file search"用のインデックスを作成
$ cd /var/www/html/lxr/source/バージョン名/
$ glimpseindex -H . source
$ chmod 644 .glimpse_*
5.versionsにバージョン名を追加
デフォルトのバージョン名を変更する場合は、defversionを変更
とり急ぎメモだけ.
2009年4月27日月曜日
Unix errno一覧
他サイトで見つけたのですが,現在とちょっと違っているようなので自分で調べてまとめてみました.
とりあえずmanページと,返ってきたエラーコードのみの少ない情報ですが(^^;)
(Fedora9 Kernel:2.6.25)
エラーが起きたときにreturnされる値(-1など)と,errnoって違うんですね.
知らなかったです.
参考ページ:
PC覚え書き | Unix系errno一覧
とりあえずmanページと,返ってきたエラーコードのみの少ない情報ですが(^^;)
(Fedora9 Kernel:2.6.25)
| 1 | EPERM | Operation not permitted (POSIX.1) |
| 2 | ENOENT | No such file or directory (POSIX.1) |
| 3 | ESRCH | No such process (POSIX.1) |
| 4 | EINTR | Interrupted function call (POSIX.1) |
| 5 | EIO | Input/output error (POSIX.1) |
| 6 | ENXIO | No such device or address (POSIX.1) |
| 7 | E2BIG | Argument list too long (POSIX.1) |
| 8 | ENOEXEC | Exec format error (POSIX.1) |
| 9 | EBADF | Bad file descriptor (POSIX.1) |
| 10 | ECHILD | No child processes (POSIX.1) |
| 11 | EAGAIN | Resource temporarily unavailable (may be the same value as EWOULDBLOCK)(POSIX.1) |
| 11 | EWOULDBLOCK | Operation would block (may be same value as EAGAIN) (POSIX.1) |
| 12 | ENOMEM | Not enough space (POSIX.1) |
| 13 | EACCES | Permission denied (POSIX.1) |
| 14 | EFAULT | Bad address (POSIX.1) |
| 15 | ENOTBLK | Block device required |
| 16 | EBUSY | Device or resource busy (POSIX.1) |
| 17 | EEXIST | File exists (POSIX.1) |
| 18 | EXDEV | Improper link (POSIX.1) |
| 19 | ENODEV | No such device (POSIX.1) |
| 20 | ENOTDIR | Not a directory (POSIX.1) |
| 21 | EISDIR | Is a directory (POSIX.1) |
| 22 | EINVAL | Invalid argument (POSIX.1) |
| 23 | ENFILE | Too many open files in system (POSIX.1) |
| 24 | EMFILE | Too many open files (POSIX.1) |
| 25 | ENOTTY | Inappropriate I/O control operation (POSIX.1) |
| 26 | ETXTBSY | Text file busy (POSIX.1) |
| 27 | EFBIG | File too large (POSIX.1) |
| 28 | ENOSPC | No space left on device (POSIX.1) |
| 29 | ESPIPE | Invalid seek (POSIX.1) |
| 30 | EROFS | Read-only file system (POSIX.1) |
| 31 | EMLINK | Too many links (POSIX.1) |
| 32 | EPIPE | Broken pipe (POSIX.1) |
| 33 | EDOM | Mathematics argument out of domain of function (POSIX.1 |
| 34 | ERANGE | Result too large (POSIX.1 |
| 35 | EDEADLK | Resource deadlock avoided (POSIX.1) |
| 35 | EDEADLOCK | Synonym for EDEADLK |
| 36 | ENAMETOOLONG | Filename too long (POSIX.1) |
| 37 | ENOLCK | No locks available (POSIX.1) |
| 38 | ENOSYS | Function not implemented (POSIX.1) |
| 39 | ENOTEMPTY | Directory not empty (POSIX.1) |
| 40 | ELOOP | Too many levels of symbolic links (POSIX.1) |
| 42 | ENOMSG | No message of the desired type (POSIX.1) |
| 43 | EIDRM | Identifier removed (POSIX.1) |
| 44 | ECHRNG | Channel number out of range |
| 45 | EL2NSYNC | Level 2 not synchronized |
| 46 | EL3HLT | Level 3 halted |
| 47 | EL3RST | Level 3 halted |
| 49 | EUNATCH | Protocol driver not attached |
| 51 | EL2HLT | Level 2 halted |
| 52 | EBADE | Invalid exchange |
| 53 | EBADR | Invalid request descriptor |
| 54 | EXFULL | Exchange full |
| 56 | EBADRQC | Invalid request code |
| 57 | EBADSLT | Invalid slot |
| 60 | ENOSTR | Not a STREAM (POSIX.1 (XSI STREAMS option)) |
| 61 | ENODATA | No message is available on the STREAM head read queue (POSIX.1) |
| 62 | ETIME | Timer expired (POSIX.1 (XSI STREAMS option))(POSIX.1 says STREAM ioctl(2) timeout) |
| 63 | ENOSR | No STREAM resources (POSIX.1 (XSI STREAMS option)) |
| 64 | ENONET | Machine is not on the network |
| 65 | ENOPKG | Package not installed |
| 66 | EREMOTE | Object is remote |
| 67 | ENOLINK | Link has been severed (POSIX.1) |
| 70 | ECOMM | Communication error on send |
| 71 | EPROTO | Protocol error (POSIX.1) |
| 72 | EMULTIHOP | Multihop attempted (POSIX.1) |
| 74 | EBADMSG | Bad message (POSIX.1) |
| 75 | EOVERFLOW | Value too large to be stored in data type (POSIX.1) |
| 76 | ENOTUNIQ | Name not unique on network |
| 77 | EBADFD | File descriptor in bad state |
| 78 | EREMCHG | Remote address changed |
| 79 | ELIBACC | Cannot access a needed shared library |
| 80 | ELIBBAD | Accessing a corrupted shared library |
| 81 | ELIBSCN | lib section in a.out corrupted |
| 82 | ELIBMAX | Attempting to link in too many shared libraries |
| 83 | ELIBEXEC | Cannot exec a shared library directly |
| 84 | EILSEQ | Illegal byte sequence (POSIX.1 |
| 85 | ERESTART | Interrupted system call should be restarted |
| 86 | ESTRPIPE | Streams pipe error |
| 87 | EUSERS | Too many users |
| 88 | ENOTSOCK | Not a socket (POSIX.1) |
| 89 | EDESTADDRREQ | Destination address required (POSIX.1) |
| 90 | EMSGSIZE | Message too long (POSIX.1) |
| 91 | EPROTOTYPE | Protocol wrong type for socket (POSIX.1) |
| 92 | ENOPROTOOPT | Protocol not available (POSIX.1) |
| 93 | EPROTONOSUPPORT | Protocol not supported (POSIX.1) |
| 94 | ESOCKTNOSUPPORT | Socket type not supported |
| 95 | ENOTSUP | Operation not supported (POSIX.1) |
| 95 | EOPNOTSUPP | Operation not supported on socket (POSIX.1)(ENOTSUP and EOPNOTSUPP have the same value on Linux |
| 96 | EPFNOSUPPORT | Protocol family not supported |
| 97 | EAFNOSUPPORT | Address family not supported (POSIX.1) |
| 98 | EADDRINUSE | Address already in use (POSIX.1) |
| 99 | EADDRNOTAVAIL | Address not available (POSIX.1) |
| 100 | ENETDOWN | Network is down (POSIX.1) |
| 101 | ENETUNREACH | Network unreachable (POSIX.1) |
| 102 | ENETRESET | Connection aborted by network (POSIX.1) |
| 103 | ECONNABORTED | Connection aborted (POSIX.1) |
| 104 | ECONNRESET | Connection reset (POSIX.1) |
| 105 | ENOBUFS | No buffer space available (POSIX.1 (XSI STREAMS option)) |
| 106 | EISCONN | Socket is connected (POSIX.1) |
| 107 | ENOTCONN | The socket is not connected (POSIX.1) |
| 108 | ESHUTDOWN | Cannot send after transport endpoint shutdown |
| 110 | ETIMEDOUT | Connection timed out (POSIX.1) |
| 111 | ECONNREFUSED | Connection refused (POSIX.1) |
| 112 | EHOSTDOWN | Host is down |
| 113 | EHOSTUNREACH | Host is unreachable (POSIX.1) |
| 114 | EALREADY | Connection already in progress (POSIX.1) |
| 115 | EINPROGRESS | Operation in progress (POSIX.1) |
| 116 | ESTALE | Stale file handle (POSIX.1) |
| 117 | EUCLEAN | Structure needs cleaning |
| 120 | EISNAM | Is a named type file |
| 121 | EREMOTEIO | Remote I/O error |
| 122 | EDQUOT | Disk quota exceeded (POSIX.1) |
| 123 | ENOMEDIUM | No medium found |
| 124 | EMEDIUMTYPE | Wrong medium type |
| 125 | ECANCELED | Operation canceled (POSIX.1) |
| 126 | ENOKEY | Required key not available |
| 127 | EKEYEXPIRED | Key has expired |
| 128 | EKEYREVOKED | Key has been revoked |
| 129 | EKEYREJECTED | Key was rejected by service |
エラーが起きたときにreturnされる値(-1など)と,errnoって違うんですね.
知らなかったです.
参考ページ:
PC覚え書き | Unix系errno一覧
2009年2月8日日曜日
IPアドレスを固定にする(Fedora9ネットワークマネージャの罠)
DHCPの設定でインストールしてしまったため,固定のIPアドレスにしなくちゃと思い,
『システム > 管理 > ネットワーク』内の『デバイス』のeth0の情報を編集.
しかしこれが謎なことに,固定のIPアドレスをちゃんと設定してeth0をリスタートしても,ネットワークにつなげません.
(LANにはつなげるのに)
また,DHCPにしてるときでも,
『システム > 管理 > ネットワーク』内の『デバイス』のeth0の情報で,
『Network Managerで管理』のチェックを外していると,
-firefoxがオフラインモードで起動する
-『コンピュータ起動時にデバイスを起動』にチェックしてるのに,起動してくれない
という迷惑なことが起きるのです……
なんでなんで?
…と思ったら記事発見.
昨日は日本語入力できなーい!って悩んでたけど,これもバグだったんですねー
【重要】『Fedora9』について
というわけで,ネットワークマネージャをサヨウナラしたところ,あっさり動作してくれました.
それにしてもぐじゃぐじゃ悩んだ…><;
デフォルトゲートウェイ?ネットワークアドレス?ブロードキャストアドレス?
全用語を確認しなおして自分のネットワークに関する浅い知識を補う良い機会となりましたw
ちなみに,このネットワークの設定は,
/etc/sysconfig/network-scripts/ifcfg-eth0ファイルに記述されてるみたい.
だから,ここを書き換えるだけでもIPアドレスの設定などが可能でした.
(BOOTPRONTOの値をdhcpからstaticもしくはnoneに変えて,IPADDR・NETMASK・GATEWAYの3つの値を登録すればOK)
『システム > 管理 > ネットワーク』内の『デバイス』のeth0の情報を編集.
しかしこれが謎なことに,固定のIPアドレスをちゃんと設定してeth0をリスタートしても,ネットワークにつなげません.
(LANにはつなげるのに)
また,DHCPにしてるときでも,
『システム > 管理 > ネットワーク』内の『デバイス』のeth0の情報で,
『Network Managerで管理』のチェックを外していると,
-firefoxがオフラインモードで起動する
-『コンピュータ起動時にデバイスを起動』にチェックしてるのに,起動してくれない
という迷惑なことが起きるのです……
なんでなんで?
…と思ったら記事発見.
昨日は日本語入力できなーい!って悩んでたけど,これもバグだったんですねー
【重要】『Fedora9』について
というわけで,ネットワークマネージャをサヨウナラしたところ,あっさり動作してくれました.
それにしてもぐじゃぐじゃ悩んだ…><;
デフォルトゲートウェイ?ネットワークアドレス?ブロードキャストアドレス?
全用語を確認しなおして自分のネットワークに関する浅い知識を補う良い機会となりましたw
ちなみに,このネットワークの設定は,
/etc/sysconfig/network-scripts/ifcfg-eth0ファイルに記述されてるみたい.
だから,ここを書き換えるだけでもIPアドレスの設定などが可能でした.
(BOOTPRONTOの値をdhcpからstaticもしくはnoneに変えて,IPADDR・NETMASK・GATEWAYの3つの値を登録すればOK)
2008年12月16日火曜日
メモリ使用量の制限
/boot/grub/grub.conf に追記することで簡単に可能でした.
title Fedora (2.6.25)
root (hd0,0)
kernel /vmlinuz-2.6.25 ro root=/dev/VolGroup00/LogVol00 rhgb quiet mem=1000M
initrd /initrd-2.6.25.img
これでメモリを1000MBに制限したことになります.
reboot してから
% cat /proc/meminfo
で確認できます.
参照ページ:
Linux 関係:grub.conf 起動時のメモリ - livedoor Blog(ブログ)
title Fedora (2.6.25)
root (hd0,0)
kernel /vmlinuz-2.6.25 ro root=/dev/VolGroup00/LogVol00 rhgb quiet mem=1000M
initrd /initrd-2.6.25.img
これでメモリを1000MBに制限したことになります.
reboot してから
% cat /proc/meminfo
で確認できます.
参照ページ:
Linux 関係:grub.conf 起動時のメモリ - livedoor Blog(ブログ)
2008年12月15日月曜日
シェルスクリプト
冒頭に使うシェルを記述し(#!/bin/sh),実行権限を与えることで,
./hoge.shと実行することが可能.
●cnt++;の表現
cnt=`expr $cnt + 1`
*イコールの前後にスペースを入れない
*'(シングルクォート)ではなく`(バッククォート)!!
●argv[1]の表現
$1
とか色々!
シェルスクリプト3年まで使ったことなかったけど,とても便利ですね★
参照ページ:
シェルスクリプト入門
シェルスクリプト(Bash)
./hoge.shと実行することが可能.
●cnt++;の表現
cnt=`expr $cnt + 1`
*イコールの前後にスペースを入れない
*'(シングルクォート)ではなく`(バッククォート)!!
●argv[1]の表現
$1
とか色々!
シェルスクリプト3年まで使ったことなかったけど,とても便利ですね★
参照ページ:
シェルスクリプト入門
シェルスクリプト(Bash)
2008年12月13日土曜日
環境変数:LD_PRELOAD
これを用いると,プログラムの変更なしに任意の関数をフックすることができるようです.
……こわい!!笑
環境変数 LD_PRELOAD - 技術メモ帳が分かりやすかったので参考にさせていただきました.
ある関数名を定義し,それを共有オブジェクトとして指定し,プログラムを実行します.
同名関数が存在した場合は上書きすることができるため,関数のフックが可能です.
以下,やり方を.
プログラムhooktest.cを作成し,共有オブジェクトとしてコンパイル.
% gcc -fPIC -shared -o hooktest.so hooktest.c
そして環境変数に指定してメインのプログラムを実行
% LD_PRELOAD=/home/test/hooktest.so ./main
*プログラムを実行する場所と,共有オブジェクトの場所関係を考慮しなくても済ませるため,絶対パスを利用した方がいいカモ
……こわい!!笑
環境変数 LD_PRELOAD - 技術メモ帳が分かりやすかったので参考にさせていただきました.
ある関数名を定義し,それを共有オブジェクトとして指定し,プログラムを実行します.
同名関数が存在した場合は上書きすることができるため,関数のフックが可能です.
以下,やり方を.
プログラムhooktest.cを作成し,共有オブジェクトとしてコンパイル.
% gcc -fPIC -shared -o hooktest.so hooktest.c
そして環境変数に指定してメインのプログラムを実行
% LD_PRELOAD=/home/test/hooktest.so ./main
*プログラムを実行する場所と,共有オブジェクトの場所関係を考慮しなくても済ませるため,絶対パスを利用した方がいいカモ
2008年12月12日金曜日
sysstat
システムの状態を監視することができるツール.
rpmで発見したのでいれてみたところ,謎なことにドキュメントしかなくてw
READMEに書いてあったページにいってダウンロードしました.
ここからsysstat-8.1.7.tar.gz
をダウンロード.
以下README通りにやってみたことを.
% tar xvf sysstat-8.1.7.tar.gz
% cd sysstat-8.1.7
% ./configure
% make && make install
インストール完了.
ここで,例えば,プロセスIDが2001のMysqlサーバを5秒ごとに20回値を見たい場合,
% ./pidstat -p 2001 5 20
とすることで,そのプロセスのユーザモード,システムモードでのCPU使用率を監視することができ,平均値まで算出してくれます.
詳細は分かりませんが,ある程度の時間監視したい場合に便利そう.
参照ページ:
sysstatで性能管理(その1)
pidstatでプロセス毎のCPU使用率を測定 | gmt-24.net
rpmで発見したのでいれてみたところ,謎なことにドキュメントしかなくてw
READMEに書いてあったページにいってダウンロードしました.
ここからsysstat-8.1.7.tar.gz
をダウンロード.
以下README通りにやってみたことを.
% tar xvf sysstat-8.1.7.tar.gz
% cd sysstat-8.1.7
% ./configure
% make && make install
インストール完了.
ここで,例えば,プロセスIDが2001のMysqlサーバを5秒ごとに20回値を見たい場合,
% ./pidstat -p 2001 5 20
とすることで,そのプロセスのユーザモード,システムモードでのCPU使用率を監視することができ,平均値まで算出してくれます.
詳細は分かりませんが,ある程度の時間監視したい場合に便利そう.
参照ページ:
sysstatで性能管理(その1)
pidstatでプロセス毎のCPU使用率を測定 | gmt-24.net
プロセスごとのCPU使用率の計算
(調べたいプロセスの使用時間) / (全体の時間)
で算出できます.
●調べたいプロセスの使用時間
/proc/(pid)/stat内の,
utime(14番目の値)+stime(15番目の値)
で算出可能
●全体の時間
/proc/stat内のCPU情報
cpu 3357 0 4313 1362393
(左から順に,ユーザーモード,低い優先度 (nice) でのユーザーモード,システムモード,タスク待ち(idle task))
を全て足し合わせた時間
*どちらの値も,積算されているものなので,同じ間隔をとって差をとる必要があります
/procの内容に関する詳細は,%man procで見られます.
この/proc以下の情報はクロック割り込みごとに値を更新します.
が,ユーザ空間から見るためには,ファイル形式になっているため,ファイルのopen,read,closeをしなければならず,多少の時間が必要です.
よって,1msや10ms間隔で見ることは無理そうです.
間隔がある程度大きくても大丈夫な場合は,調べたいプロセスに関する情報のみを追うことができる便利なツール,sysstatもあります.
詳細は次の記事へ.
全体を眺めるならばtopを利用.
ちなみにtopの更新はデフォルト5sだそうです.
オプションをつけることで更新間隔を変更することも可能です.
で算出できます.
●調べたいプロセスの使用時間
/proc/(pid)/stat内の,
utime(14番目の値)+stime(15番目の値)
で算出可能
●全体の時間
/proc/stat内のCPU情報
cpu 3357 0 4313 1362393
(左から順に,ユーザーモード,低い優先度 (nice) でのユーザーモード,システムモード,タスク待ち(idle task))
を全て足し合わせた時間
*どちらの値も,積算されているものなので,同じ間隔をとって差をとる必要があります
/procの内容に関する詳細は,%man procで見られます.
この/proc以下の情報はクロック割り込みごとに値を更新します.
が,ユーザ空間から見るためには,ファイル形式になっているため,ファイルのopen,read,closeをしなければならず,多少の時間が必要です.
よって,1msや10ms間隔で見ることは無理そうです.
間隔がある程度大きくても大丈夫な場合は,調べたいプロセスに関する情報のみを追うことができる便利なツール,sysstatもあります.
詳細は次の記事へ.
全体を眺めるならばtopを利用.
ちなみにtopの更新はデフォルト5sだそうです.
オプションをつけることで更新間隔を変更することも可能です.
2008年12月8日月曜日
subversion
みんなに教えてもらって,バージョン管理をすることにしました.
それとともに,今までの実験のやり方を見直し.
まず,実験マシンは書いたソースをコピーして動かすだけに.
(やりやすい様にscpを入れたシェルスクリプト作っちゃう)
NAS上でバージョン管理を.
eclipse上だと管理が楽なプラグイン(subclipse)があるとのことなので,
ついでにeclipseも最新版(ganymede)にインストール.
以下,Subclipseプラグインを参照
それとともに,今までの実験のやり方を見直し.
まず,実験マシンは書いたソースをコピーして動かすだけに.
(やりやすい様にscpを入れたシェルスクリプト作っちゃう)
NAS上でバージョン管理を.
eclipse上だと管理が楽なプラグイン(subclipse)があるとのことなので,
ついでにeclipseも最新版(ganymede)にインストール.
以下,Subclipseプラグインを参照
2008年12月5日金曜日
エイリアスの設定
つい先日,ディレクトリの中身を"rm *"で全消ししてしまいました涙
今までプログラムを書き直していたってゆう無駄…
これからはちゃんとバックアップをとろう!!と思いました.
あと,先輩のススメで,エイリアス作りました.
homeディレクトリ下の.bash_profileに,alias clr='rm *~'の記述を追加.
これでこれからは,rm *~なんて危ないコマンドを使わず,"clr"でゴミを消せることになりました!笑
参考ページ:
Linux全般編 シェルの基本操作法(後編1:エイリアスやヒストリの使い方)
Linux全般編 シェルの基本操作法(後編4:シェルの設定ファイル)
今までプログラムを書き直していたってゆう無駄…
これからはちゃんとバックアップをとろう!!と思いました.
あと,先輩のススメで,エイリアス作りました.
homeディレクトリ下の.bash_profileに,alias clr='rm *~'の記述を追加.
これでこれからは,rm *~なんて危ないコマンドを使わず,"clr"でゴミを消せることになりました!笑
参考ページ:
Linux全般編 シェルの基本操作法(後編1:エイリアスやヒストリの使い方)
Linux全般編 シェルの基本操作法(後編4:シェルの設定ファイル)
2008年12月2日火曜日
/proc ってすごい!!
システムのCPU使用率や,メモリ使用量などの情報が全て入っています.
例)
/proc/meminfo :メモリ搭載量・空きメモリ量などが記載
/proc/cpuinfo :CPUの情報が記載
また,/procディレクトリ以下には,それぞれのプロセスの情報も格納されています.
プロセスIDごとにディレクトリがあり,その中に格納されています
例)
/proc/pid/map :そのプログラムがどのアドレスを何に使っているか
/proc/pid/status :そのプロセスの名前や状態などの情報
全て情報がここを見ればわかっちゃうわけですねー!
すごい.
今得たいのは,それぞれのプロセスの情報なので,
/proc/pid/statを見ればOKなようです.
参考ページ:
/procによるLinuxチューニング
Manpage of PROC
例)
/proc/meminfo :メモリ搭載量・空きメモリ量などが記載
/proc/cpuinfo :CPUの情報が記載
また,/procディレクトリ以下には,それぞれのプロセスの情報も格納されています.
プロセスIDごとにディレクトリがあり,その中に格納されています
例)
/proc/pid/map :そのプログラムがどのアドレスを何に使っているか
/proc/pid/status :そのプロセスの名前や状態などの情報
全て情報がここを見ればわかっちゃうわけですねー!
すごい.
今得たいのは,それぞれのプロセスの情報なので,
/proc/pid/statを見ればOKなようです.
参考ページ:
/procによるLinuxチューニング
Manpage of PROC
2008年11月27日木曜日
Rubyのインストール
スクリプトを作るのにRubyを使ってみることにしました.
昔まつもとさんの講演を聞きに行って,最も自然言語に近いスクリプト言語ということで興味があったので.
ここからダウンロード
Ruby Install Guideを参考にインストール
以降,そのページにありますが,一応やったことをメモ.
% tar xvf ruby-1.8.7-p72.tar.gz
% cd ruby-1.8.7-p72
% ./configure
% make
% su
# make install
# exit
% make clean
デフォルトでは/usr/local 以下にインストールされるようです.
% ruby -v
とすると,バージョンが表示され,ちゃんとインストールできていることが確認できました.
よーし,初Ruby挑戦♪♪
公式ページのチュートリアルはプログラミング初心者向けで読みやすいですw
昔まつもとさんの講演を聞きに行って,最も自然言語に近いスクリプト言語ということで興味があったので.
ここからダウンロード
Ruby Install Guideを参考にインストール
以降,そのページにありますが,一応やったことをメモ.
% tar xvf ruby-1.8.7-p72.tar.gz
% cd ruby-1.8.7-p72
% ./configure
% make
% su
# make install
# exit
% make clean
デフォルトでは/usr/local 以下にインストールされるようです.
% ruby -v
とすると,バージョンが表示され,ちゃんとインストールできていることが確認できました.
よーし,初Ruby挑戦♪♪
公式ページのチュートリアルはプログラミング初心者向けで読みやすいですw
登録:
投稿 (Atom)