SMP

CONFIG_RFS_ACCELはsfc(SolarflareのNIC)専用だという話

CONFIG_RFS_ACCELは一言でいうとRFSをMultiqueue NIC上で実現する機能で、もう少し説明すると、あるパケットが届いたら宛先プロセスの所属するCPUに対して割り込めるようNICにヒントを出す、というものなのだが、どれくらいの範囲のNICに対応しているのかと…

/proc/irq//smp_affinityの書き換えでPCIコンフィグレーション空間はどのように書き換わるか

※追記:実際にはカーネルにprintkを突っ込みまくるという、ずっと泥臭い方法で調査をしてました。多分役にたたないと思うけど、一応その時のdiffも併せて公開しておきます。Linux 3.2.0+用なので、他のバージョンだと当たらないかもしれません。 Debug print…

Kernel/VM Advent Calendar 25日目 最近のPCアーキテクチャにおける割り込みルーティングの仕組み

※追記:MSIはPCI 3.0からじゃなくてPCI 2.3からだとの指摘を受けて書き換え。※追記:hisakさんから詳しくコメントが入っているので、併せて読んで下さい。 とてつもなく遅れたKernel/VM Advent Calendarの25日目の記事です。 Linuxにおける/proc/irq//smp_af…

RPSの挙動、キュー周りをもう一度確認

NICのドライバはパケットを受信してnetif_receive_skbかnapi_gro_receiveを呼ぶ。napi_gro_receiveの場合はGRO処理をパケットに施した後に結合済みパケットをnetif_receive_skbを呼ぶ。netif_receive_skbでenqueue_to_backlogをコール。 ret = enqueue_to_ba…

Linuxのポーリング処理のコードを読んでみよう 〜ポーリング編〜

Linuxのポーリング処理のコードを読んでみよう 〜割り込み編〜 - かーねる・う゛いえむにっきの続き。まず、前回最後にスケジュールしたNET_RX_SOFTIRQってソフトウェア割り込みがどこで登録されてて、どれがハンドラかって所から見てみる。net_dev_init()っ…

Linuxのポーリング処理のコードを読んでみよう 〜割り込み編〜

