プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

perf scripting support 入門 このエントリーをはてなブックマークに追加

Frederic Weisbecker がperf scripting入門を書いていたので転載
なお、Fedora13ではちゃんと動いたけど、Fedora12では動かなかった。依存ライブラリがかなり新しい者を要求してるっぽい。

I have the feeling you've made an ad-hoc post processing script that seems
to rewrite all the format parsing, debugfs, stream handling, etc... we
have that in perf tools already.

May be you weren't aware of what we have in perf in terms of scripting support.

First, launch perf list and spot the events you're interested in, let's
say you're interested in irqs:

$ perf list
[...]
irq:irq_handler_entry [Tracepoint event]
irq:irq_handler_exit [Tracepoint event]
irq:softirq_entry [Tracepoint event]
irq:softirq_exit [Tracepoint event]
[...]

Now do a trace record:

# perf record -e irq:irq_handler_entry -e irq:irq_handler_exit -e irq:softirq_entry -e irq:softirq_exit cmd

or more simple:

# perf record -e irq:* cmd

You can use -a instead of cmd for wide tracing.

Now generate a perf parsing script on top of these traces:

# perf trace -g perl
generated Perl script: perf-trace.pl


Fill up the trace handlers inside perf-trace.pl and just run it:

# perf trace -s perf-trace.pl

Once ready, you can place your script in the script directory.



意訳:

適当にとりたいトレースイベントを-e オプションで選んで、データ収集しろや。
データは perf.data ファイルに保存される。

# perf record -e 'irq:*'

-g オプションで選んだ -e を元に出力スクリプトのテンプレートが生成される

# perf trace -g perl

中身はこんなの

# perf trace event handlers, generated by perf trace -g perl
# Licensed under the terms of the GNU GPL License version 2

# The common_* event handler fields are the most useful fields common to
# all events. They don't necessarily correspond to the 'common_*' fields
# in the format files. Those fields not available as handler params can
# be retrieved using Perl functions of the form common_*($context).
# See Context.pm for the list of available functions.

use lib "$ENV{'PERF_EXEC_PATH'}/scripts/perl/Perf-Trace-Util/lib";
use lib "./Perf-Trace-Util/lib";
use Perf::Trace::Core;
use Perf::Trace::Context;
use Perf::Trace::Util;

sub trace_begin
{
# optional
}

sub trace_end
{
# optional
}

sub irq::softirq_exit
{
my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm,
$vec) = @_;

print_header($event_name, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm);

printf("vec=%s\n",
symbol_str("irq::softirq_exit", "vec", $vec));
}


sub irq::softirq_entry
{
my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm,
$vec) = @_;

print_header($event_name, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm);

printf("vec=%s\n",
symbol_str("irq::softirq_entry", "vec", $vec));
}

sub irq::irq_handler_exit
{
my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm,
$irq, $ret) = @_;

print_header($event_name, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm);

printf("irq=%d, ret=%d\n",
$irq, $ret);
}

sub irq::irq_handler_entry
{
my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm,
$irq, $name) = @_;

print_header($event_name, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm);

printf("irq=%d, name=%s\n",
$irq, $name);
}

sub trace_unhandled
{
my ($event_name, $context, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm) = @_;

print_header($event_name, $common_cpu, $common_secs, $common_nsecs,
$common_pid, $common_comm);
}

sub print_header
{
my ($event_name, $cpu, $secs, $nsecs, $pid, $comm) = @_;

printf("%-20s %5u %05u.%09u %8u %-20s ",
$event_name, $cpu, $secs, $nsecs, $pid, $comm);
}



これを適当にいじって、printの形式かえたり、引数によって出力させないとか、
好きにしろ。

それを trace -s すると、データを引数スクリプトで加工した出力が得られる

# perf trace -s perf-trace.pl


上記、irq:*のサンプル


[root@kosaopt tmp]# perf trace -s perf-trace.pl
irq::softirq_entry 3 1232482.338391992 3046 ls vec=TIMER
irq::softirq_exit 3 1232482.338394889 3046 ls vec=TIMER
irq::softirq_entry 3 1232482.339389340 3046 ls vec=TIMER
irq::softirq_exit 3 1232482.339395908 3046 ls vec=TIMER
irq::softirq_entry 3 1232482.339397522 3046 ls vec=RCU
irq::softirq_exit 3 1232482.339400024 3046 ls vec=RCU




ところで、現在スクリプトがperlとpythonしか選べないという問題がある。だれかruby対応をRubyKaigiまでに
終わらせてしまってサプライズイベントを発表しようとかいう猛者はおらんか。



関連記事
スポンサーサイト
linux | 【2010-07-31(Sat) 20:15:48】 | Trackback:(0) | Comments:(1)

サミットノミネートリストのうちのサーバ業界関係者 このエントリーをはてなブックマークに追加

なんかサーバー業界での勢力図が欲しいと言われたので、適当につくってみた。
やはし、IBMは強いね。事実上なんも貢献してなくてもS390専用コードとかPOWER専用コードとかでコミットを稼ぎまくるから。


