RaspberryPi4 + ZFS で bonnie++ ベンチ

最初に結論:

  • NetBSDZFSは少なくともベンチマークを回せる程度の安定性はある
  • さすがに raidframe RAID1 と比較すると速度もCPU負荷も分が悪い
  • そもそも測定方法もいいかげんなのでぶっちゃけ話のネタ以上の意味はない

Raspberry Pi 4 と USB HDD 2台で raidframe による RAID1 と、最近になって更新された ZFS で mirror を組んだときのベンチマークを測ってみた。比較用に1台の場合も。

  • Raspberry Piは小型のヒートシンクを着けただけなので、測定中のどこかの段階で発熱によるクロックダウンが起きていると思われる。
  • コマンドは "bonnie++ -d <mount先> -b -u root"。
  • 測定が早すぎると "+++++" という結果になる。解決には例えば "-n 256:1024:1024:16" のようにオプションで調整するように紹介しているところが多いが、実際に試したら一日経っても終わらなかったので諦めた。
  • パーティションはGPTで作成。1台のとRAID1はどちらもUFS2+log。
  • USB-HDD変換はAOTECH ADK-HDCASE25BKA千石電商2号店(本店の右)でワゴン売りしてたもの。最近は見かけなくなった電源供給用のUSBプラグが生えており、Raspebrry Piで不安だった電源供給能力を回避できて実に都合が良かったりする。
  • HDDは東芝 MQ04ABF100。なんかバッファー容量でけぇな?と思っていたが、おそらくSMR(シングル磁気記憶方式)による書き込み性能悪化をフォローするためなんじゃないかという気がする。つまりベンチマークのような非現実的な書き込み負荷をかけるものとすこぶる相性が悪い。
singleraidrame RAID1ZFS mirror
Sequencial OutputPer Characterspeed 17 K/sec23 K/sec7 K/sec
CPU 99 %99 %99 %
Latency 527 ms360 ms1,161 ms
Blockspeed 44,554 K/sec47,822 K/sec39,870 K/sec
CPU 93 %92 %89 %
Latency 3,286 ms1,991 ms57,757 us
Rewritespeed 17,823 K/sec13,193 K/sec27,813 K/sec
CPU 70 %44 %83 %
Latency 3,337 ms7,757 ms872 ms
Sequencial InputPer Characterspeed 149 K/sec132 K/sec21 K/sec
CPU 96 %85 %99 %
Latency 810 ms3,408 ms469 ms
Blockspeed 96,631 K/sec88,545 K/sec87,687 K/sec
CPU 69 %66 %95 %
Latency 182 ms185 ms158 ms
Random Seeksspeed 123.2 /sec121.4 /sec99.4 /sec
CPU 22 %22 %21 %
Latency 348 ms486 ms550 ms
Sequencial CreateCreatespeed 2 /sec296 /sec62 /sec
CPU 0 %57 %4 %
Latency 596 ms43,634 us201 ms
Readspeed +++++ /sec+++++ /sec9,824 /sec
CPU +++ %+++ %98 %
Latency 84 us81 us16,000 us
Deletespeed 2 /sec784 /sec56 /sec
CPU 0 %21 %5 %
Latency 640 ms22,506 us300 ms
Random CreateCreatespeed 35 /sec295 /sec61 /sec
CPU 8 %56 %4 %
Latency 491 ms49,918 us285 ms
Readspeed +++++ /sec+++++ /sec10,041 /sec
CPU +++ %+++ %97 %
Latency 51 us72 us14,300 us
Deletespeed 37 /sec525 /sec46 /sec
CPU 5 %46 %4 %
Latency 279 ms71,794 us329 ms

RaspberryPi4にNetBSD/aarch64を試す (2)

昨日動かねーって書いたら早速情報を頂きました。ありがとうございます。

ということで rpi4-acpi.tgzをFATパーティション(うちの環境だと/dev/sd1e)に展開。てっきり中身はカーネルイメージかと思っていたんだけど、中身はこれだけだった。

  • overlays/miniuart-bt.btbo
  • RPI_EFI.fd
  • bcm2711-rpi-4-b.dtb
  • config.txt

