On Mon, May 21, 2018 at 04:22:07PM +0200, Jaromír Dole?ek wrote: > The very basic test is to do some moral equivalent of "dd if=foo > of=/dev/null bs=64k" with some reasonably sized foo file, with default > setting twice (once to test reading off the disk, second off cache), > then set ubc_direct to 1 via DDB, remount the filesystem and re-run. > Also would be good to check that the transferred contents are correct, > e.g. via sha1. > > If that doesn't trigger any panic, further test would be to run some > non-trivial build with ubc_direct set to 1.
Here are timing results: [/tmp] root@gemini # /usr/bin/time dd if=/netbsd of=/dev/zero bs=64k 213+1 records in 213+1 records out 14005088 bytes transferred in 0.735 secs (19054541 bytes/sec) 0.75 real 0.00 user 0.17 sys [/tmp] root@gemini # /usr/bin/time dd if=/netbsd of=/dev/zero bs=64k 213+1 records in 213+1 records out 14005088 bytes transferred in 0.120 secs (116709066 bytes/sec) 0.12 real 0.00 user 0.12 sys and again with ubc_direct=1 (rebooted with -d, changed it in ddb and continued) [/tmp] root@gemini # /usr/bin/time dd if=/netbsd of=/dev/zero bs=64k 213+1 records in 213+1 records out 14005088 bytes transferred in 0.741 secs (18900253 bytes/sec) 0.76 real 0.00 user 0.13 sys [/tmp] root@gemini # /usr/bin/time dd if=/netbsd of=/dev/zero bs=64k 213+1 records in 213+1 records out 14005088 bytes transferred in 0.088 secs (159148727 bytes/sec) 0.09 real 0.00 user 0.09 sys Unfortunatley with ubc_direct enabled, it panics quickly: [ 399.9154127] System Machine Check (660): Rev 0x1, Code 0x202, Flags 0x0 [ 399.9154127] System Machine Check (660): Rev 0x1, Code 0x202, Flags 0x0 [ 399.9154127] Software Error Summary Flags = 0x0000000000000001 [ 399.9154127] Software Error Summary Flags = 0x0000000000000001 [ 399.9154127] CPU Device Interrupt Requests = 0x4000000000000000 [ 399.9154127] CPU Device Interrupt Requests = 0x4000000000000000 [ 399.9154127] DIR = 0x4000000000000000<Pchip 0 error> [ 399.9154127] DIR = 0x4000000000000000<Pchip 0 error> [ 399.9154127] Cchip Miscellaneous Register = 0x0000000120000000 [ 399.9154127] Pchip 0 Error Register = 0x006038d678700041 [ 399.9154127] Cchip Miscellaneous Register = 0x0000000120000001 [ 399.9154127] error = 0x41<Error lost,Target abort> [ 399.9154127] Pchip 0 Error Register = 0x006038d678700041 [ 399.9154127] address = 0x38d67870, 0x0<No DAC> [ 399.9154127] error = 0x41<Error lost,Target abort> [ 399.9154127] command = 0x6<PCI memory read> [ 399.9154127] address = 0x38d67870, 0x0<No DAC> [ 399.9154127] Pchip 1 Error Register = 0x0000000000000000 [ 399.9154127] command = 0x6<PCI memory read> [ 399.9154127] Pchip 1 Error Register = 0x0000000000000000 [ 399.9154127] unexpected machine check: [ 399.9154127] unexpected machine check: [ 399.9154127] mces = 0x1 [ 399.9154127] vector = 0x660 [ 399.9154127] mces = 0x1 [ 399.9154127] param = 0xfffffc0000006080 [ 399.9154127] vector = 0x660 [ 399.9154127] param = 0xfffffc0000006480 [ 399.9154127] pc = 0xfffffc0001109fe0 [ 399.9154127] pc = 0xfffffc00010fb0fc [ 399.9154127] ra = 0xfffffc00010fb120 [ 399.9154127] code = 0x100000202 [ 399.9154127] ra = 0xfffffc00010fb0fc [ 399.9154127] curlwp = 0xfffffc003fe3f980 [ 399.9154127] code = 0x100000202 [ 399.9154127] pid = 0.2, comm = system [ 399.9154127] curlwp = 0xfffffc003fda0020 [ 399.9154127] pid = 0.15, comm = system [ 399.9154127] panic: 399.9154127] machine check [ 399.9154127] cpu0: Begin traceback... [ 399.9154127] alpha trace requires known PC =eject= [ 399.9154127] cpu0: End traceback... [ 399.9154127] WARNING: Unable to halt secondary CPUs (0x3) Martin