Fujitsu 6人
Hidetoshi Seto
KAMEZAWA Hiroyuki
Kenji Kaneshige
KOSAKI Motohiro
Li Zefan
Wei Yongjun

IBM 6人
Christof Schmitt
Heiko Carstens
Martin Schwidefsky
Mimi Zohar
Steve French
Swen Schillig

HP 3人
Alex Chiang
Bjorn Helgaas
Vlad Yasevich

NTT 2人
FUJITA Tomonori
Ryusuke Konishi

Hitachi 1人
Masami Hiramatsu

NEC, VA Linux, Micracle Linux 0人




関連記事
linux | 【2010-07-29(Thu) 18:39:52】 | Trackback:(0) | Comments:(2)

2010年のKernel Summit のNominated List このエントリーをはてなブックマークに追加

Ted Tso先生からSummitの季節だよー。みんな旅行の準備してねー。というメールが飛んでいる


Date: Wed, 28 Jul 2010 22:17:29 -0400
To: linux-kernel@vger.kernel.org,
ksummit-2010-discuss@lists.linux-foundation.org
Subject: Kernel Summit 2010 reminder
From: "Theodore Ts'o"


Hi all,

I have updated the nominations list on http://ksummit2010.kernel.org
to reflect names that people have put forward. As a reminder, if there
are people that you think that the Kernel Summit 2010 program committee
should consider, please submit them to the program committee by this
Friday (two days from now!).

Also, if you are interested in participating in the discussion of topics
for the 2010 kernel summit, please subscribe yourself to the
ksummit-2010-discuss mailing list. Instructions for doing this can be
found at http://ksummit2010.kernel.org.

Many thanks.

- Ted
--



URLからNominated List みると以下の人がエントリされているっぽい


