カテゴリー「Linux」の31件の記事

2008年7月25日 (金)

[プログラミング] Inside a profiler

最近はネタ記事ばかり投稿してるかときちです。どうもこんにちは。

「いや待て、このままでは只のバカと思われてしまうよ!」

という危機感を持ちましたので、この前社内で発表したプロファイラの仕組みについてのスライドを公開することにします。
「プロファイラとは何か」から始まり、実際にプロファイラがどのような仕組みで動くか、動いているかを紹介しています・・・が、そんなことよりも勉強しているボクを見てください。

情報自体はインターネットからの寄せ集めですが、まあ初心者向けとしてそこそこ面白がってくれました。つっこみどころとかあると思いますので、コメント待ってます。

それにしてもスライド作成中に、Windowsの商業向けでは唯一のVisual StudioがTeam Edition(20万円以上もする!)でなければプロファイラが付属していないことを知りました。

Macではより高機能なDTraceベースのInstrumentsなんかが無償で付いていると言うのに、なんだそれ。開発者をなめてんのか、と。

| | コメント (2) | トラックバック (0)

2008年2月13日 (水)

[Linux] 今日書いた僅かなプログラム

Subversionのワーキングコピーに追加されたすべてのファイルを追加するようセットしてからコミットするシェルスクリプト。

$ svn st | egrep '^¥?' | awk '{printf("%s¥n",$2);} | xargs svn add | svn commit -m "hogepiyo"

ワーキングコピーのステータスを表示して、その中で「?」で始まっている行(=未管理ファイル)を取り出し、その?をawkで抜いてリポジトリに追加、コミットするという流れです。

これだけ。もはやプログラムですら無いですね。

うーん、もっと色々とプログラムを書かないと成長しないぞ。>自分
(SICPもペースダウンしているし・・・)

| | コメント (0) | トラックバック (0)

2007年12月11日 (火)

ページャをカラー化してみた

インターネットを調べていたら「lessコマンドの出力をファイルタイプでカラー化する」という記事(その1その2)がありました。
曰く、lessコマンドの代わりにvimが提供するツール:less.shを使用するだけでいいのだそう。

早速自分の.bash_profileに以下の記述を追加して確認しました。

alias less='/usr/share/vim/vim61/macros/less.sh'
 ←「vim61」は環境によって変わります。大抵は「vimcurrent」みたい。

その結果は以下のとおり。

続きを読む "ページャをカラー化してみた"

| | コメント (0) | トラックバック (0)

2007年11月 7日 (水)

SNMPの最新実装を追う・・・つもりが

注:技術的な話です。つまんないですからね。

仕事でIPv6まわりのSNMP実装状況を見ていました。以下はそのときのメモです。

続きを読む "SNMPの最新実装を追う・・・つもりが"

| | コメント (4) | トラックバック (0)

2007年10月20日 (土)

Linuxの/procの便利なことといったら

Cloud_sky 仕事の都合で、IPv6アドレスやTCPの各コネクションの状態をどうやったら簡単に入手できるか調べなければならなかったので、BSDライセンスのオープンソースであるNetSNMPをダウンロードして、そのソースをチェックすることにしました。

SNMPではMIB-II下でネットワーク情報を公開する機能を提供するので、NetSNMPのソースを読めば該当箇所が簡単に分かるかなと思ったことと、たぶん各MIB項目ごとに処理が分かれているだろうから、必要な情報取得処理だけ見られて読み易そうだ、というグータラ心もあったためです。

 

そうしたら、おお、Linuxではprocファイルシステム下にあるファイル"/proc/net/if_inet6"や"/proc/net/tcp6"を単にfopen()でオープンして、そのままfgets() & sscanf()して情報を入手していました。なんてお手軽な方法なんだ!とビックリです。
古いSolaris用のソースだと1つ1つをioctl()で調べていっているけれど、そんなことをしなくてもカーネル情報が取得できてしまうのが素晴らしい。

実は*NIX系OSは「全てがファイルで、出来るだけ多くの情報はテキストで表現されるべき」という信条の下に設計されているため、このようにファイルを調べるだけで必要な情報が入手できます。VxWorksとかだとこうはいかなくて、それぞれに情報に対応したAPIを呼び出してあげないといけない。多分Windowsもそうなんじゃないかと。

この差は大きくて、こういうところの統一性・スマートさを見ると、ますます*NIXっていいなと思ってしまいます。組込み環境で動かすには起動が遅かったりするので苦労も多いんですけどね。