これカーネルイメージだったらuserlandも同じバージョンのものを用意しないとなー、と思っていたんだけども、どうやらそのままで良さそうなので昨日ダウンロードしてきた9.99.46の上にぶちまけて電源投入。…あれカーネル起動までの挙動が違う?と思ったらUEFIかなこれ? そして無事にmicroSDを/dev/ld0で認識(ついでにUSBも)してログインまで到達。わーい。

>> NetBSD/evbarm efiboot (arm64), Revision 1.13 (Mon Feb 10 03:23:29 UTC 2020)
Press return to boot now, any other key for boot prompt
booting netbsd - starting in 0 seconds.
6200256+2685688+3049488+1514744 [587306+732024+515925]=0x101b010
[   1.0000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
[   1.0000000]     2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
[   1.0000000]     2018, 2019, 2020 The NetBSD Foundation, Inc.  All rights reserved.
[   1.0000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[   1.0000000]     The Regents of the University of California.  All rights reserved.

[   1.0000000] NetBSD 9.99.46 (GENERIC64) #0: Mon Feb 10 03:23:29 UTC 2020
[   1.0000000]  mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/evbarm/compile/GENERIC64
[   1.0000000] total memory = 3932 MB
[   1.0000000] avail memory = 3799 MB
[   1.0000000] pool redzone disabled for 'buf4k'
[   1.0000000] pool redzone disabled for 'buf64k'
[   1.0000000] armfdt0 (root)
[   1.0000000] simplebus0 at armfdt0: Sony UK Raspberry Pi 4 Model B
[   1.0000000] simplebus1 at simplebus0
[   1.0000000] acpifdt0 at simplebus0
[   1.0000000] acpifdt0: using EFI runtime services for RTC
[   1.0000000] ACPI: RSDP 0x0000000037320014 000024 (v02 MCRSFT)
[   1.0000000] ACPI: XSDT 0x00000000373100E8 00005C (v01 MCRSFT RPI4EDK2 02000820      01000013)
[   1.0000000] ACPI: FACP 0x0000000037260000 00010C (v05 MCRSFT RPI4EDK2 02000820 RPI4 00000097)
[   1.0000000] ACPI: DSDT 0x0000000037210000 001788 (v05 MSFT   EDK2     00000002 INTL 20181213)
[   1.0000000] ACPI: CSRT 0x0000000037280000 000169 (v00 MCRSFT RPI4EDK2 02000820 RPI4 00000097)
[   1.0000000] ACPI: DBG2 0x0000000037270000 00005C (v00 MCRSFT RPI4EDK2 02000820 RPI4 00000097)
[   1.0000000] ACPI: GTDT 0x0000000037250000 000060 (v02 MCRSFT RPI4EDK2 02000820 RPI4 00000097)
[   1.0000000] ACPI: APIC 0x0000000037240000 000174 (v03 MCRSFT RPI4EDK2 02000820 RPI4 00000097)
[   1.0000000] ACPI: MCFG 0x0000000037230000 00003C (v01 MCRSFT RPI4EDK2 02000820 RPI4 00000097)
[   1.0000000] ACPI: SPCR 0x0000000037220000 000050 (v02 MCRSFT RPI4EDK2 02000820 RPI4 00000097)
[   1.0000000] ACPI: 1 ACPI AML tables successfully acquired and loaded
[   1.0000000] acpi0 at acpifdt0: Intel ACPICA 20191213
[   1.0000000] cpu0 at acpi0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu0: package 0, core 0, smt 0
[   1.0000000] cpu0: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.0000000] cpu0: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.0000000] cpu0: Dcache line 64, Icache line 64
[   1.0000000] cpu0: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.0000000] cpu0: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.0000000] cpu0: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unified cache
[   1.0000000] cpu0: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.0000000] cpu0: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[   1.0000000] cpu1 at acpi0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu1: package 0, core 1, smt 0
[   1.0000000] cpu2 at acpi0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu2: package 0, core 2, smt 0
[   1.0000000] cpu3 at acpi0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu3: package 0, core 3, smt 0
[   1.0000000] gic0 at acpi0: GIC
[   1.0000000] armgic0 at gic0: Generic Interrupt Controller, 256 sources (247 valid)
[   1.0000000] armgic0: 16 Priorities, 224 SPIs, 7 PPIs, 16 SGIs
[   1.0000000] gtmr0 at acpi0: irq 27
[   1.0000000] armgtmr0 at gtmr0: Generic Timer (54000 kHz, virtual)
[   1.0000070] PEPD (BCM2854) at acpi0 not configured
[   1.0000070] xhci0 at acpi0 (XHC0, 11063483-0): mem 0x600000000-0x600000fff irq 175
[   1.0000070] usb0 at xhci0: USB revision 3.0
[   1.0000070] usb1 at xhci0: USB revision 2.0
[   1.0000070] USB0 (BCM2848) at acpi0 not configured
[   1.0000070] bcmmbox0 at acpi0 (RPIQ, BCM2849-0): mem 0xfe00b880-0xfe00b8a3 irq 65
[   1.0000070] vcmbox0 at bcmmbox0
[   1.0000070] VCIQ (BCM2835) at acpi0 not configured
[   1.0000070] VCSM (BCM2856) at acpi0 not configured
[   1.0000070] GPI0 (BCM2845) at acpi0 not configured
[   1.0000070] I2C1 (BCM2841) at acpi0 not configured
[   1.0000070] I2C2 (BCM2841) at acpi0 not configured
[   1.0000070] SPI0 (BCM2838) at acpi0 not configured
[   1.0000070] SPI1 (BCM2839) at acpi0 not configured
[   1.0000070] plcom0 at acpi0 (URT0, BCM2837-4): mem 0xfe201000-0xfe201fff irq 153
[   1.0000070] plcom0: txfifo disabled
[   1.0000070] plcom0: console
[   1.0000070] URTM (BCM2836) at acpi0 not configured
[   1.0000070] BTH0 (BCM2EA6) at acpi0 not configured
[   1.0000070] RHPX (MSFT8000) at acpi0 not configured
[   1.0000070] sdhc0 at acpi0 (SDC1, BCM2847-0): mem 0xfe300000-0xfe3000ff irq 158
[   1.0000070] SDC2 (BCM2855) at acpi0 not configured
[   1.0000070] sdhc0: SDHC 3.0, rev 153, PIO, 250000 kHz, HS 3.3V, re-tuning mode 1, 1024 byte blocks
[   1.0000070] sdmmc0 at sdhc0 slot 0
[   1.0000070] cpu1: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.0000070] cpu1: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.1425640] cpu1: Dcache line 64, Icache line 64
[   1.1425640] cpu1: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.1525598] cpu1: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.1625609] cpu1: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unified cache
[   1.1725606] cpu1: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.1725606] cpu1: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[   1.1925616] cpu3: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.1925616] cpu3: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.2025633] cpu3: Dcache line 64, Icache line 64
[   1.2025633] cpu3: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.2125629] cpu3: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.2225636] cpu3: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unified cache
[   1.2325636] cpu3: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.2325636] cpu3: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[   1.2525648] cpu2: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.2525648] cpu2: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.2625663] cpu2: Dcache line 64, Icache line 64
[   1.2625663] cpu2: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.2725660] cpu2: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.2825670] cpu2: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unified cache
[   1.2925670] cpu2: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.3025680] cpu2: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[   1.3125681] cpu0: PMU interrupting on irq 48
[   1.3125681] cpu1: PMU interrupting on irq 49
[   1.3125681] cpu2: PMU interrupting on irq 50
[   1.3125681] cpu3: PMU interrupting on irq 51
[   1.3125681] uhub0 at usb0: NetBSD (0000) xHCI root hub (0000), class 9/0, rev 3.00/1.00, addr 0
[   1.3398059] uhub1 at usb1: NetBSD (0000) xHCI root hub (0000), class 9/0, rev 2.00/1.00, addr 0
[   1.4898097] sdmmc0: SD card status: 4-bit, C10, U1, A1
[   1.4998097] ld0 at sdmmc0: <0x02:0x544d:SA32G:0x50:0x28c11dbe:0x12c>
[   1.4998097] ld0: 29544 MB, 7503 cyl, 128 head, 63 sec, 512 bytes/sect x 60506112 sectors
[   1.5163645] ld0: 4-bit width, High-Speed/SDR25, 50.000 MHz
[   2.9711459] uhub2 at uhub1 port 1: vendor 2109 (0x2109) USB2.0 Hub (0x3431), class 9/0, rev 2.10/4.20, addr 1
[   2.9826380] uhub2: single transaction translator
[   3.3211594] boot device: ld0
[   3.3211594] root on ld0a dumps on ld0b
[   3.3311597] root file system type: ffs
[   3.3411609] kern.module.path=/stand/evbarm/9.99.46/modules
[   3.3411609] WARNING: clock lost 40 days
[   3.3531083] WARNING: using filesystem time
[   3.3571838] WARNING: CHECK AND RESET THE DATE!
Mon Feb 10 07:48:25 UTC 2020
Starting root file system check:
/dev/rld0a: file system is clean; not checking
fdisk: Cannot determine the number of heads
Not resizing /: already correct size
Starting file system checks:
/dev/rld0e: 124 files, 54282 free (54282 clusters)
random_seed: /var/db/entropy-file: Not present
Setting tty flags.
Setting sysctl variables:
ddb.onpanic: 1 -> 0
Starting network.
Hostname: arm64
IPv6 mode: host
Configuring network interfaces:.
Adding interface aliases:.
Waiting for DAD to complete for statically configured addresses...
Starting dhcpcd.
no valid interfaces found
Starting mdnsd.
mDNSResponder: mDNSResponder (Engineering Build) starting
mDNSResponder: Unable to parse DNS server list. Unicast DNS-SD unavailable
mDNSResponder: mDNSPlatformSourceAddrForDest: connect 1.1.1.1 failed errno 49 (Can't assign requested address)
Building databases: dev, utmp, utmpx, services.
Starting syslogd.
Feb 10 07:48:30 arm64 mDNSResponder: mDNSPlatformSendUDP got error 49 (Can't assign requested address) sending packet to 224.0.0.251 on interface 127.0.0.11
Mounting all file systems...
Clearing temporary files.
Updating fontconfig cache: done.
Checking quotas: done.
Setting securelevel: kern.securelevel: 0 -> 1
Starting virecover.
Starting devpubd.
Starting local daemons:.
Updating motd.
Starting ntpd.
ssh-keygen: 1024 SHA256:JfZlqlKMsSSUEZM1LMQ3TWRWOfUqURaueAhu/FT0TGA root@arm64 (DSA)
ssh-keygen: 521 SHA256:td5L5p5hgp4kuBi4Oid7PoCf7WetoTCqxDU2RXr4rw8 root@arm64 (ECDSA)
ssh-keygen: 256 SHA256:/1qwo0nQT+1hbHa8QEC4VzvnqOWk2RiHIdPVOHwX/sk root@arm64 (ED25519)
Feb 10 07:49:00 arm64 syslogd[183]: last message repeated 4 times
ssh-keygen: 3072 SHA256:PA1KOUFEmnjGYwK4kM+JE/L4B21ZbMToeRa8c23A5es root@arm64 (RSA)
Starting sshd.
postfix: rebuilding /etc/mail/aliases (missing /etc/mail/aliases.db)
Starting postfix.
Starting inetd.
Starting cron.
Mon Feb 10 07:49:08 UTC 2020

NetBSD/evbarm (arm64) (constty)

login:

RaspberryPi4にNetBSD/aarch64を試す

  1. http://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/evbarm-aarch64/binary/gzimg/arm64.img.gz をダウンロード
  2. gzcat arm64.img.gz | sudo dd of=/dev/sd1d bs=32kmicroSDカードに書き込み
  3. microSDカードを挿す
  4. 6、8、10番ピンにUARTのGND、TX、RXを繋ぐ(CubieBoard2で使っているやつを拝借)
  5. USBコネクタを挿して電源投入

んで流れた起動メッセージがこれ。カーネルを読み込んで起動しているところまでは良いけども、どうもmicroSDである/dev/ld0が見えないらしい。

[   1.0000000] NetBSD/evbarm (fdt) booting ...
[   1.0000000] pool redzone disabled for 'kmem-04096'
[   1.0000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
[   1.0000000]     2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
[   1.0000000]     2018, 2019, 2020 The NetBSD Foundation, Inc.  All rights reserved.
[   1.0000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[   1.0000000]     The Regents of the University of California.  All rights reserved.

[   1.0000000] NetBSD 9.99.46 (GENERIC64) #0: Mon Feb 10 03:23:29 UTC 2020
[   1.0000000]  mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/evbarm/compile/GENERIC64
[   1.0000000] total memory = 3941 MB
[   1.0000000] avail memory = 3807 MB
[   1.0000000] pool redzone disabled for 'buf4k'
[   1.0000000] pool redzone disabled for 'buf64k'
[   1.0000000] armfdt0 (root)
[   1.0000000] simplebus0 at armfdt0: Raspberry Pi 4 Model B Rev 1.2
[   1.0000000] simplebus1 at simplebus0
[   1.0000000] simplebus2 at simplebus0
[   1.0000000] cpus0 at simplebus0
[   1.0000000] simplebus3 at simplebus0
[   1.0000000] cpu0 at cpus0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu0: package 0, core 0, smt 0
[   1.0000000] cpu0: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.0000000] cpu0: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.0000000] cpu0: Dcache line 64, Icache line 64
[   1.0000000] cpu0: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.0000000] cpu0: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.0000000] cpu0: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unifiede
[   1.0000000] cpu0: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.0000000] cpu0: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32xd
[   1.0000000] cpu1 at cpus0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu1: package 0, core 1, smt 0
[   1.0000000] cpu2 at cpus0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu2: package 0, core 2, smt 0
[   1.0000000] cpu3 at cpus0: Cortex-A72 r0p3 (Cortex V8-A core)
[   1.0000000] cpu3: package 0, core 3, smt 0
[   1.0000000] simplebus4 at simplebus1
[   1.0000000] gic0 at simplebus1: GIC
[   1.0000000] armgic0 at gic0: Generic Interrupt Controller, 256 sources (247 valid)
[   1.0000000] armgic0: 16 Priorities, 224 SPIs, 7 PPIs, 16 SGIs
[   1.0000000] fclock0 at simplebus2: 54000000 Hz fixed clock (osc)
[   1.0000000] bcmcprman0 at simplebus1: BCM283x Clock Controller
[   1.0000000] bcmaux0 at simplebus1
[   1.0000000] fclock1 at simplebus2: 480000000 Hz fixed clock (otg)
[   1.0000000] bcmicu0 at simplebus1: Multiprocessor
[   1.0000000] gtmr0 at simplebus0: Generic Timer
[   1.0000000] gtmr0: interrupting on GIC irq 27
[   1.0000000] armgtmr0 at gtmr0: Generic Timer (54000 kHz, virtual)
[   1.0000030] gregulator0 at simplebus0: vdd-sd-io
[   1.0000030] gregulator0: cannot get pin 0
[   1.0000030] plcom0 at simplebus1: ARM PL011 UART
[   1.0000030] plcom0: txfifo disabled
[   1.0000030] plcom0: interrupting on GIC irq 153
[   1.0000030] com0 at simplebus1: BCM AUX UART, working fifo
[   1.0000030] com0: console
[   1.0000030] com0: interrupting on GIC irq 125
[   1.0000030] mmcpwrseq0 at simplebus0: couldn't get reset GPIOs
[   1.0000030] /soc/dsi@7e209000 at simplebus1 not configured
[   1.0000030] bcmgpio0 at simplebus1: GPIO controller 2838
[   1.0000030] bcmgpio0: pins 0..31 interrupting on GIC irq 145
[   1.0000030] bcmgpio0: pins 32..58 interrupting on GIC irq 146
[   1.0000030] gpio0 at bcmgpio0: 58 pins
[   1.0000030] /soc/firmware/gpio at simplebus4 not configured
[   1.0000030] /soc/power at simplebus1 not configured
[   1.0000030] /phy at simplebus0 not configured
[   1.0000030] bcmmbox0 at simplebus1: VC mailbox
[   1.0000030] bcmmbox0: interrupting on GIC irq 65
[   1.0000030] vcmbox0 at bcmmbox0
[   1.0000030] /scb/ethernet@7d580000 at simplebus3 not configured
[   1.0000030] /soc/timer@7e003000 at simplebus1 not configured
[   1.0000030] /soc/txp@7e004000 at simplebus1 not configured
[   1.0000030] bsciic0 at simplebus1: Broadcom Serial Controller
[   1.0000030] bsciic0: interrupting on GIC irq 149
[   1.0000030] iic0 at bsciic0: I2C bus
[   1.0000030] sdhc0 at simplebus1: SDHC controller
[   1.0000030] sdhc0: interrupting on GIC irq 158
[   1.0000030] bsciic1 at simplebus1: Broadcom Serial Controller
[   1.0000030] bsciic1: interrupting on GIC irq 149
[   1.0000030] iic1 at bsciic1: I2C bus
[   1.0000030] /soc/vec@7e806000 at simplebus1 not configured
[   1.0000030] dwctwo0 at simplebus1: USB controller
[   1.0000030] dwctwo0: interrupting on GIC irq 105
[   1.0000030] bcmdmac0 at simplebus1: DMA0 DMA2 DMA4 DMA5 DMA6 DMA7
[   1.0000030] bcmpmwdog0 at simplebus1: Power management, Reset and Watchdog controller
[   1.0000030] /soc/pwm@7e20c800 at simplebus1 not configured
[   1.0000030] /soc/emmc2@7e340000 at simplebus1 not configured
[   1.0000030] /soc/mailbox@7e00b840 at simplebus1 not configured
[   1.0000030] /chosen at simplebus0 not configured
[   1.0000030] armpmu0 at simplebus0: Performance Monitor Unit
[   1.0000030] gpioleds0 at simplebus0: ACT
[   1.0000030] cpu2: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.0000030] cpu2: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.2828385] cpu2: Dcache line 64, Icache line 64
[   1.2828385] cpu2: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.2928308] cpu2: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.3028318] cpu2: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unifiede
[   1.3128316] cpu2: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.3128316] cpu2: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32xd
[   1.3328329] cpu1: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.3328329] cpu1: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.3428347] cpu1: Dcache line 64, Icache line 64
[   1.3528339] cpu1: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.3528339] cpu1: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.3628348] cpu1: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unifiede
[   1.3728348] cpu1: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.3828371] cpu1: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32xd
[   1.3928360] cpu3: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[   1.3928360] cpu3: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[   1.4028375] cpu3: Dcache line 64, Icache line 64
[   1.4128372] cpu3: L1 48KB/64B 3-way read-allocate PIPT Instruction cache
[   1.4128372] cpu3: L1 32KB/64B 2-way write-back read-allocate write-allocate PIPT Data cache
[   1.4228382] cpu3: L2 1024KB/64B 16-way write-back read-allocate write-allocate PIPT Unifiede
[   1.4328382] cpu3: revID=0x0, PMCv3, 4k table, 64k table, 16bit ASID
[   1.4428392] cpu3: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32xd
[   1.4528393] sdhc0: SDHC 3.0, rev 153, PIO, 250000 kHz, HS 3.3V, re-tuning mode 1, 1024 bytes
[   1.4628412] sdmmc0 at sdhc0 slot 0
[   1.4628412] usb0 at dwctwo0: USB revision 2.0
[   1.4828431] armpmu0: interrupting on GIC irq 48
[   1.4828431] armpmu0: interrupting on GIC irq 49
[   1.4928429] armpmu0: interrupting on GIC irq 50
[   1.5028433] armpmu0: interrupting on GIC irq 51
[   1.5128434] uhub0 at usb0: NetBSD (0000) DWC2 root hub (0000), class 9/0, rev 2.00/1.00, ad1
[   1.6428481] sdmmc0: 4-bit width, 50.000 MHz
[   1.6428481] sdmmc0: SDIO function
[   1.6528478] bwfm0 at sdmmc0 function 1
[   1.6628529] (manufacturer 0x2d0, product 0xa9a6) at sdmmc0 function 2 not configured
[   1.6628529] (manufacturer 0x2d0, product 0xa9a6, standard function interface code 0x2) at sd
[   2.2328699] WARNING: 2 errors while detecting hardware; check system log.
[   2.2439641] boot device: <unknown>
[   2.2439641] unknown device major 0xffffffffffffffff
[   2.2439641] root device:

NYC*BUG dmesgd を見る限りだと去年の9月と12月で動作報告があるので、なにかしら設定を間違えたか単にこの後で何かバグったのか。

Date From (nickname) *BSD (derived) Description
2019-09-01 mlelstv NetBSD RPI4 4GB
2019-12-30 jmcneill NetBSD NetBSD/evbarm 9.99.31 on Raspberry Pi 4 Model B (4GB, ACPI)

dmesgだけ見るとリビジョン表記が全員バラバラなのは気付いたけど流石にそこまで影響しないよなぁ…おそらく技適対応やUSBの給電回りの修正で1.2になったんだと思うし。

Date
2019-09-01 simplebus0 at armfdt0: Raspberry Pi 4 Model B Rev 1.1
2019-12-30 simplebus0 at armfdt0: Sony UK Raspberry Pi 4 Model B
今回 simplebus0 at armfdt0: Raspberry Pi 4 Model B Rev 1.2

パンクしてた

作業に飽きたのでちょっとBromptonでひとっぱしり出掛けようかと思ったら後輪がパンクしてたらしく空気がすっからかんになってた。普通の自転車ならともかくタイヤが小さいしギアやら何やらがあって作業しにくいので「じゃあいっそ後輪引き抜くかー」と思いつきで行動。

 

