October 2008

について、DaveがBlogってる

http://vger.kernel.org/~davem/cgi-bin/blog.cgi/2008/10/30

ここでのっているSUNのRockについての資料が大変おもしろい

http://www.opensparc.net/pubs/preszo/08/RockHotChips.pdf

前半は要するにIA64がソフトでやってることをハードアシストいれることによって、SPARCでもサポートするぜーってことのようだ。

後半はTransactional Memoryのはなし、spinlockの代わりに使えるようなことが書いてあるが、それは大げさな説明で(JAROには訴えないのでご安心ください)、L1しかTransaction bitがないので、L1に乗る範囲しかロック区間に入れられない(と思う)ので、用途はかなり限定される。

ついでにいうと、Linuxのカーネル内はプレゼンでいうところのmemory orderを駆使したcomplexな手法を使いまくっているのでLinuxで速度向上はあんまり期待できないと予想。
んー、Solarisみたいな前時代的なOSでは有効なんかいね?



その下の「sparc64 memory barriers」はもっとおもしろくて、「Linuxは速度向上のためがんばってRMOをサポートしてきたけど、UltraSPARC-I, UltraSPARC-II はチップバグがあり、UltraSPARC-IIIはTSO以外サポートしてない。やってらんねーからRMOサポートはもうしねー」とか

大丈夫だDave、Linux SPARCなんて使ってるのは君と富士通だけだから


※ (11/2) JAROをJALとtypoしていたのを直した。なんで間違えたんだろ?

Norton 2008の期限が切れたので購入。
なんでダウンロード版のほうが高いんだよ。

喧伝されているCPU使用率の低下は実感できない

二日つづけて会社を休んでしまった。たまっているメールの量を考えると憂鬱。
いっそのこと明日も休んでこのまま連休に突入しようか。などという考えも頭をよぎるが、至急のメールがあるといけないので行くしかないんだろうな

会社のひとにproxy経由でgitを使う方法を教えてもらったのでメモ。
ぎっとぎっとにしてやんよ!


1. corkscrewをインストールする
http://www.agroman.net/corkscrew/

2. git-proxy.shを作成してパスの通っているところに置く

# cat /usr/local/bin/git-proxy.sh


#!/bin/bash

CORKSCREW=`which corkscrew`
$CORKSCREW proxy.hogehoge.com 8080 $1 $2



3. あとはgitコマンドを使うときには以下のように必ず
GIT_PROXY_COMMAND=git-proxy.sh をつける

GIT_PROXY_COMMAND=git-proxy.sh git clone git://repos

参考リンク
http://d.hatena.ne.jp/rx7/20080703/p1


原稿が規定文字数にとどかなくて、ひーひー言ってたはずなのに今数え直したら規定量の二倍ある。しかも全部時事ネタだから来月に繰り越すことも出来そうにない。アルェー

2.6.28のマージウィンドでマージされた主要機能群のリストにhugepage coredumpとsplit-lruの両方が入っているのを発見。
これはうれしいかもしれん。

ありがとうJonathan Corbet。

んだそーな。
suspend/resumeで必要だから、全員ONにする。だからコンパイルオプションになっていても全然うれしくない。だそうだ。



Date: Wed, 22 Oct 2008 15:30:54 -0700
From: Arjan van de Ven <arjan@infradead.org>
To: linux-kernel@vger.kernel.org
Cc: torvalds@linux-foundation.org
Subject: [PATCH] get rid if __cpuinit and __cpuexit


>From b62f70d43d3e9a9a70775b40cb4ecba058f07a01 Mon Sep 17 00:00:00 2001
From: Arjan van de Ven
Date: Wed, 22 Oct 2008 15:29:00 -0700
Subject: [PATCH] get rid if __cpuinit and __cpuexit

as discussed briefly at the kernel summit; __cpuinit and __cpuexit are
causing a ton more complexity than they're worth (just see how many
section warnings an average build has); and the *vast* majority
of people using linux have CPU hotplug enabled anyway (since it's required
for suspend/resume). The code size saved is also very minimal, since although
many files are touched, very few are actually present in a kernel image at a time.

For now, __cpuinit and __cpuexit are left behind as empty skelletons to not break
in-flight stuff using it, it should be removed in a release or two entirely.