Abhijeet Kolekar abhijeet.kolekar at intel.com
Al Viro viro at zeniv.linux.org.uk
Alan Cox alan at linux.intel.com
Alan Stern stern at rowland.harvard.edu
Alasdair G Kergon agk at redhat.com
Alex Chiang achiang at hp.com
Alex Deucher alexdeucher at gmail.com
Alex Elder aelder at sgi.com
Alexander Beregalov a.beregalov at gmail.com
Alexander Duyck alexander.h.duyck at intel.com
Alexander Graf agraf at suse.de
Alexey Dobriyan adobriyan at gmail.com
Andi Kleen ak at linux.intel.com
Andrea Arcangeli aarcange at redhat.com
Andrew Vasquez andrew.vasquez at qlogic.com
Andy Adamson andros at netapp.com
Andy Walls awalls at radix.net
Anthony Ligouri anthony at codemonkey.ws
Anton Blanchard anton at samba.org
Anton Vorontsov avorontsov at ru.mvista.com
Arnaldo Carvalho de Melo acme at redhat.com
Arnd Bergmann arnd at arndb.de
Artem Bityutskiy Artem.Bityutskiy at nokia.com
Arve Hjønnevåg arve at android.com
Avi Kivity avi at redhat.com
Bartlomiej Zolnierkiewicz bzolnier at gmail.com
Ben Dooks ben-linux at fluff.org
Ben Hutchings bhutchings at solarflare.com
Ben Skeggs bskeggs at redhat.com
Benjamin Herrenschmidt benh at kernel.crashing.org
Benjamin Li benli at broadcom.com
Benny Halevy bhalevy at panasas.com
Bill Pemberton wfp5p at virginia.edu
Bjorn Helgaas bjorn.helgaas at hp.com
Boaz Harrosh bharrosh at panasas.com
Bob Copeland me at bobcopeland.com
Bob Moore robert.moore at intel.com
Borislav Petkov borislav.petkov at amd.com
Brian Swetland swetland at google.com
Bruce Allan bruce.w.allan at intel.com
Bryan Wu cooloney at kernel.org
Cai Qian caiqian at redhat.com
Catalin Marinas catalin.marinas at arm.com
Chris Wilson chris at chris-wilson.co.uk
Christian Lamparter chunkeey at web.de
Christof Schmitt christof.schmitt at de.ibm.com
Christoph Hellwig hch at lst.de
Christoph Lameter cl at linux-foundation.org
Chuck Lever chuck.lever at oracle.com
Clemens Ladisch clemens at ladisch.de
Corentin Chary corentincj at iksaif.net
Cyrill Gorcunov gorcunov at openvz.org
Dan Carpenter error27 at gmail.com
Dan Magenheimer dan.magenheimer at oracle.com
Dan Williams dan.j.williams at intel.com
Daniel Mack daniel at caiaq.de
Dario Faggioli raistlin at linux.it
Dave Airlie airlied at redhat.com
Dave Chinner david at fromorbit.com
David Brownell dbrownell at users.sourceforge.net
David Daney ddaney at caviumnetworks.com
David Howells dhowells at redhat.com
David Rientjes rientjes at google.com
David S. Miller davem at davemloft.net
David Woodhouse David.Woodhouse at intel.com
Devin Heitmueller dheitmueller at kernellabs.com
Dhananjay Phadke dhananjay at netxen.com
Dmitry Torokhov dtor at mail.ru
Dominik Brodowski linux at dominikbrodowski.net
Douglas Schilling Landgraf dougsland at redhat.com
Eilon Greenstein eilong at broadcom.com
Eric Anholt eric at anholt.net
Eric Dumazet eric.dumazet at gmail.com
Eric Miao eric.y.miao at gmail.com
Eric Paris eparis at redhat.com
Eric Van Hensbergen ericvh at gmail.com
Eric W. Biederman ebiederm at xmission.com
Felipe Balbi felipe.balbi at nokia.com
Felix Blyakher felixb at sgi.com
Felix Fietkau nbd at openwrt.org
Florian Fainelli florian at openwrt.org
Frederic Weisbecker fweisbec at gmail.com
FUJITA Tomonori fujita.tomonori at lab.ntt.co.jp
Geert Uytterhoeven geert at linux-m68k.org
Gertjan van Wingerde gwingerde at gmail.com
Gleb Natapov gleb at redhat.com
Grant Likely grant.likely at secretlab.ca
Greg Ungerer gerg at uclinux.org
Guennadi Liakhovetski g.liakhovetski at gmx.de
H Hartley Sweeten hsweeten at visionengravers.com
H. Peter Anvin hpa at zytor.com
Hans de Goede hdegoede at redhat.com
Hans Verkuil hverkuil at xs4all.nl
Haojian Zhuang haojian.zhuang at marvell.com
Heiko Carstens heiko.carstens at de.ibm.com
Henrique de Moraes Holschuh hmh at hmh.eng.br
Herbert Xu herbert at gondor.apana.org.au
Hidetoshi Seto seto.hidetoshi at jp.fujitsu.com
Huang Weiyi weiyi.huang at gmail.com
Hugh Dickins hugh.dickins at tiscali.co.uk
Inaky Perez-Gonzalez inaky at linux.intel.com
Ingo Molnar mingo at elte.hu
Ivo van Doorn IvDoorn at gmail.com
J. Bruce Fields bfields at citi.umich.edu
Jack Steiner steiner at sgi.com
James Morris jmorris at namei.org
Jan Engelhardt jengelh at medozas.de
Jan Kara jack at suse.cz
Jan Kiszka jan.kiszka at siemens.com
Jarod Wilson jarod at wilsonet.com
Jason Wessel jason.wessel at windriver.com
Jaswinder Singh Rajput jaswinderrajput at gmail.com
Jean Delvare khali at linux-fr.org
Jean-Francois Moine moinejf at free.fr
Jeff Garzik jgarzik at redhat.com
Jeff Kirsher jeffrey.t.kirsher at intel.com
Jeff Layton jlayton at redhat.com
Jens Axboe jens.axboe at oracle.com
Jeremy Fitzhardinge jeremy.fitzhardinge at citrix.com
Jerome Glisse jglisse at redhat.com
Jesse Barnes jbarnes at virtuousgeek.org
Jiri Kosina jkosina at suse.cz
Jiri Pirko jpirko at redhat.com
Jiri Slaby jirislaby at gmail.com
Joe Eykholt jeykholt at cisco.com
Joe Perches joe at perches.com
Joel Becker joel.becker at oracle.com
Joerg Roedel joerg.roedel at amd.com
Johan Hovold jhovold at gmail.com
Johannes Berg johannes at sipsolutions.net
John W. Linville linville at tuxdriver.com
Josef Bacik josef at redhat.com
Jouni Malinen j at w1.fi
Julia Lawall julia at diku.dk
Juuso Oikarinen juuso.oikarinen at nokia.com
Kalle Valo kalle.valo at nokia.com
KAMEZAWA Hiroyuki kamezawa.hiroyu at jp.fujitsu.com
Kashyap Desai kashyap.desai at lsi.com
Kay Sievers kay.sievers at vrfy.org
Kees Cook kees.cook at canonical.com
Kenji Kaneshige kaneshige.kenji at jp.fujitsu.com
Kevin Hilman khilman at deeprootsystems.com
KOSAKI Motohiro kosaki.motohiro at jp.fujitsu.com
Krzysztof Helt krzysztof.h1 at wp.pl
Kumar Gala galak at kernel.crashing.org
Kuninori Morimoto morimoto.kuninori at renesas.com
Kyle McMartin kyle at mcmartin.ca
Len Brown len.brown at intel.com
Lennart Poettering mzerqung at 0pointer.de
Lennert Buytenhek buytenh at marvell.com
Li Zefan lizf at cn.fujitsu.com
Liam Girdwood lrg at slimlogic.co.uk
Lin Ming ming.m.lin at intel.com
Linus Torvalds torvalds at linux-foundation.org
Linus Walleij linus.walleij at stericsson.com
Luciano Coelho luciano.coelho at nokia.com
Luis R. Rodriguez lrodriguez at atheros.com
Magnus Damm damm at opensource.se
Magnus Damm magnus.damm at gmail.com
Manu Abraham manu at linuxtv.org
Marcel Holtmann marcel at holtmann.org
Marcelo Tosatti mtosatti at redhat.com
Mark Brown broonie at opensource.wolfsonmicro.com
Martin Schwidefsky schwidefsky at de.ibm.com
Masami Hiramatsu mhiramat at redhat.com
Matt Carlson mcarlson at broadcom.com
Matt Fleming matt at console-pimps.org
Matthew Garrett mjg at redhat.com
Mauro Carvalho Chehab mchehab at redhat.com
Mel Gorman mel at csn.ul.ie
Michael Buesch mb at bu3sch.de
Michael Chan mchan at broadcom.com
Michael Hennerich michael.hennerich at analog.com
Michal Marek mmarek at suse.cz
Michal Simek monstr at monstr.eu
Mike Christie michaelc at cs.wisc.edu
Mike Frysinger vapier at gentoo.org
Mike Isely isely at pobox.com
Mike Rapoport mike at compulab.co.il
Mikulas Patocka mpatocka at redhat.com
Mimi Zohar zohar at linux.vnet.ibm.com
Minchan Kim minchan.kim at gmail.com
Neil Brown neilb at suse.de
Nick Piggin npiggin at suse.de
Nicolas Pitre nico at marvell.com
Oleg Nesterov oleg at redhat.com
Patrick McHardy kaber at trash.net
Paul Mackerras paulus at samba.org
Paul Mundt lethal at linux-sh.org
Paul Walmsley paul at pwsan.com
Pavel Machek pavel at ucw.cz
Pekka Enberg penberg at cs.helsinki.fi
Peter P Waskiewicz Jr peter.p.waskiewicz.jr at intel.com
Peter Ujfalusi peter.ujfalusi at nokia.com
Peter Zijlstra peterz at infradead.org
Philipp Reisner philipp.reisner at linbit.com
Rafael J. Wysocki rjw at sisk.pl
Rafał Miłecki zajec5 at gmail.com
Ralf Baechle ralf at linux-mips.org
Randy Dunlap randy.dunlap at oracle.com
Reinette Chatre reinette.chatre at intel.com
Richard Purdie rpurdie at linux.intel.com
Rik van Riel riel at redhat.com
Robert Love robert.w.love at intel.com
Robert Richter robert.richter at amd.com
Roel Kluin roel.kluin at gmail.com
Roland Dreier rolandd at cisco.com
Roland McGrath roland at redhat.com
Ron Mercer ron.mercer at qlogic.com
Ron Minnich rminnich at sandia.gov
Russell King rmk+kernel at arm.linux.org.uk
Rusty Russell rusty at rustcorp.com.au
Ryusuke Konishi konishi.ryusuke at lab.ntt.co.jp
Sage Weil sage at newdream.net
Sam Ravnborg sam at ravnborg.org
Samuel Ortiz sameo at linux.intel.com
Sarah Sharp sarah.a.sharp at linux.intel.com
Sascha Hauer s.hauer at pengutronix.de
Serge Hallyn serge.hallyn at canonical.com
Sergei Shtylyov sshtylyov at ru.mvista.com
Srinidhi Kasagar srinidhi.kasagar at stericsson.com
Stefan Richter stefanr at s5r6.in-berlin.de
Stefani Seibold stefani at seibold.net
Stephen Hemminger shemminger at vyatta.com
Stephen Rothwell sfr at canb.auug.org.au
Steve French sfrench at us.ibm.com
Steven Whitehouse swhiteho at redhat.com
Sujith Manoharan Sujith.Manoharan at atheros.com
Suresh Siddha suresh.b.siddha at intel.com
Swen Schillig swen at vnet.ibm.com
Takashi Iwai tiwai at suse.de
Tao Ma tao.ma at oracle.com
Tejun Heo tj at kernel.org
Thomas Gleixner tglx at linutronix.de
Tom Herbert therbert at google.com
Tomi Valkeinen tomi.valkeinen at nokia.com
Tony Lindgren tony at atomide.com
Tony Luck tony.luck at intel.com
Trond Myklebust Trond.Myklebust at netapp.com
Uwe Kleine-König u.kleine-koenig at pengutronix.de
Vasanthakumar Thiagarajan vasanth at atheros.com
Vlad Yasevich vladislav.yasevich at hp.com
Wei Yongjun yjwei at cn.fujitsu.com
Wey-Yi Guy wey-yi.w.guy at intel.com
Wim Van Sebroeck wim at iguana.be
Wolfram Sang w.sang at pengutronix.de
Wu Fengguang fengguang.wu at intel.com
Wu Zhangjin wuzhangjin at gmail.com
Yinghai Lu yinghai at kernel.org
Zhao Yakui yakui.zhao at intel.com
Zhenyu Wang zhenyuw at linux.intel.com
Zhu Yi yi.zhu at intel.com