f:id:steleto:20200119153059j:plain
まず写真左の変速レバーからのワイヤとチェーン部分を繋いでいる棒状の部品を回して外す。外れたら右のチェーン部分も回して引き抜く。

 

f:id:steleto:20200119153208j:plain

ナットを外す。ワッシャーも一緒に取れるので無くさないよう注意。

 

f:id:steleto:20200119153330j:plain

チェーンテンショナーをうまいこと引っぱって外す。テンショナーはそこそこ強めのバネがあるので気をつける。

 

f:id:steleto:20200119153416j:plain

ナットを緩め、奥にある爪のパーツを手前に引く(完全に外さなくても良い)。両側とも爪を外したら車輪を引き抜く。ちなみに作業中は気付かなかったけども、この爪の部品はどうも上下があるらしく「TOP」と刻印されている側を上にしないといけない。

 

f:id:steleto:20200119153959j:plain

後輪が外せたら空気を入れるところのネジを外せばチューブだけ取れる。

 

チューブが取れたら後は空気が漏れているところを探してパッチを当てるだけ。大きめの穴なら音で分かるし、分からなければ水桶に突っ込めば気泡でわかる。さて今回は…あ、あった。

 

f:id:steleto:20200119154550j:plain

そ こ か よ 。

流石にここはパッチ当てられないから交換するしかないな…