| | コメント (0) | トラックバック (0)

2007年9月12日 (水)

危険な2つのUNIXシグナル

<2007/9/14 一部に事実と異なる記述があったので修正しました>

Carpet たびたびすみません。これもUNIX系OSの話で、興味のない人にはつまらない話です。

UNIX系OSでは、非同期の情報伝達手段として「シグナル」が提供されています。コマンドプロンプトで実行しているときに動作を止めたいときはCtrl+cで止めますが、これはプロセスにSIGINTシグナルが送信されて、そのシグナルに対するデフォルト動作としてプロセスが終了しているのです。

このシグナル、通常使用しているぶんにはあまり関係ないと思うかもしれませんが、注意が必要なシグナルが2つだけあります。

SIGPIPEと、SIGCHLDです。

続きを読む "危険な2つのUNIXシグナル"

| | コメント (0) | トラックバック (0)

2007年8月 3日 (金)

IPv6アドレスの文字列をどのように求めるか

Lunch_plate (最近自宅のMacでは記事の投稿ができなくなっているので(原因不明)、会社からこっそり書いています。なので写真がありません)

(2007/8/5) 写真を追加。ルヴァンで食べたランチプレートです。野菜が甘くて美味しい!調理が上手とかっていうよりも、野菜そのものの味が柔らかく、しっかりしているのです。さすがプロ。

IPv6アドレスは128ビットのアドレス空間を持ち、"fe80::2uu:vvff:feww:xxyy%en1"といったような文字列で表現されます。

この文字列の128bitsの値からどうやって文字列を取得しているんだろう?と思ってping6.cのソースを眺めていたら、どうやらgetnameinfo()を使うみたい。

manで調べてみると、これはgetaddrinfo()と対になった関数で、つまりIPv4/IPv6を意識しないソケット情報を用いるときに使う関数です。これを使えばどうやら省略表記も含めて変換してくれるみたいなので、本関数のソースを含め、もう少し処理を追ってみようと思います。

ちなみにinetutils-1.5以降のソースであれば、ping6.c(inetutils)やgetnameinfo.c(こっちはglibc/inetの中にあります)で中身を見られます。
気になる方はゼヒ一緒に見てみましょう。そして得た知識を僕にください(←他力本願)

| | コメント (0) | トラックバック (0)

2007年6月 8日 (金)

メモリ破壊チェックツール

Struggling メモリ破壊や、メモリリークを調べる場合,Linux状では通常Electric Fenceやdmalloc、valgrindなどを使用します。メモリリーク、ダブルフリーはもちろん、valgrindは領域を超えたアクセスなどまで検出してくれる優れものです。

しかしこれらは、組み込み機器のようなメモリの少ない、遅い環境で使うことは難しいのが実情です。バイナリをROMに持ってくることすらできません。そのため、メモリエラーの類が発生した場合はソースレビューか、コンソールへのfprintf()(←printf()だとバッファリングでずれる)にどうしても頼ってしまいます。

(以下マニアックな話が続くので、残りは「続きを読む」に書きます)

続きを読む "メモリ破壊チェックツール"

| | コメント (0) | トラックバック (0)

2007年5月31日 (木)

ウォッチドッグタイマって何?

Timerimage 組み込み向けの作業を行っていると、必ず意識する「ウォッチドッグタイマ」という概念があります。『指定した時間(tick)後にこの関数を呼んでほしい』というようにAPIを呼ぶことで、キッチリその時間後に処理が行われるものです。

VxWorksのAPIではwdCreate()、wdStart()などが相当します。

続きを読む "ウォッチドッグタイマって何?"

| | コメント (0) | トラックバック (0)

2006年12月13日 (水)

load averageはどこから情報を得ているか

topコマンドやwコマンドで表示している「load average情報」はどこから情報を得ているか、というのが気になって調査中。

busyboxのソースを見ると、単に/proc/loadavgの情報を読んでいるだけだったので、カーネルソースの中にまで入ってきてしまいました。

で、今はプロセスの状態が何種類あって、それぞれの状態はプロセススケジューリング時にどうやって扱われるかを調べてます。そのあとはprocファイルシステムを調べて、どの状態のときに情報を書き込んでいるかを調べる予定。

肝心の数値の意味まで辿り着くのはいつのことやら・・・。

| | コメント (0) | トラックバック (0)