> The reason you are busy computing SHA1 hashes is you are using > /dev/urandom. The implementation of drv/random uses > SHA1 for mixing, > actually strictly speaking it is the swrand provider that does that part.
Ahh, ok. So, instead of using dd reading from /dev/urandom all the time, I've now used this quick C program to write one /dev/urandom block over and over to the gzip compressed zpool: ================================= #include <stdio.h> #include <stdlib.h> #include <fcntl.h> int main(int argc, char **argv) { int fd; char buf[128*1024]; fd = open("/dev/urandom", O_RDONLY); if (fd < 0) { perror("open /dev/urandom"); exit(1); } if (read(fd, buf, sizeof(buf)) != sizeof(buf)) { perror("fill buf from /dev/urandom"); exit(1); } close(fd); fd = open(argv[1], O_WRONLY|O_CREAT, 0666); if (fd < 0) { perror(argv[1]); exit(1); } for (;;) { if (write(fd, buf, sizeof(buf)) != sizeof(buf)) { break; } } close(fd); exit(0); } ================================= Avoiding the reads from /dev/urandom makes the effect even more noticeable, the machine now "freezes" for 10+ seconds. CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 0 0 3109 3616 316 196 5 17 48 45 245 0 85 0 15 1 0 0 3127 3797 592 217 4 17 63 46 176 0 84 0 15 CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 0 0 3051 3529 277 201 2 14 25 48 216 0 83 0 17 1 0 0 3065 3739 606 195 2 14 37 47 153 0 82 0 17 CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 0 0 3011 3538 316 242 3 26 16 52 202 0 81 0 19 1 0 0 3019 3698 578 269 4 25 23 56 309 0 83 0 17 # lockstat -kIW -D 20 sleep 30 Profiling interrupt: 6080 events in 31.341 seconds (194 events/sec) Count indv cuml rcnt nsec Hottest CPU+PIL Caller ------------------------------------------------------------------------------- 2068 34% 34% 0.00 1767 cpu[0] deflate_slow 1506 25% 59% 0.00 1721 cpu[1] longest_match 1017 17% 76% 0.00 1833 cpu[1] mach_cpu_idle 454 7% 83% 0.00 1539 cpu[0] fill_window 215 4% 87% 0.00 1788 cpu[1] pqdownheap 152 2% 89% 0.00 1691 cpu[0] copy_block 89 1% 90% 0.00 1839 cpu[1] z_adler32 77 1% 92% 0.00 36067 cpu[1] do_splx 64 1% 93% 0.00 2090 cpu[0] bzero 62 1% 94% 0.00 2082 cpu[0] do_copy_fault_nta 48 1% 95% 0.00 1976 cpu[0] bcopy 41 1% 95% 0.00 62913 cpu[0] mutex_enter 27 0% 96% 0.00 1862 cpu[1] build_tree 19 0% 96% 0.00 1771 cpu[1] gen_bitlen 17 0% 96% 0.00 1744 cpu[0] bi_reverse 15 0% 97% 0.00 1783 cpu[0] page_create_va 15 0% 97% 0.00 1406 cpu[1] fletcher_2_native 14 0% 97% 0.00 1778 cpu[1] gen_codes 11 0% 97% 0.00 912 cpu[1]+6 ddi_mem_put8 5 0% 97% 0.00 3854 cpu[1] fsflush_do_pages ------------------------------------------------------------------------------- It seems the same problem can be observed with "lzjb" compression, but the pauses with lzjb are much shorter and the kernel consumes less system cpu time with "lzjb" (which is expected, I think). This message posted from opensolaris.org _______________________________________________ zfs-discuss mailing list zfs-discuss@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/zfs-discuss