250人以上いるので2/3はここから落ちるのか。厳しいなぁ。
日本人っぽいのは以下の9人?

FUJITA Tomonori (ntt)
Hidetoshi Seto (fujitsu)
KAMEZAWA Hiroyuki (fujitsu)
Kenji Kaneshige (fujitsu)
KOSAKI Motohiro (fujitsu)
Kuninori Morimoto(renesas)
Masami Hiramatsu (hitachi)
Ryusuke Konishi (ntt)
Takashi Iwai (suse)


Miracleとか VA Linuxとか NECが一人もいない気がするけどあってるのだろうか。


関連記事
linux | 【2010-07-29(Thu) 12:56:38】 | Trackback:(0) | Comments:(0)

今年のMM Summit 参加者リスト このエントリーをはてなブックマークに追加

なんか聞かれたので晒してみる。Nickの参加者向け連絡メールから取ってきただけだから
漏れがある可能性は否定しない。


Ying Han <yinghan@google.com>
Greg Thelen <gthelen@google.com>
Larry Woodman <lwoodman@redhat.com>
Michel Lespinasse <walken@google.com>
Pekka Enberg <penberg@cs.helsinki.fi>
Christoph Lameter <cl@linux-foundation.org>
Matt Mackall <mpm@selenic.com>
Mel Gorman <mel@csn.ul.ie>
Peter Zijlstra <peterz@infradead.org>
Johannes Weiner <hannes@cmpxchg.org>
Wu Fengguang <fengguang.wu@intel.com>
Dan Magenheimer <dan.magenheimer@oracle.com>
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Hugh Dickins <hughd@google.com>
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Andrea Arcangeli <aarcange@redhat.com>
Rik van Riel <riel@redhat.com>
Nick Piggin <npiggin@suse.de>
Lee Schermerhorn <Lee.Schermerhorn@hp.com>