mksandboxで/etcをコピーできなかった問題

前回こんなこと言ってたけど、理由がわかった。

なお何故かsbox/etcの作成でしばらく止まったと思ったらエラーが盛大に出る。メッセージを見るにどうもディレクトリがループしているようだが何のことかはわからん。このPC固有の問題?

mksandbox環境でpkgsrcをビルドする - steletoのブログ

結論から言ってしまうと、「mksandboxで指定する作成先ディレクトリは 絶対パス でなければならない 」というもの。

mksandboxでは/etcをコピーするとき、次の行を実行する。

*)      (cd /etc; $paxprog -rwpe . $sandbox/etc) ;;

このとき作成先ディレクトリ($sandbox)が前回のように相対パス "sbox" のみ与えられた場合、paxのコピー元とコピー先はこう解釈される。

  • コピー元: . (= /etc)
  • コピー先: sbox/etc (= /etc/sbox/etc)

元々意図していたコピー先は /home/oreore/sbox/etc だったつもりであっても、実際は全然関係ない /etc/sbox/etc になる。それどころかコピー先がコピー元に含まれるということで、結果 /etc/sbox/etc/sbox/etc/sbox/... と無限ループになる、というオチ。しかもやらかした時点で /etc の下に無限ループしたファイルが作成されてしまうので、このあと cp で手動コピーさせてもパスが深過ぎてコピーできないエラーが発生する、という二段オチまである。

