Hi,
I have a program need to create large number of listening UDPConn, 
basically around 30k, each UDPConn will run in its own go routine waiting 
incoming packets, so that's 30k go routines, however I hit the wall of 
10000 system threads limitation; after search around, I found it is because 
I set socket option to use ESPinUDP encap: "syscall.SetsockoptInt(conn_fd, 
syscall.IPPROTO_UDP, 100, 2)" , with the socket option set, each go routine 
is blocked in syscall, thus consuming a lots of system threads:

101 @ 0x47b915 0x47b163 0x47841f 0x49039f 0x4f735b 0x516dba 0x514bad 0x6fd1bf 
0x45c741
#       0x47b914        syscall.Syscall6+0x4                    
/usr/local/go/src/syscall/asm_linux_amd64.s:44
#       0x47b162        syscall.recvfrom+0xa2                   
/usr/local/go/src/syscall/zsyscall_linux_amd64.go:1648
#       0x47841e        syscall.Recvfrom+0xae                   
/usr/local/go/src/syscall/syscall_unix.go:262
#       0x49039e        internal/poll.(*FD).ReadFrom+0xfe       
/usr/local/go/src/internal/poll/fd_unix.go:215
#       0x4f735a        net.(*netFD).readFrom+0x5a              
/usr/local/go/src/net/fd_unix.go:208
#       0x516db9        net.(*UDPConn).readFrom+0x69            
/usr/local/go/src/net/udpsock_posix.go:47
#       0x514bac        net.(*UDPConn).ReadFromUDP+0x6c         
/usr/local/go/src/net/udpsock.go:109
#       0x6fd1be        main.listensocket+0x3ae                 
/root/gowork/src/test/test.go:55


if I don't set the socket option, then number of thread is far less, and go 
routine no longer use syscall:

101 @ 0x42f3cb 0x42a709 0x429db6 0x48f1aa 0x48f2bd 0x490408 0x4f735b 0x516dba 
0x514bad 0x6fd0b7 0x45c741
#       0x429db5        internal/poll.runtime_pollWait+0x65     
/usr/local/go/src/runtime/netpoll.go:173
#       0x48f1a9        internal/poll.(*pollDesc).wait+0x99     
/usr/local/go/src/internal/poll/fd_poll_runtime.go:85
#       0x48f2bc        internal/poll.(*pollDesc).waitRead+0x3c 
/usr/local/go/src/internal/poll/fd_poll_runtime.go:90
#       0x490407        internal/poll.(*FD).ReadFrom+0x167      
/usr/local/go/src/internal/poll/fd_unix.go:219
#       0x4f735a        net.(*netFD).readFrom+0x5a              
/usr/local/go/src/net/fd_unix.go:208
#       0x516db9        net.(*UDPConn).readFrom+0x69            
/usr/local/go/src/net/udpsock_posix.go:47
#       0x514bac        net.(*UDPConn).ReadFromUDP+0x6c         
/usr/local/go/src/net/udpsock.go:109
#       0x6fd0b6        main.listensocket+0x2a6                 
/root/gowork/src/test/test.go:55


so is there way to use socket option without consume so many system threads?



-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to