関連記事
linux | 【2010-07-28(Wed) 08:57:54】 | Trackback:(0) | Comments:(0)

KVM guestのシリアル出力をhostから見る方法 このエントリーをはてなブックマークに追加

諸般の事情でゲストがfedoraの場合とUbuntuの場合の両方を調べたので備忘録代わりに書く


まず、fedora12

/boot/grub/grub.conf


default=0
timeout=10
#splashimage=(hd0,0)/boot/grub/splash.xpm.gz
serial --unit=0 --speed=115200
terminal --timeout=10 serial console
#hiddenmenu
default saved


title Fedora (2.6.32.16-141.fc12.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32.16-141.fc12.x86_64 ro root=UUID=c70ceb36-eeea-48ee-9cd9-71d5a983ab40 LANG=ja_JP.UTF-8 KEYBOARDTYPE=pc KEYTABLE=jp106 norhgb noquiet console=tty0 console=ttyS0,115200
initrd /boot/initramfs-2.6.32.16-141.fc12.x86_64.img



と、grub.confにシリアルの設定書くだけ。ヘタにパリティとかストップビットとか記述すると動かんっぽいので何も書かないのが吉。
普段つかっているUSBシリアルの設定をカット&ペーストしてはまった。


つぎ、Ubuntu 10.04

/etc/default/grub


# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=10

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="noquiet nosplash console=tty0 console=ttyS0,115200"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0"

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"





# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 115200 ttyS0 vt102




あとはホストで、

# virsh start --console

と、--consoleオプションつけて、ゲストを起動するだけ




関連記事
linux | 【2010-07-26(Mon) 00:35:04】 | Trackback:(0) | Comments:(0)

st_btime このエントリーをはてなブックマークに追加

なんで st_btime ごときでそんなに揉める余地があるんだ。と思ってスレッド読んでみた

犯人は二人いるっぽい。

一人は、どうせctimeなんか誰もつかってないんだからctimeをcreation timeに変えちゃえば
とか暴言吐いているLinus

もうひとりは、よせばいいのにWindows creation timeの邪悪な仕様(e.g. 生成時刻の
はずなのにアプリケーションから変更できる、ファイルシステムトンネリングで謎の時刻継承がおきる)
とかを切々と説明してSambaのために同じ仕様にしようと主張し、逆にみんなをドン引きさせている
Andrew Tridgell (samba projectの人で、git開発の遠因をつくったお方)

File System Tunneling → http://support.microsoft.com/kb/172190


いや、もう面倒だからBSD互換仕様だけさっさと入れようよ。

関連記事
linux | 【2010-07-25(Sun) 18:21:11】 | Trackback:(0) | Comments:(0)

RSS整理雑感 このエントリーをはてなブックマークに追加

時間の無駄が気になってきたのでRSS整理してたんだけど、blog書くのやめちゃった人おおいなー
やっぱり、一時期だけのブームだったんだろうか


関連記事
雑談 | 【2010-07-18(Sun) 01:49:08】 | Trackback:(0) | Comments:(3)

Frederic が野心的な行数削除パッチをなげてる このエントリーをはてなブックマークに追加

とりあえず、sysprof tracerとksym tracer 消えた。あぼーん

関連記事
linux | 【2010-07-16(Fri) 10:21:17】 | Trackback:(0) | Comments:(0)

XFSはddするだけでCPUを100%使うでござる。の巻 このエントリーをはてなブックマークに追加

https://bugzilla.kernel.org/show_bug.cgi?id=16348

なんか、XFS死ねって感じのバグリポートがあがってきてるな。ディスクが大きくなってAGが増えると
kswapdの所要CPU時間がどんどん増えていってCPUを食い尽くすらしい

なにがいいたいかというとXFSは全然知らないのでオレにバグをアサインしようとするんじゃねーよって事です


関連記事
linux | 【2010-07-14(Wed) 11:21:30】 | Trackback:(0) | Comments:(0)

rubyのtimerスレッドが邪悪すぎて生きるのがつらい このエントリーをはてなブックマークに追加

なんかstraceデバッグの天敵なんですけどぉ・・・

関連記事
ruby | 【2010-07-12(Mon) 02:02:40】 | Trackback:(0) | Comments:(0)

これは「英語」のページです。翻訳しますか? このエントリーをはてなブックマークに追加

Chromeでうちのblogをみると、表題のように英語だから翻訳するぜとかメッセージ出てきてうざいんだけど、あれってどうやって判定してるんだ?
どうもても日本語だと思うのだが

関連記事
雑談 | 【2010-07-10(Sat) 18:21:44】 | Trackback:(0) | Comments:(5)

Dropboxが容量フルになってしまった このエントリーをはてなブックマークに追加

うーん、困ったなー
誰か私の紹介で新アカウント作ってみる人いません?

https://www.dropbox.com/referrals/NTM5MDg4Njk


関連記事
雑談 | 【2010-07-09(Fri) 15:37:57】 | Trackback:(0) | Comments:(6)

マルチスレッドでpipeをselectで中にcloseした場合について このエントリーをはてなブックマークに追加

http://www.a-k-r.org/d/2007-12.html#a2007_12_31_1

たしか、この話は議論をしてLinusが仕様だと言い張って終わった気がする。
マルチスレッドなのに排他を忘れるアプリが悪いとかいって


まあ、例によってちゃんとしたユースケースがあればひっくり返せると思う。



追記:なんか理由を思い出した気がする。close()するときにスレッド間の排他がされてないってことは

select()するスレッドの知らないところでcloseされて、さらにopenされてfdが再利用されてしまい、
全然違うソケットを監視してしまう可能性があるってことだろ。
そんなナンセンスなアプリあるわけないし、あったっとしてもアプリを直すべきだ。
とにかく(すーはー)、マルチスレッドが排他の考慮を忘れたおばかさんのケアをするのは
カーネルの仕事じゃねーぜ

とかそんな論旨だったと思う





関連記事
linux | 【2010-07-08(Thu) 00:33:18】 | Trackback:(0) | Comments:(0)

続: selectでpeerがclose済みの時のpollの挙動って一貫してないなぁ このエントリーをはてなブックマークに追加


とりあえず、以下のパッチで直るのは確認できた


diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 49d0d2b..510728f 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -438,21 +438,20 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
if (tp->rcv_nxt - tp->copied_seq >= target)
mask |= POLLIN | POLLRDNORM;

- if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
- if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk)) {
+ if ((sk->sk_shutdown & SEND_SHUTDOWN) ||
+ (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk)))
+ mask |= POLLOUT | POLLWRNORM;
+ else { /* send SIGIO later */
+ set_bit(SOCK_ASYNC_NOSPACE,
+ &sk->sk_socket->flags);
+ set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
+
+ /* Race breaker. If space is freed after
+ * wspace test but before the flags are set,
+ * IO signal will be lost.
+ */
+ if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk))
mask |= POLLOUT | POLLWRNORM;
- } else { /* send SIGIO later */
- set_bit(SOCK_ASYNC_NOSPACE,
- &sk->sk_socket->flags);
- set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
-
- /* Race breaker. If space is freed after
- * wspace test but before the flags are set,
- * IO signal will be lost.
- */
- if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk))
- mask |= POLLOUT | POLLWRNORM;
- }
}