ということで、冒頭で伸べた通り作成先ディレクトリを絶対パス "/home/oreore/sbox" とすると、次のようにエラーも出ず一瞬で作成される。

$ sudo mksandbox --pkgsrc=/home/oreore/pkgsrc --src=/home/oreore/work/netbsd/src --without-xsrc /home/oreore/sbox
WARNING: LOCALPATCHES directory does not exist - ignoring
Copying the kernel
Checking package hierarchy in /usr/pkg and package database in /var/db/pkg exist
Make and populate /home/oreore/sbox/dev
Make and populate /home/oreore/sbox/etc
Make empty dirs upon which to mount the null mounts
Making /tmp in /home/oreore/sbox
Making /var/games in /home/oreore/sbox
Making /var/run in /home/oreore/sbox
Making /var/log in /home/oreore/sbox
Making /var/spool/lock in /home/oreore/sbox
Making /var/run/utmp in /home/oreore/sbox
Making /var/run/utmpx in /home/oreore/sbox
Making /var/log/wtmp in /home/oreore/sbox
Making /var/log/wtmpx in /home/oreore/sbox
Making /var/log/lastlog in /home/oreore/sbox
Making /var/log/lastlogx in /home/oreore/sbox
Mount /home/oreore/work/netbsd/src from /home/oreore/sbox
Mount /home/oreore/pkgsrc from /home/oreore/sbox
Mounting /home/oreore/pkgsrc/packages and /home/oreore/pkgsrc/distfiles from /home/oreore/sbox
Sandbox creation is now complete