Signed-off-by Arjan van de Ven
---
Documentation/cpu-hotplug.txt | 4 +-
arch/alpha/kernel/smp.c | 4 +-
arch/arm/common/gic.c | 2 +-
arch/arm/kernel/smp.c | 12 ++--
arch/arm/mach-realview/localtimer.c | 8 ++--
arch/arm/mach-realview/platsmp.c | 6 +-
arch/cris/arch-v32/kernel/smp.c | 2 +-
arch/frv/kernel/setup.c | 2 +-
arch/ia64/kernel/err_inject.c | 8 ++--
arch/ia64/kernel/mca.c | 12 ++--
arch/ia64/kernel/numa.c | 4 +-
arch/ia64/kernel/palinfo.c | 4 +-
arch/ia64/kernel/salinfo.c | 4 +-
arch/ia64/kernel/setup.c | 10 ++--
arch/ia64/kernel/smpboot.c | 12 ++--
arch/ia64/kernel/topology.c | 18 ++++----
arch/ia64/mm/contig.c | 2 +-
arch/ia64/mm/discontig.c | 2 +-
arch/ia64/sn/kernel/setup.c | 4 +-
arch/m32r/kernel/smpboot.c | 2 +-
arch/mips/kernel/cevt-bcm1480.c | 2 +-
arch/mips/kernel/cevt-r4k.c | 2 +-
arch/mips/kernel/cevt-sb1250.c | 2 +-
arch/mips/kernel/cevt-smtc.c | 2 +-
arch/mips/kernel/cpu-bugs64.c | 4 +-
arch/mips/kernel/cpu-probe.c | 10 ++--
arch/mips/kernel/smp-mt.c | 6 +-
arch/mips/kernel/smp-up.c | 6 +-
arch/mips/kernel/smp.c | 6 +-
arch/mips/kernel/smtc.c | 2 +-
arch/mips/kernel/spram.c | 14 +++---
arch/mips/kernel/time.c | 2 +-
arch/mips/kernel/traps.c | 8 ++--
arch/mips/kernel/watch.c | 2 +-
arch/mips/lib/uncached.c | 2 +-
arch/mips/mipssim/sim_smtc.c | 6 +-
arch/mips/mipssim/sim_time.c | 2 +-
arch/mips/mm/c-r3k.c | 8 ++--
arch/mips/mm/c-r4k.c | 34 +++++++-------
arch/mips/mm/c-tx39.c | 2 +-
arch/mips/mm/page.c | 40 ++++++++--------
arch/mips/mm/sc-ip22.c | 2 +-
arch/mips/mm/sc-mips.c | 2 +-
arch/mips/mm/sc-r5k.c | 2 +-
arch/mips/mm/sc-rm7k.c | 6 +-
arch/mips/mm/tlb-r3k.c | 2 +-
arch/mips/mm/tlb-r4k.c | 8 ++--
arch/mips/mm/tlb-r8k.c | 4 +-
arch/mips/mm/tlbex.c | 70 ++++++++++++++--------------
arch/mips/mm/uasm.c | 70 ++++++++++++++--------------
arch/mips/mm/uasm.h | 24 +++++-----
arch/mips/mti-malta/malta-smtc.c | 6 +-
arch/mips/mti-malta/malta-time.c | 2 +-
arch/mips/pci/pci-ip27.c | 2 +-
arch/mips/pmc-sierra/yosemite/smp.c | 12 ++--
arch/mips/sgi-ip27/ip27-init.c | 4 +-
arch/mips/sgi-ip27/ip27-smp.c | 6 +-
arch/mips/sgi-ip27/ip27-timer.c | 6 +-
arch/mips/sgi-ip27/ip27-xtalk.c | 6 +-
arch/mips/sibyte/bcm1480/smp.c | 8 ++--
arch/mips/sibyte/sb1250/smp.c | 8 ++--
arch/parisc/kernel/hardware.c | 2 +-
arch/parisc/kernel/processor.c | 2 +-
arch/parisc/kernel/smp.c | 4 +-
arch/powerpc/kernel/smp.c | 2 +-
arch/powerpc/kernel/sysfs.c | 12 ++--
arch/powerpc/mm/numa.c | 12 ++--
arch/s390/appldata/appldata_base.c | 8 ++--
arch/s390/kernel/entry.h | 2 +-
arch/s390/kernel/setup.c | 4 +-
arch/s390/kernel/smp.c | 10 ++--
arch/sh/kernel/smp.c | 4 +-
arch/sh/kernel/traps_32.c | 2 +-
arch/sparc/kernel/smp.c | 8 ++--
arch/sparc/kernel/sun4d_smp.c | 2 +-
arch/sparc/kernel/sun4m_smp.c | 4 +-
arch/sparc64/kernel/ds.c | 4 +-
arch/sparc64/kernel/entry.h | 2 +-
arch/sparc64/kernel/irq.c | 4 +-
arch/sparc64/kernel/mdesc.c | 2 +-
arch/sparc64/kernel/smp.c | 4 +-
arch/sparc64/kernel/sysfs.c | 4 +-
arch/sparc64/mm/init.c | 2 +-
arch/x86/kernel/acpi/boot.c | 4 +-
arch/x86/kernel/apic_32.c | 12 ++--
arch/x86/kernel/apic_64.c | 18 ++++----
arch/x86/kernel/cpu/addon_cpuid_features.c | 6 +-
arch/x86/kernel/cpu/amd.c | 22 ++++----
arch/x86/kernel/cpu/centaur.c | 26 +++++-----
arch/x86/kernel/cpu/centaur_64.c | 6 +-
arch/x86/kernel/cpu/common.c | 58 +++++++++++-----------
arch/x86/kernel/cpu/cpufreq/powernow-k8.c | 4 +-
arch/x86/kernel/cpu/cyrix.c | 40 ++++++++--------
arch/x86/kernel/cpu/intel.c | 22 ++++----
arch/x86/kernel/cpu/intel_cacheinfo.c | 44 +++++++++---------
arch/x86/kernel/cpu/mcheck/mce_64.c | 16 +++---
arch/x86/kernel/cpu/mcheck/mce_amd_64.c | 10 ++--
arch/x86/kernel/cpu/mcheck/mce_intel_64.c | 4 +-
arch/x86/kernel/cpu/mcheck/therm_throt.c | 8 ++--
arch/x86/kernel/cpu/transmeta.c | 6 +-
arch/x86/kernel/cpu/umc.c | 2 +-
arch/x86/kernel/cpuid.c | 4 +-
arch/x86/kernel/ds.c | 2 +-
arch/x86/kernel/genx2apic_uv_x.c | 4 +-
arch/x86/kernel/i387.c | 6 +-
arch/x86/kernel/irq_32.c | 2 +-
arch/x86/kernel/microcode_core.c | 2 +-
arch/x86/kernel/mmconf-fam10h_64.c | 14 +++---
arch/x86/kernel/msr.c | 4 +-
arch/x86/kernel/numaq_32.c | 4 +-
arch/x86/kernel/process.c | 8 ++--
arch/x86/kernel/ptrace.c | 2 +-
arch/x86/kernel/setup.c | 2 +-
arch/x86/kernel/setup_percpu.c | 16 +++---
arch/x86/kernel/smpboot.c | 28 ++++++------
arch/x86/kernel/smpcommon.c | 2 +-
arch/x86/kernel/tlb_64.c | 2 +-
arch/x86/kernel/tsc.c | 2 +-
arch/x86/kernel/tsc_sync.c | 18 ++++----
arch/x86/kernel/vsyscall_64.c | 6 +-
arch/x86/kernel/xsave.c | 2 +-
arch/x86/mach-voyager/voyager_smp.c | 4 +-
arch/x86/mm/init_64.c | 4 +-
arch/x86/mm/numa_64.c | 2 +-
arch/x86/mm/pat.c | 2 +-
arch/x86/pci/amd_bus.c | 4 +-
arch/x86/xen/setup.c | 6 +-
arch/x86/xen/smp.c | 8 ++--
arch/x86/xen/spinlock.c | 2 +-
arch/x86/xen/xen-ops.h | 2 +-
arch/xtensa/kernel/time.c | 2 +-
block/blk-softirq.c | 4 +-
drivers/acpi/ec.c | 2 +-
drivers/acpi/numa.c | 2 +-
drivers/acpi/processor_core.c | 4 +-
drivers/acpi/processor_idle.c | 4 +-
drivers/base/cpu.c | 4 +-
drivers/base/topology.c | 8 ++--
drivers/cpufreq/cpufreq.c | 2 +-
drivers/cpufreq/cpufreq_stats.c | 2 +-
drivers/hwmon/coretemp.c | 4 +-
drivers/infiniband/hw/ehca/ehca_irq.c | 6 +-
drivers/s390/sysinfo.c | 2 +-
include/asm-x86/ds.h | 2 +-
include/asm-x86/mmconfig.h | 4 +-
include/asm-x86/mpspec.h | 2 +-
include/asm-x86/numa_64.h | 8 ++--
include/asm-x86/ptrace.h | 2 +-
include/asm-x86/smp.h | 4 +-
include/linux/cpu.h | 2 +-
include/linux/init.h | 9 +--
init/calibrate.c | 6 +-
kernel/cpu.c | 6 +-
kernel/fork.c | 4 +-
kernel/hrtimer.c | 6 +-
kernel/rcuclassic.c | 6 +-
kernel/rcupreempt.c | 6 +-
kernel/relay.c | 2 +-
kernel/sched.c | 8 ++--
kernel/smp.c | 2 +-
kernel/softirq.c | 8 ++--
kernel/softlockup.c | 4 +-
kernel/timer.c | 10 ++--
lib/percpu_counter.c | 2 +-
mm/page-writeback.c | 4 +-
mm/page_alloc.c | 6 +-
mm/slab.c | 10 ++--
mm/slub.c | 4 +-
mm/vmstat.c | 6 +-
net/iucv/iucv.c | 2 +-
170 files changed, 642 insertions(+), 645 deletions(-)