関連記事
linux | 【2010-07-07(Wed) 10:22:41】 | Trackback:(0) | Comments:(0)

selectでpeerがclose済みの時のpollの挙動って一貫してないなぁ・・・ このエントリーをはてなブックマークに追加

背景
==

akrさんが、Linuxのselectの挙動がバグではないかと問題提起している。
http://www.a-k-r.org/d/2010-07.html#a2010_07_06_1

SUSの規定をみてみる。
http://www.opengroup.org/onlinepubs/009695399/functions/poll.html

If the writefds argument is not a null pointer, it points to an object of type fd_set that on input specifies the file descriptors to be checked for being ready to write, and on output indicates which file
descriptors are ready to write.

A descriptor shall be considered ready for writing when a call to an output function with O_NONBLOCK clear would not block, whether or not the function would transfer data successfully.



うむ。akrさんが正しそうである。

つぎにLinuxの実装を見てみる

まず、fs/select.c

#define POLLIN_SET (POLLRDNORM | POLLRDBAND | POLLIN | POLLHUP | POLLERR)
#define POLLOUT_SET (POLLWRBAND | POLLWRNORM | POLLOUT | POLLERR)
#define POLLEX_SET (POLLPRI)


writable bitがONになる条件は POLLWRBAND、POLLWRNORM、POLLOUT、POLLERRの4つ

