::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 の↓の値。
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で展開にかかった合計の秒数。
…raidのblocksize以下になると遅くなるのは当然だが、それでもいまいち傾向がよくわからない。
あまり深く考えるのはやめて、一番速かった SectPerSU=16、newfs -b 64k -f 32k で使うことにしよう。
1ファイル平均16kb無駄になるんで、うちの環境の場合11Tのうち0.5Tくらい無駄になる予感。
いつもハマるのが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をさわりだす。
以前はしもとさんからもらったパッチをあてて適当に修正したら a9_start() までは来た。
「@」が a9_start() の先頭付近にある XPUTC(#64) によるもので、とりあえずここで止まった。
XPUTC(#65) (「A」が出力されるはず…)にも来てないということは armv7_icache_inv_all が動いてないのか。謎。
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
2013-04-10 EdgeRouterLite

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