Linuxのポーリング処理のコードを読んでみよう 〜初期化編〜 - かーねる・う゛いえむにっきの続き。まず、割り込みがかかるとe1000_intrが呼ばれる。 3370 static irqreturn_t e1000_intr(int irq, void *data) 3371 { 3372 struct net_device *netdev = dat…

Linuxのポーリング処理のコードを読んでみよう 〜初期化編〜

みんなの大好きなe1000のドライバから、ポーリング処理を追ってみようと思う。 カーネルのバージョンは、fxr.watson.orgに現時点で上がっている2.6.36-rc2。 但し、何故かnet/core/dev.cのページが破損してるので、その部分は配布ソースコードから。 252 mod…

じゃあ、Linuxのネットワークスタックはどうなのん?

この記事の続きになる訳だが、いくらSolaris最強って言っても、大手メーカーがこぞってつつき回して性能改善したり機能追加したりしてるはずのLinuxで何も対策が打たれてない訳が無いよね。じゃあどうなってるんだろう、って話。例によって、Linuxとか全ッ然…

SolarisのネットワークスタックってSMPに強いのん?

「SolarisのネットワークスタックはSMPに強い」という噂を聞いていたので、取り敢えずどんな感じなのか資料を斜め読みしてみた。 Solarisとか全ッ然知らないので、間違ってたらツッコミ下さい。資料: Oracle and Sun Microsystems | Strategic Acquisitions…

cpu1にIPIがかからないずら。

現状: cpu1でクロック割り込みはかかる cpu0→cpu0のIPIはかかる cpu1→cpu0のIPIはかかる cpu1→cpu1のIPIはかからない cpu0→cpu1のIPIはかからない 何となく、割り込みコントローラへの設定などなどがしくってるような気がするけど、IMR0の値もステータスレ…

IPI

Linuxを参考に、IPIのIRQをヘッダに足してみる。 Index: hub.h =================================================================== RCS file: /cvs/src/sys/arch/sgi/xbow/hub.h,v retrieving revision 1.7 diff -u -p -r1.7 hub.h --- hub.h 8 Nov 2009…

割り込みコントローラへのSMP対応コード

全く動作確認取ってないしコンパイルすら通してないけど、俺のゴーストはこれで大丈夫とささやいてるから多分大体あってるはず。 アクセスするレジスタ類はLinuxのip27のコードに合わせて、interm,imaskの配列化は以前ip30向けに実装したコードを参照。 Inde…

Exceptionはハンドル出来てるぽ

hw_cpu_hatch()で割り込み有効にしてbreakかけてddbが上がるかどうか確かめればExceptionをハンドルしてtrap出来てるか分かるという単純極まりない事実に気づいて早速試してみる。 /* * Build proper TLB refill handler trampolines. */ extern void xtlb_m…

Origin 350のセカンダリプロセッサ起動パッチを投げた

この間の起動テストコードに、CPU初期化時にセカンダリプロセッサを探してnasid, physidをstruct cpu_hwinfo secondarycpu_hwinfo[MAXCPUS]に保存し、後でこれを見に行って順に起こすというコードを足した。 でもbootcpu_hwinfoとsecondarycpu_hwinfo[]が分…

少々手直ししてコミット

久しぶりにコードをコミットした。リハビリ中な気分。 +#ifdef MULTIPROCESSOR +LEAF(getcurcpu, 0) + GET_CPU_INFO(v0, v1) + jr ra +END(getcurcpu) nopで埋め忘れてる。 +#ifdef MULTIPROCESSOR +LEAF(getcurcpu, 0) + GET_CPU_INFO(v0, v1) + jr ra + no…

curcpu()の仕様を変えたい in OpenBSD/sgi

OpenBSDでカレントプロセッサのcpu_info(※per-CPUなデータを保存する構造体)のポインタを取得するにはcurcpu()というマクロを呼ぶのだが、現状のOpenBSD/sgiではこんな風になっている: #define curcpu() cpu_info[cpu_number()] で、cpu_number()はハード…

Origin 350でのセカンダリプロセッサ起動テスト/Secondary processor launch test on Origin 350

前にも書いた通り、cpu0,cpu1,cpu2の3つを認識させ、cpu1を無効なまま放置してcpu2を起動するのがファーストステップである。As I mentioned before, detect cpu0, cpu1, cpu2 and leave cpu1 disabled and launch cpu2 is the first step. Index: sgi/sgi/…

Origin 350 SMP化作業の見立て

取り敢えず、最小限の作業で手元の2コア1ノード構成が動くまでにやらねばならぬ事。・スレーブCPUの起動、LAUNCHで。 ・Exceptionテーブルコピー、uvmでの使用禁止などプライベートエリアの手当て ・取り敢えずcpu0,cpu2がオンラインでcpu1がオフラインに見…

LAUNCH on SGI Origin 350

プロセッサの検出はKLCONFIGで出来る事が分かったが、起動はどうしているのだろうか。 Linuxでは、arch/mips/sgi-ip27/ip27-smp.cにこんな事が書いてある: static void __cpuinit ip27_boot_secondary(int cpu, struct task_struct *idle) { unsigned long …

KLCONFIG on SGI Origin 350

Linuxのソースコードを読んでいくと、どうもCPU構成の情報はKLCONFIGという所から読み込んでやればいいらしい事が分かる。arch/mips/sgi-ip27/ip27-smp.cというファイルを覗くとこんな関数がある: static int do_cpumask(cnodeid_t cnode, nasid_t nasid, i…

SGI Origin 350でSMP

まだ分かってない事も多いのだが、追々調べる。 Originのコンセプト これは、ディスプレイコネクタもなく2Uである事からも分かるように、デスクサイドに置くようなタイプのマシンでなくラックに詰め込んで何らかの処理(レンダリングファーム用?それともHP…

AsiaBSDCon 2010で"SMP implementation for OpenBSD/sgi"と題して発表してきました

動画:http://www.ustream.tv/recorded/5403563 スライド:http://www.slideshare.net/syuu1228/smp-implementation-for-openbsdsgi 論文:http://www.openbsd.org/papers/asiabsdcon2010_smp_for_sgi.pdf ペース配分がイマイチだったという指摘はあったもの…

AsiaBSDCon 2010でお話します

大事な事なので何度も言うよ! AsiaBSDConでお話する事になりました。 私の発表は2010/3/13 15:30〜です。 AsiaBSDCon 2010 - 会議日程題名は、SMP Implementation for OpenBSD/sgiです。 まぁ、今までのOpenBSD workのまとめですね。 登録費がかなり高く、…

OpenBSD/sgiはcurrentのソースコードでSMP動作が可能になりました

cd /usr; cvs checkout -P src でGENERIC-IP30に option MULTIPROCESSORを書き加えてカーネルをビルドすればSMPで起動します。まだ足りない機能があり動作も不安定ですが、とりあえずブートくらいは可能です。

but…

interrupt 100%ってなにそれこわい load averages: 0.15, 1.88, 2.69 20:43:19 20 processes: 19 idle, 1 on processor CPU0 states: 0.0% user, 0.0% nice, 0.0% system, 100% interrupt, 0.0% idle CPU1 states: 0.0% user, 0.0% nice, 0.0% system, 100% …

OpenBSD/sgi SMP動きました!

きゃほーい( ´∀`) load averages: 5.27, 2.97, 1.43 20:26:08 34 processes: 4 running, 28 idle, 2 on processor CPU0 states: 87.5% user, 0.0% nice, 0.0% system, 12.5% interrupt, 0.0% idle CPU1 states: 87.9% user, 0.0% nice, 0.0% system, 12.1…

login未遂事件

残念です(´・ω・`)… >> bootp(): Setting $netaddr to 192.168.3.2 (from server ) Obtaining from server 5175104+561280 entry: 0xa800000020020000 ARCS64 Firmware Version 64.0 Found SGI-IP30, setting up. Initial setup done, switching console. Co…

OpenBSDへパッチをコミット

出来たよ(`・ω・´) http://www.openbsd.org/cgi-bin/cvsweb/src/sys/arch/mips64/include/ちゃんと僕の名前がCVSに乗りました。

OpenBSD/sgi on octane2 - ipi割り込み その3

void mips64_ipi_init(void) { unsigned cpu = cpu_number(); int ret; ret = xheart_intr_establish(mips64_ipi_intr, NULL, HEART_INTR_IPI(cpu), IPL_HIGH, "ipi"); if (ret) panic("xheart_intr_establish failed:%d\n", ret); } 間違えて引数に割り込み…

OpenBSD/sgi on octane2 - ipi割り込み

取り合えず実装してみたんだが、動いていない模様。 うーん。xheartのデータシートが欲しいよう。HEART_INTR_IPI(x)はHEART_INTR_MAXよりデカいけど正しいのか分からない。 HEART_IMR(0)はHEART_IMR(cpu_number())に書き直した。 Index: xbow/xheartreg.h ==…