つぎにpipeを見てみる fs/pipe.c
/* No kernel lock held - fine */
static unsigned int
pipe_poll(struct file *filp, poll_table *wait)
{
unsigned int mask;
struct inode *inode = filp->f_path.dentry->d_inode;
struct pipe_inode_info *pipe = inode->i_pipe;
int nrbufs;

poll_wait(filp, &pipe->wait, wait);

/* Reading only -- no need for acquiring the semaphore. */
nrbufs = pipe->nrbufs;
mask = 0;
if (filp->f_mode & FMODE_READ) {
mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
if (!pipe->writers && filp->f_version != pipe->w_counter)
mask |= POLLHUP;
}

if (filp->f_mode & FMODE_WRITE) {
mask |= (nrbufs < pipe->buffers) ? POLLOUT | POLLWRNORM : 0;
/*
* Most Unices do not set POLLERR for FIFOs but on Linux they
* behave exactly like pipes for poll().
*/
if (!pipe->readers)
mask |= POLLERR;
}

return mask;
}


バッファが空いていたらpeerの状態によらず POLLOUT、POLLWRNORM が立つ。まあこれはFIFOを考えると
必要か。なぜreaderがいないときにPOLLERRを立てるのか全然理解できぬ。POLLERRってreadable bitも
立ってしまうやんか。


つぎ、Unix Domain Socket。net/unix/af_unix.c


static unsigned int unix_poll(struct file *file, struct socket *sock, poll_table *wait)
{
struct sock *sk = sock->sk;
unsigned int mask;

sock_poll_wait(file, sk_sleep(sk), wait);
mask = 0;

/* exceptional events? */
if (sk->sk_err)
mask |= POLLERR;
if (sk->sk_shutdown == SHUTDOWN_MASK)
mask |= POLLHUP;
if (sk->sk_shutdown & RCV_SHUTDOWN)
mask |= POLLRDHUP;

/* readable? */
if (!skb_queue_empty(&sk->sk_receive_queue) ||
(sk->sk_shutdown & RCV_SHUTDOWN))
mask |= POLLIN | POLLRDNORM;

/* Connection-based need to check for termination and startup */
if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) &&
sk->sk_state == TCP_CLOSE)
mask |= POLLHUP;

/*
* we set writable also when the other side has shut down the
* connection. This prevents stuck sockets.
*/
if (unix_writable(sk))
mask |= POLLOUT | POLLWRNORM | POLLWRBAND;

return mask;
}

