In case anyone wants to know where to look to try and help improve the throughput (yeah I know it's very early on but the code is still quite clean and the opportunities only get rarer from here on in) here's a bprof output of the profile log. The net_srv was run for 100 rx datagrams, mostly pings from another machine. david $ bprof profile_log.3063 /boot/home/openbeos/net_kit/source/server/modules/icmp: 184 970 us 545 us - in_cksum /boot/home/openbeos/net_kit/source/server/modules/udp: 7 2440 us 2440 us - dump_udp 7 36 us 2742 us - udp_input 1 1 us 1 us - udp_init /boot/home/openbeos/net_kit/source/server/modules/ipv4: 191 511 us 511 us - in_cksum 92 333 us 16639 us - ipv4_output 99 332 us 22334 us - ipv4_input 1 4 us 112 us - ipv4_dev_init 1 2 us 2 us - ipv4_init /boot/home/openbeos/net_kit/source/server/modules/ethernet: 2 15771 us 15786 us - open_device 93 13558 us 15799 us - ether_output 1 11313 us 27111 us - find_devices 100 807 us 24494 us - ether_input 1 202 us 361 us - ether_dev_init 1 138 us 138 us - arp_callback 100 80 us 80 us - convert_proto 1 5 us 27119 us - ether_init /boot/home/openbeos/net_kit/source/server/modules/arp: 92 834 us 1986 us - arp_lookup 94 270 us 286 us - find_entry 93 234 us 710 us - nhash_get 1 60 us 145 us - insert_cache_entry 1 25 us 319 us - arp_init 1 25 us 74327616 us - arpq_run 1 17 us 345 us - arp_input 1 14 us 181 us - arp_send_request 1 7 us 98 us - nhash_make 1 2 us 53 us - nhash_set /boot/beos/system/lib/libroot.so: /boot/beos/system/lib/libnet.so: /boot/home/openbeos/net_kit/source/server/./net_srv: 1 94866583 us 94917109 us - main 1 94837821 us 94867457 us - if_thread 1 93854672 us 0 us - tx_thread 1 74327582 us 74327582 us - net_remove_timer 1 20575836 us 94903466 us - net_timer 1 10485 us 40424 us - find_modules 1 3430 us 3430 us - net_init_timer 7 2715 us 2715 us - get_mem_block 109 2535 us 2535 us - pool_get 1 1213 us 1250 us - start_devices 105 1213 us 1213 us - pool_put 100 657 us 3581 us - m_devget 1 580 us 580 us - close_devices 1 561 us 1048 us - init_devices 1 494 us 536 us - list_devices 1 465 us 465 us - list_modules 93 348 us 348 us - m_copydata 101 216 us 1734 us - m_freem 1 187 us 187 us - net_shutdown_timer 7 174 us 2920 us - pool_init 2 150 us 259 us - insert_local_address 100 137 us 137 us - m_adj 2 136 us 136 us - net_add_timer 5 45 us 79 us - find_entry 7 39 us 39 us - in_cksum 1 28 us 28 us - start_ifq 2 19 us 19 us - print_ether_addr 1 9 us 445 us - nhash_make 1 7 us 7 us - print_ipv4_addr 3 4 us 20 us - nhash_get 1 4 us 2099 us - mbinit 1 2 us 12 us - is_address_local 2 2 us 82 us - nhash_set 1 1 us 1 us - net_server_add_device 1 1 us 1 us - m_reserve 1 1 us 16 us - m_gethdr 1 1 us 1 us - protocol_address