::log.2013

[ TOP | Recently ]

raidframeチューニングふたたび / NITROGEN6X / PenguinDrum / EdgeRouterLite

2013-07-24 raidframeチューニングふたたび

3T×5を買ってきてNetBSDのraidframeでRAID5を組んだのでメモっておく。NetBSD 6.99.22/amd64。

いつもハマるのがraid.confのSectPerSuの値とnewfsのblock-size/fragment-size。
ちょっと変えるだけで劇的に速度が変わるとか罠杉だろう。

SectPerSU は raid0.conf の↓の値。

START layout
16 1 1 5

2T overなので gpt を使う。gpt add -b 64 -s 5860533068 -t raid wd2 〜 wd6 とかやって、4k alignment にちゃんと合わせておく。
あとは上記SectPerSUの値とnewfsのblock-sizeとfragment-sizeを決める。

以前raidframeにした時は手作業で試してたのだが、さすがにアレなのでscript作ってブン回す。

以下、newfs、dd、tarで展開、rm、sync、tarで展開にかかった合計の秒数。

SectPerSU=16
			-f	2k	4k	8k	16k	32k	64k
	--------------- --------------- ------- ------- ------- ------- --------
	newfs -b 16k		1116	1036	922	1024			
	newfs -b 32k			296	257	297	100		
	newfs -b 64k				268	280	89	114	

SectPerSU=32
			-f	2k	4k	8k	16k	32k	64k
	--------------- --------------- ------- ------- ------- ------- --------
	newfs -b 16k		905	735	686	452			
	newfs -b 32k			473	307	293	331		
	newfs -b 64k				670	406	433	559	

SectPerSU=64
			-f	2k	4k	8k	16k	32k	64k
	--------------- --------------- ------- ------- ------- ------- --------
	newfs -b 16k		1010	671	542	509			
	newfs -b 32k			505	411	369	353		
	newfs -b 64k				456	337	303	353	

SectPerSU=128
			-f	2k	4k	8k	16k	32k	64k
	--------------- --------------- ------- ------- ------- ------- --------
	newfs -b 16k		961	626	509	417			
	newfs -b 32k			514	376	395	309		
	newfs -b 64k				465	395	349	404	

…raidのblocksize以下になると遅くなるのは当然だが、それでもいまいち傾向がよくわからない。
あまり深く考えるのはやめて、一番速かった SectPerSU=16、newfs -b 64k -f 32k で使うことにしよう。
1ファイル平均16kb無駄になるんで、うちの環境の場合11Tのうち0.5Tくらい無駄になる予感。

2013-06-18 NITROGEN6X

ずっと放置してたNITROGEN6Xをさわりだす。

U-Boot 2009.08-00495-g10adc6d (Apr 24 2012 - 13:27:04)

CPU:   Freescale i.MX 6 family 0.0V at 792 MHz
Temperature:   can't get valid data!
mx6q pll1: 792MHz
mx6q pll2: 528MHz
mx6q pll3: 480MHz
mx6q pll8: 50MHz
ipg clock     : 66000000Hz
ipg per clock : 66000000Hz
uart clock    : 80000000Hz
cspi clock    : 60000000Hz
ahb clock     : 132000000Hz
axi clock   : 264000000Hz
emi_slow clock: 29333333Hz
ddr clock     : 528000000Hz
usdhc1 clock  : 200000000Hz
usdhc2 clock  : 200000000Hz
usdhc3 clock  : 200000000Hz
usdhc4 clock  : 200000000Hz
nfc clock     : 24000000Hz
Board: MX6Q-SABRELITE:[ POR]
Boot Device: I2C
I2C:   ready
DRAM:   1 GB
MMC:   FSL_USDHC: 0,FSL_USDHC: 1
JEDEC ID: 0xbf:0x25:0x41
Reading SPI NOR flash 0xc0000 [0x2000 bytes] -> ram 0x276009b8
SUCCESS

In:    serial
Out:   serial
Err:   serial
Checking for recovery command file...
** Bad partition 6 **
Card did not respond to voltage select!
** Bad partition 6 **
MMC Device 2 not found
MMC Device 2 not found
** Block device MMC 2 not supported
Net:   got MAC address from IIM: 00:19:b8:**:**:**
FEC0 [PRIME]


MX6Q SABRELITE U-Boot > printenv
bootdelay=3
baudrate=115200
ipaddr=192.168.1.103
serverip=192.168.1.101
netmask=255.255.255.0
loadaddr=0x10800000
rd_loadaddr=0x11000000
netdev=eth0
ethprime=FEC0
bootargs_base=setenv bootargs console=ttymxc1,115200 video=mxcfb0:dev=ldb,LDB-XGA,if=RGB666 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp rw rootwait enable_wait_mode=off
bootcmd_net=dhcp && run bootargs_base bootargs_nfs && bootm
bootargs_mmc=setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait rw
bootcmd_mmc=for disk in 0 1 ; do mmc dev ${disk} ;for fs in fat ext2 ; do ${fs}load mmc ${disk}:1 10008000 /6q_bootscript && source 10008000 ; done ; done
clearenv=sf probe 1 && sf erase 0xc0000 0x2000 && echo restored environment to factory default
upgradeu=for disk in 0 1 ; do mmc dev ${disk} ;for fs in fat ext2 ; do ${fs}load mmc ${disk}:1 10008000 /6q_upgrade && source 10008000 ; done ; done
bootfile=uImage
nfsroot=/your/nfs/dir
bootcmd=run bootcmd_mmc
ethact=FEC0
stdin=serial
stdout=serial
stderr=serial