めんどいので簡潔に


  • DTraceではself->variable構文をつかうと、per CPU variableを使うので var[hash] よりも速い事が保証されている。連想配列あるからいいじゃんとか言ってるSystemTapは空気読めてない子
  • DTraceではAggregation関数で集計すると自前で var += hoge とかやって集計するよりも速い事が保証されている。これは言語の使用目的を考えると必須だよな。とか思った
  • DTraceは収集時にAggregate関数の種類を選ぶが、SystemTapは表示時に選ぶ。DTrace方式のほうが無駄な収集が発生しないので賢い
  • Speculative Tracingってなんじゃらほい?と思ったら単に主バッファとは別のバッファがつかえるよ。
    というだけだった。でも構文は汚いと思う

    • バッファアロケートが関数なので、実行時にしか何個バッファが生成されるか分からない。
      どう考えても普通はせいぜい1つしか作らないので、柔軟性より速度を追求した方がよい
    • 書き出し先バッファ切り替えが関数なので汚い。どうせ1関数内で複数のバッファに書くことは
      言語使用上禁止されているのだから関数の修飾子とかにしたほうがよかった気がする

  • early boot tracingはかなりがんばっている。SCSI やFilesystemより先にロードされてるんだけど
     どうやってるんだ?
  • SolarisではELFを独自に拡張してDTrace用のSymbol Tableを別途持っている。かつこれはstripの
    対象外なので、stripされたバイナリからでもシンボルが引ける。これはユーザアプリのトレースで
    重要な性質。static関数もちゃんとテーブルに名前が残ってるし。SystemTapは行番号トレースと
    ローカル変数の参照をサポートしたぶんだけ、必要な情報量が爆発的に増えており、事実上
    DWARFを使うしか手がない。
    stripされたバイナリをトレースできるようにするのは、仕様変更がいるなぁ
      http://blogs.sun.com/ali/entry/what_is_sunw_ldynsym
      http://blogs.sun.com/ali/entry/inside_elf_symbol_tables
  • バッファポリシーとして

    • switch
    • fill
    • ring

    の3つをサポート。switchがデフォルト。
     残り2つはearly boot tracingと組み合わせて使う。
     fillがバッファがいっぱいになったらこれ以上記録しない。というバッファ。ブート時のログを
    とりたいときはバッファがいっぱいになったら自動的に止まって欲しいからね。
    ringは逆にバッファがいっぱいになったらバッファ先頭にもどって上書きしていく。
    んで、なんかおかしくなったときに、最後のほうのログを吸い出す。
    いわゆるフライトレコーダー目的
  • ユーザ空間のトレースはある関数の全instructionにprobeをしかける。とか出来るので、
    エラーが発生した箇所を細かく絞り込むことが(根気が許せば)可能
  • profile provideはトレース間隔に109とか4999とか変な数値がデフォルトになっているが、
     キリのいい数字にすると毎回クロック割り込みとぶつかっておかしな集計結果になるから。
    賢い


とりあえず、SystemTapも.SUNW_ldynsymをサポートして「でもstripされていたら行番号トレースはできないからね」という仕様にしたほうがLKMLでdisられなくなっていいんでは?とか思った

↑このページのトップヘ