static inline int unix_writable(struct sock *sk)
{
return (atomic_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf;
}


POLLERRが立つのはソケットエラーが起きたときだけ、peerが閉じたら(SHUTDOWN_MASKなら)POLLHUPが立つ、
peerの状態によらずバッファが空いていれば POLLOUT、POLLWRNORM、POLLWRBAND の3つが立つ。
POLLWBANDを立てる理由はよく分からない。

推測するとPOLLWBANDの規定が以下なので、socketがSTREAMS上に実装されていたOSにおいて
Unix Domain Socketを使うとPOLLWBANDが立つようなので、マネしてみたとかそういう
ノリじゃなかろうか。
http://www.opengroup.org/onlinepubs/009695399/functions/poll.html


POLLWRBAND
Priority data may be written.

[XSR] [Option Start] For STREAMS, data on priority bands greater than 0 may be written without blocking. If any priority band has been written to on this STREAM, this event only examines bands that have been written to at least once. [Option End]




最後に問題のTCPのpoll。net/ipv4/tcp.c


/*
* Wait for a TCP event.
*
* Note that we don't need to lock the socket, as the upper poll layers
* take care of normal races (between the test and the event) and we don't
* go look at any of the socket buffers directly.
*/
unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
{
unsigned int mask;
struct sock *sk = sock->sk;
struct tcp_sock *tp = tcp_sk(sk);

sock_poll_wait(file, sk_sleep(sk), wait);
if (sk->sk_state == TCP_LISTEN)
return inet_csk_listen_poll(sk);

/* Socket is not locked. We are protected from async events
* by poll logic and correct handling of state changes
* made by other threads is impossible in any case.
*/

mask = 0;
if (sk->sk_err)
mask = POLLERR;

/*
* POLLHUP is certainly not done right. But poll() doesn't
* have a notion of HUP in just one direction, and for a
* socket the read side is more interesting.
*
* Some poll() documentation says that POLLHUP is incompatible
* with the POLLOUT/POLLWR flags, so somebody should check this
* all. But careful, it tends to be safer to return too many
* bits than too few, and you can easily break real applications
* if you don't tell them that something has hung up!
*
* Check-me.
*
* Check number 1. POLLHUP is _UNMASKABLE_ event (see UNIX98 and
* our fs/select.c). It means that after we received EOF,
* poll always returns immediately, making impossible poll() on write()
* in state CLOSE_WAIT. One solution is evident --- to set POLLHUP
* if and only if shutdown has been made in both directions.
* Actually, it is interesting to look how Solaris and DUX
* solve this dilemma. I would prefer, if POLLHUP were maskable,
* then we could set it on SND_SHUTDOWN. BTW examples given
* in Stevens' books assume exactly this behaviour, it explains
* why POLLHUP is incompatible with POLLOUT. --ANK
*
* NOTE. Check for TCP_CLOSE is added. The goal is to prevent
* blocking on fresh not-connected or disconnected socket. --ANK
*/
if (sk->sk_shutdown == SHUTDOWN_MASK || sk->sk_state == TCP_CLOSE)
mask |= POLLHUP;
if (sk->sk_shutdown & RCV_SHUTDOWN)
mask |= POLLIN | POLLRDNORM | POLLRDHUP;

/* Connected? */
if ((1 << sk->sk_state) & ~(TCPF_SYN_SENT | TCPF_SYN_RECV)) {
int target = sock_rcvlowat(sk, 0, INT_MAX);

if (tp->urg_seq == tp->copied_seq &&
!sock_flag(sk, SOCK_URGINLINE) &&
tp->urg_data)
target++;

/* Potential race condition. If read of tp below will
* escape above sk->sk_state, we can be illegally awaken
* in SYN_* states. */
if (tp->rcv_nxt - tp->copied_seq >= target)
mask |= POLLIN | POLLRDNORM;

if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk)) {
mask |= POLLOUT | POLLWRNORM;
} else { /* send SIGIO later */
set_bit(SOCK_ASYNC_NOSPACE,
&sk->sk_socket->flags);
set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);

/* Race breaker. If space is freed after
* wspace test but before the flags are set,
* IO signal will be lost.
*/
if (sk_stream_wspace(sk) >= sk_stream_min_wspace(sk))
mask |= POLLOUT | POLLWRNORM;
}
}

if (tp->urg_data & TCP_URG_VALID)
mask |= POLLPRI;
}
return mask;
}


POLLERRのあつかいはUnix Domain Socketと同じ。相手が閉じたぐらいではERRにしない。
peerが閉じちゃったときは(sk->sk_shutdown & SEND_SHUTDOWN の時)はあらゆるbitが立たない。つまりブロックする!
Unix Domain Socketと異なりPOLLWRBAND は使わない。


まあ、tcp_poll()を直すべきな気がするですよ。
もっというと、Unix Domain Socketもバッファサイズをチェックしている時点で
EPIPEになる状況はwritableになるべきというakrさんの主張はみたされていないので、
これも一緒に直すべき。

うーん。ほんとかな。ちょっと自信がない



関連記事
linux | 【2010-07-07(Wed) 08:59:17】 | Trackback:(0) | Comments:(0)

topコマンドのSWAPフィールドの表示を直してみた このエントリーをはてなブックマークに追加

しばらく前に、top(1)のSWAPフィールドは何を表示しているか というエントリでSWAPフィールドが盛大に壊れているという話をしたのだが、せっかくなのでv2.6.34でMM_CONTERSがスワップ対応したのを利用して直してみた。

パッチは以下

http://github.com/kosaki/procps/commit/8a3d0d4e117efeec869d3d450f749a61cb8b0237




関連記事
linux | 【2010-07-04(Sun) 03:16:55】 | Trackback:(0) | Comments:(0)

セキュリティ&プログラミングキャンプ2010、募集〆切迫る! このエントリーをはてなブックマークに追加

スラド記事でも取り上げられたセキュリティ&プログラミングキャンプ2010ですが、そろそろ〆切らしいですよー

業界第一人者クラスの技術者が何十人も集結するイベントはあんまりないので、ちょっと倍率は高いかも知れないけどハックが好きな学生さんは、ぜひ応募してください。

http://www.ipa.go.jp/jinzai/renkei/spcamp2010/index.html


経緯はよくわからないけどtwitter上で、準公式ハッシュタグ #spcamp が出現している模様。応募関係で疑問・質問があればここにつぶやくと答えてもらえるかも


PS なお、〆切が「2010年7月5日(月)17:00必着」と定義されているので今から応募するなら郵送よりも電子メール送付が安全かと思われます

PS2 このイベントの欠点は講師は受講できないことだよな。色々聞きたいのに



関連記事
雑談 | 【2010-07-03(Sat) 11:32:09】 | Trackback:(0) | Comments:(0)
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。