mksandbox環境でpkgsrcをビルドする

以前はcurrentを更新した後はpkgを一旦全部消してスクリプトで必要なものをビルドするという運用をしていたけど、それだと数日マシンが使えないのでpkgtools/mksandboxで必要なパッケージを作成してしまおうという試み。

手元の環境はこんな感じ。見てのとおりpkgsrcやsrcを/home配下に構築していたので、ビルドも一般ユーザー権限で回せるように少々こねくり回す羽目になったけど、たぶんこれroot権限でブン回すんなら不要そうな気がする。そもそもmksandbox自体がroot前提なのかも。

  • pkgsrc は /home/oreore/pkgsrc
  • src は /home/oreore/work/netbsd/src
  • xsrc はナシ
  • sandbox作成先ディレクトリは /home/oreore/sbox

まずはmksandboxでsboxディレクトリを作成する。なお何故かsbox/etcの作成でしばらく止まったと思ったらエラーが盛大に出る。メッセージを見るにどうもディレクトリがループしているようだが何のことかはわからん。このPC固有の問題? (追記)作成先ディレクトリの指定の仕方に問題があった。詳細は mksandboxで/etcをコピーできなかった問題 - steletoのブログ を参照。(追記ここまで)

$ sudo mksandbox --pkgsrc=/home/oreore/pkgsrc --src=/home/oreore/work/netbsd/src --without-xsrc sbox

