EdgeRouter LiteでOpenBSD/OCTEONカーネルロードしてみる

Looking for valid bootloader image....                                          
Jumping to start of image at address 0xbfc80000                                 
                                                                                
                                                                                
U-Boot 1.1.1 (UBNT Build ID: 4493936-g009d77b) (Build time: Sep 20 2012 - 15:48)
                                                                                
BIST check passed.                                                              
UBNT_E100 r1:2, r2:12, serial #: DC9FDB2920A7                                   
Core clock: 500 MHz, DDR clock: 266 MHz (532 Mhz data rate)                     
DRAM:  512 MB                                                                   
Clearing DRAM....... done                                                       
Flash:  4 MB                                                                    
Net:   octeth0, octeth1, octeth2                                                
                                                                                
USB:   (port 0) scanning bus for devices... 1 USB Devices found                 
       scanning bus for storage devices...                                      
  Device 0: Vendor:          Prod.: USB Flash Memory Rev: PMAP                  
            Type: Removable Hard Disk                                           
            Capacity: 3745.0 MB = 3.6 GB (7669824 x 512)                        
 0                                                                              
Octeon ubnt_e100# <INTERRUPT>                                                   
Octeon ubnt_e100# setenv serverip 192.168.100.112                               
Octeon ubnt_e100# dhcp                                                          
BOOTP broadcast 1                                                               
octeth0: Up 1000 Mbps Full duplex (port  0)                                     
DHCP client bound to address 192.168.100.114                                                             
Octeon ubnt_e100# tftpboot $(loadaddr) bsd                                      
Using octeth0 device                                                            
TFTP from server 192.168.100.112; our IP address is 192.168.100.114             
Filename 'bsd'.                                                                 
Load address: 0x9f00000                                                         
Loading: #########################                                              
done                                                                            
Bytes transferred = 3478580 (351434 hex), 416 Kbytes/sec                        
Octeon ubnt_e100# bootoctlinux $(loadaddr)                                      
ELF file is 64 bit                                                              
Allocating memory for ELF segment: addr: 0xffffffff81000000 (adjusted to: 0x1000
Allocated memory for ELF segment: addr: 0xffffffff81000000, size 0x387300       
Processing PHDR 0                                                               
  Loading 2f94e0 bytes at ffffffff81000000                                      
  Clearing 8de20 bytes at ffffffff812f94e0                                      
## Loading Linux kernel with entry point: 0xffffffff81000000 ...                
Bootloader: Done loading app on coremask: 0x1                                   
Total DRAM Size 0x0000000020000000                                              
Bank 0 = 0x0000000001388000   ->  0x000000000FFFFFFF                            
mem_layout[0] page 0x00000000000004E2 -> 0x0000000000003FFF                     
Initial setup done, switching console.                                          
boot_desc->desc_ver:7                                                           
boot_desc->desc_size:400                                                        
boot_desc->stack_top:0                                                          
boot_desc->heap_start:0                                                         
boot_desc->heap_end:0                                                           
boot_desc->argc:2                                                               
boot_desc->flags:5                                                              
boot_desc->core_mask:1                                                          
boot_desc->dram_size:512                                                        
boot_desc->phy_mem_desc_addr:0                                                  
boot_desc->debugger_flag_addr:a44                                               
boot_desc->eclock:500000000                                                     
boot_desc->boot_info_addr:1001f0                                                
boot_info->ver_major:1                                                          
boot_info->ver_minor:2                                                          
boot_info->stack_top:0                                                          
boot_info->heap_start:0                                                         
boot_info->heap_end:0                                                           
boot_info->boot_desc_addr:0                                                     
boot_info->exception_base_addr:1000                                             
boot_info->stack_size:0                                                         
boot_info->flags:5                                                              
boot_info->core_mask:1                                                          
boot_info->dram_size:512                                                        
boot_info->phys_mem_desc_addr:24108                                             
boot_info->debugger_flags_addr:0                                                
boot_info->eclock:500000000                                                     
boot_info->dclock:266000000                                                     
boot_info->board_type:20002                                                     
boot_info->board_rev_major:2                                                    
boot_info->board_rev_minor:12                                                   
boot_info->mac_addr_count:3                                                     
boot_info->cf_common_addr:0                                                     
boot_info->cf_attr_addr:0                                                       
boot_info->led_display_addr:0                                                   
boot_info->dfaclock:0                                                           
boot_info->config_flags:8                                                       
Copyright (c) 1982, 1986, 1989, 1991, 1993                                      
        The Regents of the University of California.  All rights reserved.      
Copyright (c) 1995-2013 OpenBSD. All rights reserved.  http://www.OpenBSD.org   
                                                                                
OpenBSD 5.3-current (GENERIC) #0: Sat Apr  6 10:44:05 JST 2013                  
    root@obsdhack.my.domain:/usr/src/sys/arch/octeon/compile/GENERIC            
real mem = 247939072 (236MB)                                                    
avail mem = 245628928 (234MB)                                                   
mainbus0 at root                                                                
cpu0 at mainbus0: Cavium OCTEON CPU rev 0.1 500 MHz, Software FP emulation      
cpu0: cache L1-I 32KB D 16KB 4 way, L2 128KB direct                             
clock0 at mainbus0: int 5                                                       
iobus0 at mainbus0                                                              
octcf at iobus0 base 0x1d000800 irq 0 not configured                            
octeon_pcibus_match, no PCI host function detected.                             
pcibus at iobus0 irq 0 not configured                                           
cn30xxgmx0 at iobus0 base 0x1180008000000 irq 48                                
cnmac0 at cn30xxgmx0 address=0x0001180008000000: RGMII, address dc:9f:db:29:20:7
cnmac1 at cn30xxgmx0 address=0x0001180008000000: RGMII, address dc:9f:db:29:20:8
cnmac2 at cn30xxgmx0 address=0x0001180008000000: RGMII, address dc:9f:db:29:20:9
uar: ns16550, no working fifo                                                   
com0: console                                                                   
com1 at uartbus0 base 0x1180000000c00 irq 35: ns16550, no working fifo          
/dev/ksyms: Symbol table not valid.                                             
vscsi0 at root                                                                  
scsibus0 at vscsi0: 256 targets                                                 
softraid0 at root                                                               
scsibus1 at softraid0: 256 targets                                              
root device: 

とりあえずさくっと起動はするねぇ。まだRAMDISKカーネル作ってないしルートデバイスもないからここで詰まるが。

さくらのVPSにOpenBSDをインストールしてみた

ふと思い立って、さくらのVPSを契約し自宅のOpenBSD鯖をそこへ移行する計画を実行に移してみる事にした。
なので、まずさくらのVPSOpenBSDを入れる必要があるが、「カスタムOSインストール」の項目にOpenBSDは無い。ではどうするか。
他にも色々方法がある事は知っているが、私はGRUB2を使う方法を選んだ。
以下ではその方法を説明する。

まず、OS再インストールのページを開き、「カスタムOSインストールへ」のリンクを選びます。

おもむろにUbuntu 10.04を選びます。amd64でもi386でもOK。
これはGRUB2を簡単に入れるためだけに使用します。
CentOSに頑張って入れる方法もあるけど、どうせ潰すんだからめんどくさいです。

VNCコンソールが起動してUbuntuインストーラがあがってくるのでガンガン先へ進みます。
この時、VM管理インタフェースのWebページにIPアドレスの設定情報が表示されるので必ずメモりましょう。ここでしか見れないっぽいので。


インストールが終わるとVNCが切れてVMが落ちてしまいます(なぜだろう。
仕方ないのでホームに戻って起動を押します。

リモートコンソールを開くと、Ubuntuが起動してきてるはずです。

起動が完了したら、ログインして

cd /boot
sudo wget ftp://ftp.jaist.ac.jp/pub/OpenBSD/4.8/amd64/bsd.rd

などと打ちインストール用のRAMDISKカーネルを/bootにダウンロードします。

ダウンロードが終わったら

sudo reboot

して再起動します。

GRUB2があがってくるので、10秒以内に'c'キーを押します。


kopenbsd /boot/bsd.rd
boot

と打ちます。
これでGRUB2からOpenBSDRAMDISKカーネルをブート出来ます(楽でしょ。
これ、多分他の*BSDでも行けるんじゃないかな。

ブートしたら「VNCコンソールを開く」を押してVNCコンソールを開きます。

インストールを進めます。
この時、「Change the default console to com0? 」をyesに、スピードを115200にします。
これで次回起動時よりHTMLなリモートコンソールを使う事が出来ます。

適当にパーティーションを割ります。

CDブートではないので「Location of sets?」はftpにします。

インストールが終わったら再起動します。

VNCコンソールを閉じてリモートコンソールを開くとOpenBSDが起動してきているはずです。

無事ログイン出来ました!やったね!

IIJ 次世代モジュール型エコ・データセンター 実証実験サイトでは300台のサーバが全てOpenBSDで動いている(キリッ

何故かIIJの次世代データセンタの実験施設に招待されたので見学してきた。
Geekなページのあきみちさんや東工大の首藤先生などその方面で有名な方々が集っている中、どうして私が呼ばれたんだろうと思ったがどう考えてもOpenBSD枠ですね本当にありがとうございました。


◯お話を聞いた
・従来型のデータセンターの課題
建物の建築費用が高く、一度にまとめて広いフロアを建設しなければならず、建設にも一年単位の時間がかかるので需要に合わせた供給を行なうのが難しい。
この為、需要を見越して先行投資する事になるが、そうすると運用開始してすぐに利用率を100%にする事は難しい。埋まるまで商売苦しい><;


IT機器にかかる電力と同じかそれ以上の電力を冷却に費やしている。
また、IT機器の小型化・発熱量の増大に冷却システムが追いついておらず、42Uにぎっちりサーバを詰め込むような運用が難しい。
ラックスペースを浪費している。


・そうだ外気冷却型のコンテナにしよう
冷却に使うコンプレッサが最も電気を食う。
外気を用いて冷却すれば冷却にかかる電気消費を抑えられる。
コンテナ筐体を単に平積みで並べるだけにすれば建築コストも低減出来る。
従来型データセンターと違ってコンテナ単位で需要に応じて段階的に増設出来、建設にかかる期間も短い。
コンテナにシステムを詰め込んでトラックで運んできて現地に固定するだけ。置くだけなら半日。


・実験してみる
まずは実証実験を行ってみた。
実験用地・コンテナの開発はNLMエカル、電気空調設備は東芝、防災・消防設備は能美防災、ラック・分電盤は河村電器産業に頼んだ。
この実験は主に外気冷却型コンテナの冷却効率や電気効率を評価するもので、サーバで何かをするのはあまり重要でなく、熱を発していれば何でも良かった。本当はホットプレートでもよかったんだけど、流石に燃えそうだったので辞めた。
新品をラック全部埋めるだけ買う予算が無かったのでKSG(コンピュータのおっと)に頼んで中古をかき集めてもらった。
中古だったので全機種同じという訳に行かず、ラックによって熱量が偏らないように計算してバランスよくラックに配置するのが大変だった(!)。


データセンターの消費電力削減・外気冷却方式の普及促進の為、ASHRAE(米国暖房冷凍空調学会)は2008年にデータセンター内の温湿度条件を緩和した:
http://tc99.ashraetcs.org/documents/ASHRAE_Extended_Environmental_Envelope_Final_Aug_1_2008.pdf


この実験では外気冷却を利用しつつ、この2008年バージョンの推奨値規格に準拠する事を目指している。


外気を使うという事は、季節・時刻によって刻々と気温・湿度が変化するから、単純に外気をコンピュータに吹きつけるだけではASHRAEの温湿度条件に準拠出来ない。


夏期の気温・湿度が高い時は排気を循環させて冷却装置を用いて温度・湿度を下げる。これは普通のDCと同じ。
冬期の気温が低い時はいきなり全力で外気を吹きつけると結露するので程良く排気の温かい空気を混ぜる。
春・秋は外気を直接取り込む。
詳しくはASCIIの記事を参照:
http://ascii.jp/elem/000/000/500/500186/


電気利用効率の指標としてはPUEがある。
PUE=データセンタ全体の消費電力÷IT機器の消費電力
従来型のDCでは一般的に2.x程度、かなり努力して1.4x程度と言われている。
1.2以下は国内の商用サービスでは実現していない。


本実験では冬期の混合運転モードで実測Partial PUE(※配電盤・UPSを含まないPUE)1.07を達成。
通年1.1台を目指し夏期の循環運転モードを極力減らす努力を続けている。


・商用サービスに向けて
来年には商用サービス向けに建設し、IIJ GIO(クラウドサービス)のインフラとして運用を開始する。


OpenBSD
実験サーバのOSは全てOpenBSDをインストールしてある(!)
実験に使っている温湿度計はストロベリーリナックス社の製品で、全て実験サーバに接続されsensor deviceとして動いている(!!)
yuo先生の仕業。温湿度計のドライバ書いたのもyuoさん。
パネェ…


送信者 Aug 06, 2010 IIJ Container DC
全体像

送信者 Aug 06, 2010 IIJ Container DC
関係各社

送信者 Aug 06, 2010 IIJ Container DC
冷却システム

送信者 Aug 06, 2010 IIJ Container DC
後ろに並んでるのはクーラーの室外機とおんなじやつ

送信者 Aug 06, 2010 IIJ Container DC
ここから人が入って冷却システムのメンテナンスを行える

送信者 Aug 06, 2010 IIJ Container DC
コンテナと冷却システムのつなぎ目

送信者 Aug 06, 2010 IIJ Container DC
コンテナ入り口

送信者 Aug 06, 2010 IIJ Container DC
コンテナは土台とこれで固定されてる

送信者 Aug 06, 2010 IIJ Container DC
中は二重扉になってる

送信者 Aug 06, 2010 IIJ Container DC
LED照明だった

送信者 Aug 06, 2010 IIJ Container DC
配電盤。触ったら死ぬぞって言われた。

送信者 Aug 06, 2010 IIJ Container DC
これが例のUSB温湿度計らしい。

送信者 Aug 06, 2010 IIJ Container DC
排熱側のエリア。

送信者 Aug 06, 2010 IIJ Container DC
ちゃんとUSBに温湿度計が刺さってる。

送信者 Aug 06, 2010 IIJ Container DC
排熱用ファン…だったが、実は回さなくても風速が強いから十分排熱出来たらしい。

送信者 Aug 06, 2010 IIJ Container DC
外気冷却をフルで回すと最大風速11mにもなるらしく、その勢いだと万が一火災が起きても天井に付けた火災報知器は反応しない。排熱口にパイプを設置し、ここに火災報知器を設置。

送信者 Aug 06, 2010 IIJ Container DC
表側。

送信者 Aug 06, 2010 IIJ Container DC
サーバの機種がバラバラ。

送信者 Aug 06, 2010 IIJ Container DC
実は私、4Gなんです。

送信者 Aug 06, 2010 IIJ Container DC
みっちり詰め込まれる1Uサーバ達。

送信者 Aug 06, 2010 IIJ Container DC
外気が入ってくる所。この時は循環運転モードになってたからフルパワーじゃなかったっぽい。

送信者 Aug 06, 2010 IIJ Container DC
この白い子はどなた?自作??

関連記事:
[http://www.shudo.net/diary/2010aug.html#20100806:title]
[http://d.hatena.ne.jp/futsu-9/20100806/p1:title]
[http://blog.virtualtech.jp/itooon/427:title]
[http://www.iij.ad.jp/news/iijnews/2010/vol99.html:title]
[http://www.google.com/search?hl=ja&q=IIJ+%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A+%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%B3%E3%82%BF:title]

panicを解決してメモリ量が出る所まで進んだ

panicの原因はphysmemを初期化していないのが原因だったので、これにきちんと物理メモリ量を代入するように直した。

cvmctl:900043f0 cvmmemctl:46104
 Unknown Boot-Descriptor: Using Defaults
Boot Descriptor Ver: 0 -> 0/0  CPU clock: 500MHz  Core Mask: 0x1
  Dram: 256 MB  Board Type: 0  Revision: 0/0
  Octeon Chip: 0  Rev 0/0  Mac Address 00.0F.B7.10.09.06 (1)
l1icache size:65536 line:128 set:32768
l1dcache size:4096 line:128 set:2048
l2size:524288 l3size:0
Initial setup done, switching console.
Copyright (c) 1982, 1986, 1989, 1991, 1993
	The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2010 OpenBSD. All rights reserved.  http://www.OpenBSD.org

pmap_init()
pmap_reference(803373c0)
pmap_enter(0xffffffff803373c0, 0xc000000001730000, 0x354000, 0x7, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001730000 pa 0x354000
pmap_kenter_pa(0xc000000000000000, 0x5ffc000, 0x3)
pmap_kenter_pa(0xc000000000004000, 0x350000, 0x3)
OpenBSD 4.7-current (GENERIC) #20: Fri Jul  2 23:58:44 JST 2010
    syuu@lt0115:/home/syuu/octeon/src/sys/arch/octeon/compile/GENERIC
real mem = 97271808 (92MB)
pmap_reference(803373c0)
pmap_kenter_pa(0xc000000000008000, 0x5ff8000, 0x3)
pmap_reference(803373c0)
avail mem = 92897280 (88MB)
pmap_enter(0xffffffff803373c0, 0xc000000002030000, 0x34c000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002030000 pa 0x34c000
pmap_enter(0xffffffff803373c0, 0xc00000000202c000, 0x348000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc00000000202c000 pa 0x348000
pmap_enter(0xffffffff803373c0, 0xc000000002028000, 0x5ff4000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002028000 pa 0x5ff4000
pmap_enter(0xffffffff803373c0, 0xc000000002024000, 0x5ff0000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002024000 pa 0x5ff0000
pmap_enter(0xffffffff803373c0, 0xc000000002020000, 0x5fec000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002020000 pa 0x5fec000
pmap_enter(0xffffffff803373c0, 0xc00000000201c000, 0x5fe8000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc00000000201c000 pa 0x5fe8000
pmap_enter(0xffffffff803373c0, 0xc000000002018000, 0x5fe4000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002018000 pa 0x5fe4000
pmap_enter(0xffffffff803373c0, 0xc000000002014000, 0x5fe0000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002014000 pa 0x5fe0000
pmap_enter(0xffffffff803373c0, 0xc000000002010000, 0x5fdc000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002010000 pa 0x5fdc000
pmap_enter(0xffffffff803373c0, 0xc00000000200c000, 0x5fd8000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc00000000200c000 pa 0x5fd8000
pmap_enter(0xffffffff803373c0, 0xc000000002008000, 0x5fd4000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002008000 pa 0x5fd4000
pmap_enter(0xffffffff803373c0, 0xc000000002004000, 0x5fd0000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002004000 pa 0x5fd0000
pmap_enter(0xffffffff803373c0, 0xc000000002000000, 0x5fcc000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000002000000 pa 0x5fcc000
pmap_enter(0xffffffff803373c0, 0xc000000001ffc000, 0x5fc8000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001ffc000 pa 0x5fc8000
pmap_enter(0xffffffff803373c0, 0xc000000001ff8000, 0x5fc4000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001ff8000 pa 0x5fc4000
pmap_enter(0xffffffff803373c0, 0xc000000001ff4000, 0x5fc0000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001ff4000 pa 0x5fc0000
pmap_enter(0xffffffff803373c0, 0xc000000001ff0000, 0x5fbc000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001ff0000 pa 0x5fbc000
pmap_enter(0xffffffff803373c0, 0xc000000001fec000, 0x5fb8000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fec000 pa 0x5fb8000
pmap_enter(0xffffffff803373c0, 0xc000000001fe8000, 0x5fb4000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fe8000 pa 0x5fb4000
pmap_enter(0xffffffff803373c0, 0xc000000001fe4000, 0x5fb0000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fe4000 pa 0x5fb0000
pmap_enter(0xffffffff803373c0, 0xc000000001fe0000, 0x5fac000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fe0000 pa 0x5fac000
pmap_enter(0xffffffff803373c0, 0xc000000001fdc000, 0x5fa8000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fdc000 pa 0x5fa8000
pmap_enter(0xffffffff803373c0, 0xc000000001fd8000, 0x5fa4000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fd8000 pa 0x5fa4000
pmap_enter(0xffffffff803373c0, 0xc000000001fd4000, 0x5fa0000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fd4000 pa 0x5fa0000
pmap_enter(0xffffffff803373c0, 0xc000000001fd0000, 0x5f9c000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fd0000 pa 0x5f9c000
pmap_enter(0xffffffff803373c0, 0xc000000001fcc000, 0x5f98000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fcc000 pa 0x5f98000
pmap_enter(0xffffffff803373c0, 0xc000000001fc8000, 0x5f94000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fc8000 pa 0x5f94000
pmap_enter(0xffffffff803373c0, 0xc000000001fc4000, 0x5f90000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fc4000 pa 0x5f90000
pmap_enter(0xffffffff803373c0, 0xc000000001fc0000, 0x5f8c000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fc0000 pa 0x5f8c000
pmap_enter(0xffffffff803373c0, 0xc000000001fbc000, 0x5f88000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fbc000 pa 0x5f88000
pmap_enter(0xffffffff803373c0, 0xc000000001fb8000, 0x5f84000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fb8000 pa 0x5f84000
pmap_enter(0xffffffff803373c0, 0xc000000001fb4000, 0x5f80000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fb4000 pa 0x5f80000
pmap_enter(0xffffffff803373c0, 0xc000000001fb0000, 0x5f7c000, 0x3, 0x13)
pmap_enter: first pv: pmap 0xffffffff803373c0 va 0xc000000001fb0000 pa 0x5f7c000
pmap_kenter_pa(0xc00000000000c000, 0x5f6c000, 0x3)
pmap_kenter_pa(0xc000000000010000, 0x5f70000, 0x3)
pmap_kenter_pa(0xc000000000014000, 0x5f74000, 0x3)
pmap_kenter_pa(0xc000000000018000, 0x5f78000, 0x3)
pmap_kenter_pa(0xc00000000001c000, 0x5f5c000, 0x3)
pmap_kenter_pa(0xc000000000020000, 0x5f60000, 0x3)
pmap_kenter_pa(0xc000000000024000, 0x5f64000, 0x3)
pmap_kenter_pa(0xc000000000028000, 0x5f68000, 0x3)
pmap_kenter_pa(0xc00000000002c000, 0x5f4c000, 0x3)
pmap_kenter_pa(0xc000000000030000, 0x5f50000, 0x3)
pmap_kenter_pa(0xc000000000034000, 0x5f54000, 0x3)
pmap_kenter_pa(0xc000000000038000, 0x5f58000, 0x3)
pmap_kenter_pa(0xc00000000003c000, 0x5f3c000, 0x3)
pmap_kenter_pa(0xc000000000040000, 0x5f40000, 0x3)
pmap_kenter_pa(0xc000000000044000, 0x5f44000, 0x3)
pmap_kenter_pa(0xc000000000048000, 0x5f48000, 0x3)
pmap_kenter_pa(0xc00000000004c000, 0x5f2c000, 0x3)
pmap_kenter_pa(0xc000000000050000, 0x5f30000, 0x3)
pmap_kenter_pa(0xc000000000054000, 0x5f34000, 0x3)
pmap_kenter_pa(0xc000000000058000, 0x5f38000, 0x3)
pmap_kenter_pa(0xc00000000005c000, 0x5f1c000, 0x3)
pmap_kenter_pa(0xc000000000060000, 0x5f20000, 0x3)
pmap_kenter_pa(0xc000000000064000, 0x5f24000, 0x3)
pmap_kenter_pa(0xc000000000068000, 0x5f28000, 0x3)
pmap_kenter_pa(0xc00000000006c000, 0x5f0c000, 0x3)
pmap_kenter_pa(0xc000000000070000, 0x5f10000, 0x3)
pmap_kenter_pa(0xc000000000074000, 0x5f14000, 0x3)
pmap_kenter_pa(0xc000000000078000, 0x5f18000, 0x3)
pmap_kenter_pa(0xc00000000007c000, 0x5efc000, 0x3)
pmap_kenter_pa(0xc000000000080000, 0x5f00000, 0x3)
pmap_kenter_pa(0xc000000000084000, 0x5f04000, 0x3)
pmap_kenter_pa(0xc000000000088000, 0x5f08000, 0x3)

Trap cause = 4 Frame 0x9800000000343d18
Trap PC 0xffffffff8009ad4c RA 0xffffffff8009ad18 fault 0x46432ff84fbd2a90
0xffffffff8009a480 (ffffffff802600c8,ffffffff802600d8,1,3fd8)  ra 0xffffffff8009ad18 sp 0x9800000000343e70, sz 0
0xffffffff8009a480 (ffffffff802600c8,ffffffff802600d8,1,3fd8)  ra 0x0 sp 0x9800000000343e70, sz 0
User-level: pid 0
stopped on non ddb fault
Stopped at      0xffffffff8009ad4c:     ld      v1,8(v0)
0xffffffff8009a480 (ffffffff802600c8,ffffffff802600d8,1,3fd8)  ra 0xffffffff800
9ad18 sp 0x9800000000343e70, sz 0
0xffffffff8009a480 (ffffffff802600c8,ffffffff802600d8,1,3fd8)  ra 0x0 sp 0x9800
000000343e70, sz 0
User-level: pid 0
ddb> 

http://github.com/syuu1228/OpenBSD-OCTEON/commit/d872d06991f4ca53736b2b1d41fb8cd938ae3966

Copyrightが出てpanicする所まで来た

ページテーブルを引く所でこけてるから仮想メモリ周りが悪いのかと思ったら、NULLポインタを解決しようとして何故か初期化されてないproc0のユーザ空間向けページテーブルを引いているのが原因だった。

NULLポインタを関数コールしてるコンソール周りを直したら、Copyrightが出てpanicする所まで進んだ。

cvmctl:900043f0 cvmmemctl:46104
 Unknown Boot-Descriptor: Using Defaults
Boot Descriptor Ver: 0 -> 0/0  CPU clock: 500MHz  Core Mask: 0x1
  Dram: 256 MB  Board Type: 0  Revision: 0/0
  Octeon Chip: 0  Rev 0/0  Mac Address 00.0F.B7.10.09.06 (1)
uvm_page_physload(0xcf, 0xd6, 0xcf, 0xd6, 0, 0)
uvm_page_physload(0x19d, 0x1800, 0x19d, 0x1800, 0, 0)
l1icache size:65536 line:128 set:32768
l1dcache size:4096 line:128 set:2048
l2size:524288 l3size:0
Initial setup done, switching console.
Sysmap:0x9800000000674000
[../../../../kern/init_main.c:main:203]
[../../../../kern/init_main.c:main:208]
[../../../../kern/init_main.c:main:215]
Copyright (c) 1982, 1986, 1989, 1991, 1993
	The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2010 OpenBSD. All rights reserved.  http://www.OpenBSD.org

[../../../../kern/init_main.c:main:220]
pmap_init()
pmap_reference(80337930)
panic: uvm_km_suballoc: submap allocation failed
Stopped at      0xffffffff80257fd4:     jr      ra
0xffffffff80257fd8:      nop
0xffffffff80257fd0 (7,ffffffff80295ba0,1,1ce)  ra 0xffffffff800bb4ec sp 0x98000
00000343e60, sz 0
0xffffffff800bb428 (7,ffffffff802ab774,ffffffff802fd5b8,4)  ra 0xffffffff801eed
04 sp 0x9800000000343e60, sz 96
0xffffffff801eece4 (7,ffffffff802ab774,ffffffff802fd5b8,4)  ra 0x0 sp 0x9800000
000343ec0, sz 0
User-level: pid 0
RUN AT LEAST 'trace' AND 'ps' AND INCLUDE OUTPUT WHEN REPORTING THIS PANIC!
DO NOT EVEN BOTHER REPORTING THIS WITHOUT INCLUDING THAT INFORMATION!
ddb> 

http://github.com/syuu1228/OpenBSD-OCTEON/commit/ca298cbe7ddfd60a2affdc9c476fd89db23b4172#diff-3

OpenBSD/OCTEONが起動しなかった

ページング周りが全然ダメで、仮想アドレス使い始めた瞬間に死んでしまう使えないシロモノが出来上がった。
その辺のコードはどのMIPSでも大体共通で、特にOCTEONで気をつけるべき部分は無いかと思っていたので、なんでうまく行かないのかよく分からず悩み中…。

cvmctl:900043f0 cvmmemctl:46104
 Unknown Boot-Descriptor: Using Defaults
Boot Descriptor Ver: 0 -> 0/0  CPU clock: 500MHz  Core Mask: 0x1
  Dram: 256 MB  Board Type: 0  Revision: 0/0
  Octeon Chip: 0  Rev 0/0  Mac Address 00.0F.B7.10.09.06 (1)
memrange_register: memory from 0x33c000 to 0x6000000
l1icache size:65536 line:128 set:32768
l1dcache size:4096 line:128 set:2048
l2size:524288 l3size:0
Initial setup done, switching console.
[../../../../kern/init_main.c:main:203]
[../../../../kern/init_main.c:main:208]

Trap cause = 4 Frame 0x9800000000343dc8
Trap PC 0xffffffff80257650 RA 0xffffffff80248d70 fault 0x3c1a0000001ad438
0xffffffff802575f0 (ffffffff8029f6e8,ffffffff802959c8,ffffffff802959c0,50)  ra 0xffffffff80248d70 sp 0x9800000000343f20, sz 0
0xffffffff802489e0 (ffffffff8029f6e8,ffffffff802959c8,ffffffff802959c0,50)  ra 0x0 sp 0x9800000000343f20, sz 0
User-level: pid 0
stopped on non ddb fault
Stopped at      0xffffffff80257650:     lw      k0,0(k1)
0xffffffff802575f0 (ffffffff8029f6e8,ffffffff802959c8,ffffffff802959c0,50)  ra 0
xffffffff80248d70 sp 0x9800000000343f20, sz 0
0xffffffff802489e0 (ffffffff8029f6e8,ffffffff802959c8,ffffffff802959c0,50)  ra 0
x0 sp 0x9800000000343f20, sz 0
User-level: pid 0
ddb>

そもそも、TLBを初期化するtlb_flush()がtlbwiでExceptionを起こしてしまってうまく動かず、FreeBSD/mipsと比較して差異の部分をコピーして来て何とか動かしてる状況だったりして、なんでこんな事をしないと動かないのかちっとも理解できてない。

LEAF(tlb_flush, 0)
	mfc0	v1, COP_0_STATUS_REG	# Save the status register.
	ori	v0, v1, SR_INT_ENAB
	xori	v0, v0, SR_INT_ENAB
	mtc0	v0, COP_0_STATUS_REG	# Disable interrupts
	ITLBNOPFIX
	mfc0	ta1, COP_0_TLB_WIRED


	LA	v0, CKSEG0_BASE		# invalid address
	dmfc0	ta0, COP_0_TLB_HI	# Save the PID

#ifdef CPU_OCTEON
	sll	t3, ta1, PAGE_SHIFT + 1
	addu	v0, t3
#endif

	dmtc0	v0, COP_0_TLB_HI	# Mark entry high as invalid
	dmtc0	zero, COP_0_TLB_LO0	# Zero out low entry0.
	dmtc0	zero, COP_0_TLB_LO1	# Zero out low entry1.
	mtc0	zero, COP_0_TLB_PG_MASK	# Zero out mask entry.
/*
 * Align the starting value (ta1) and the upper bound (a0).
 */
1:
	mtc0	ta1, COP_0_TLB_INDEX	# Set the index register.
#if CPU_OCTEON
	ITLBNOPFIX
	dmtc0	v0, COP_0_TLB_HI	# Mark entry high as invalid
#endif
	addu	ta1, ta1, 1		# Increment index.
#if CPU_OCTEON
	addu	v0, v0, 8 * 1024
#endif
	nop
	nop
	nop
	tlbwi				# Write the TLB entry.
	nop
	nop
	bne	ta1, a0, 1b
	nop

#ifdef CPU_LOONGSON2
	li	v0, COP_0_DIAG_ITLB_CLEAR | COP_0_DIAG_BTB_CLEAR | COP_0_DIAG_RAS_DISABLE
	dmtc0	v0, COP_0_DIAG
#endif

	dmtc0	ta0, COP_0_TLB_HI	# Restore the PID
	li	a0, TLB_PAGE_MASK
	mtc0	a0, COP_0_TLB_PG_MASK	# Restore default mask value.
	mtc0	v1, COP_0_STATUS_REG	# Restore the status register
	ITLBNOPFIX
	j	ra
	nop
END(tlb_flush)

恐らくr10k・LoongsonとはTLB周りの仕様が違うのだろう…


取り敢えずコードはこの辺においた:
http://github.com/syuu1228/OpenBSD-OCTEON