MX6Q SABRELITE U-Boot > tftpboot netbsd.bin
Found phy at 6
FEC: Link is Up 796d
Using FEC0 device
TFTP from server 10.0.0.1; our IP address is 10.0.0.2
Filename 'n'.
Load address: 0x10800000
Loading: #################################################################
#################################################################
##############################
done
Bytes transferred = 2340672 (23b740 hex)
MX6Q SABRELITE U-Boot > go 10800000
## Starting application at 0x10800000 ...
@

以前はしもとさんからもらったパッチをあてて適当に修正したら a9_start() までは来た。
「@」が a9_start() の先頭付近にある XPUTC(#64) によるもので、とりあえずここで止まった。
XPUTC(#65) (「A」が出力されるはず…)にも来てないということは armv7_icache_inv_all が動いてないのか。謎。

2013-04-26 PenguinDrum

昔android用に作ったbootanimation。

bootanimation.zip (480x640)
bootanimationに入ってる方はちゃんとフェードインする。

2013-04-10 EdgeRouterLite


EdgeRouterLiteが来たのでとりあえずubootをメモっておく。

U-Boot 1.1.1 (UBNT Build ID: 4493936-g009d77b) (Build time: Sep 20 2012 - 15:48:51)

BIST check passed.
UBNT_E100 r1:2, r2:12, serial #: DC9FDB29ABD5
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 DISK 2.0     Rev: PMAP
            Type: Removable Hard Disk
            Capacity: 3700.6 MB = 3.6 GB (7579008 x 512)                                                                                                                                                                                     0 
Octeon ubnt_e100# help
?       - alias for 'help'
askenv  - get environment variables from stdin
autoscr - run script from memory
base    - print or set address offset
bootelf - Boot from an ELF image in memory
bootloaderupdate   - Update the bootloader in flash
bootloadervalidate   - Validate the bootloader image
bootoct - Boot from an Octeon Executive ELF image in memory
bootoctelf - Boot a generic ELF image in memory. NOTE: This command does not support
             simple executive applications, use bootoct for those.
bootoctlinux - Boot from a linux ELF image in memory
cmp     - memory compare
coninfo - print console devices and informations
cp      - memory copy
crc32   - checksum calculation
dhcp    - invoke DHCP client to obtain IP/boot params
echo    - echo args to console
erase   - erase FLASH memory
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatloadalloc - load binary file from a dos filesystem, and allocate
          a named bootmem block for file data
fatls   - list files in a directory (default /)
flinfo  - print FLASH memory information
freeprint    - Print list of free bootmem blocks
go      - start application at address 'addr'
gunzip  - Uncompress an in memory gzipped file
help    - print online help
itest    - return true/false on integer compare
loadb   - load binary file over serial line (kermit mode)
loop    - infinite loop on address range
md      - memory display
md5   - MD5 hash calculation
mii     - MII utility commands
mm      - memory modify (auto-incrementing)
mtest   - simple RAM test
mw      - memory write (fill)
namedalloc    - Allocate a named bootmem block
namedfree    - Free a named bootmem block
namedprint    - Print list of named bootmem blocks
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
read64    - read 64 bit word from 64 bit address
read64b    - read 8 bit word from 64 bit address
read64l    - read 32 bit word from 64 bit address
read64s    - read 16 bit word from 64 bit address
read_cmp    - read and compare memory to val
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv  - set environment variables
sleep   - delay execution for some time
tftpboot- boot image via network using TFTP protocol
ubntw      - ubntw commands
usb     - USB sub-system
version - print monitor version
write64    - write 64 bit word to 64 bit address
write64b    - write 8 bit word to 64 bit address
write64l    - write 32 bit word to 64 bit address
write64s    - write 16 bit word to 64 bit address
Octeon ubnt_e100# printenv
bootcmd=fatload usb 0 $loadaddr vmlinux.64;bootoctlinux $loadaddr coremask=0x3 root=/dev/sda2 rootdelay=15 rw rootsqimg=squashfs.img rootsqwdir=w mtdparts=phys_mapped_flash:512k(boot0),512k(boot1),64k@3072k(eeprom)
bootdelay=0
baudrate=115200
download_baudrate=115200
nuke_env=protect off $(env_addr) +$(env_size);erase $(env_addr) +$(env_size)
autoload=n
ethact=octeth0
loadaddr=0x9f00000
numcores=2
stdin=serial
stdout=serial
stderr=serial
env_addr=0x1fbfe000
env_size=0x2000
flash_base_addr=0x1f800000
flash_size=0x400000
uboot_flash_addr=0x1f880000
uboot_flash_size=0x70000
flash_unused_addr=0x1f8f0000
flash_unused_size=0x310000
bootloader_flash_update=bootloaderupdate

Environment size: 675/8188 bytes

ちなみにBigEndianでした。(ubootから適当なアドレスに何か値をwrite64してmd.bすればすぐわかる)

NetBSDのmips64/octeon対応状況は、mips64コア自体はok、octeon SoCはまだ、のままなのかな。
octeon自体はOpenBSD,FreeBSDに入っている。
OpenBSDはしゅうう先生ががんばってsgiとIIJのSEILからもってきたのがベース、FreeBSDはCavium Network由来のがベースになっている、と…


EOF