WARNING: LOCALPATCHES directory does not exist - ignoring
Copying the kernel
Checking package hierarchy in /usr/pkg and package database in /var/db/pkg exist
Make and populate sbox/dev
Make and populate sbox/etc
pax: Cannot create sbox/etc/./sbox/etc/sbox/etc/(以下延々とsbox/etc/を繰り返す)/sbox/etc/hoge (File name too long)
(...略...)
Make empty dirs upon which to mount the null mounts
Making /tmp in sbox
Making /var/games in sbox
(...略...)
Mount /home/oreore/pkgsrc from sbox
Mounting /home/oreore/pkgsrc/packages and /home/oreore/pkgsrc/distfiles from sbox
Sandbox creation is now complete

ということでよくわからんエラーのせいでsbox/etcディレクトリ下がほぼ空っぽなので、cpで全部コピー。やっぱり同じようなエラーメッセージは出るけどコピーできてるから気にしない。

$ sudo cp -rf /etc/* sbox/etc/

一般ユーザーでビルドさせるとinstallでsu → /rootが無いのでエラー、というオチになるようなので /root を作成。

$ sudo mkdir sbox/root

自前のpkgsrcビルドスクリプトが /home/oreore/work にあるので、sandbox環境から見えるようにnullfsでmount。

$ mkdir /home/oreore/sbox/home/oreore/work
$ sudo mount -t null /home/oreore/work /home/star/sbox/home/oreore/work

これで作成したsandbox環境のmount/umountは/home/oreore/sbox/sandboxに引数でmount / umount を渡す。mksandboxで作成と同時にmountされるので特に理由がなければ気にしなくて良い。

$ sudo sbox/sandbox mount 
$ sudo sbox/sandbox umount

sandbox環境に入るには引数にchrootを渡す。chrootした時点ではrootになっているのでoreoreにスイッチ。

$ sudo sbox/sandbox chroot
# su oreore

後は普通にビルド。

なお、ほとんどnullfsで構成されたchrootとはいえやっぱりそれなりにディスク容量は消費する。というか足りないのでビルドのたびにmake clean-dependsしたり distfiles を消したり packages をサーバーにscpで移動させたりと涙ぐましいことをせざるを得なくなってたりする。

はてなブログへ移行しました

はてなダイアリーが終了するということでこちらへ移行、という報告がてら投稿のテスト。 

d.hatena.ne.jp

移行によってURLも変わったけどリダイレクトされるので従来のもそのまま使える模様。ありがたやありがたや。