def main(): parser = argparse.ArgumentParser() parser.add_argument('--log', metavar='LEVEL', default='INFO', help='Log level [%(default)s]') subparsers = parser.add_subparsers(title='subcommands') master = subparsers.add_parser('master') master.add_argument('--quiet', action='store_true', default=False, help='Print only the final result') master.add_argument('--packet', metavar='BYTES', type=int, default=9172, help='Maximum packet size to use for UDP [%(default)s]') master.add_argument('--heap-size', metavar='BYTES', type=int, default=4194304, help='Payload size for heap [%(default)s]') master.add_argument('--addr-bits', metavar='BITS', type=int, default=40, help='Heap address bits [%(default)s]') group = master.add_argument_group('sender options') group.add_argument('--send-affinity', type=spead2.parse_range_list, help='List of CPUs to pin threads to [no affinity]') group.add_argument('--send-buffer', metavar='BYTES', type=int, default=spead2.send.trollius.UdpStream.DEFAULT_BUFFER_SIZE, help='Socket buffer size [%(default)s]') group.add_argument('--burst', metavar='BYTES', type=int, default=spead2.send.StreamConfig.DEFAULT_BURST_SIZE, help='Send burst size [%(default)s]') group = master.add_argument_group('receiver options') group.add_argument('--recv-affinity', type=spead2.parse_range_list, help='List of CPUs to pin threads to [no affinity]') group.add_argument('--recv-buffer', metavar='BYTES', type=int, default=spead2.recv.Stream.DEFAULT_UDP_BUFFER_SIZE, help='Socket buffer size [%(default)s]') group.add_argument('--heaps', type=int, default=spead2.recv.Stream.DEFAULT_MAX_HEAPS, help='Maximum number of in-flight heaps [%(default)s]') group.add_argument('--ring-heaps', type=int, default=spead2.recv.Stream.DEFAULT_RING_HEAPS, help='Ring buffer capacity in heaps [%(default)s]') group.add_argument('--mem-max-free', type=int, default=12, help='Maximum free memory buffers [%(default)s]') group.add_argument('--mem-initial', type=int, default=8, help='Initial free memory buffers [%(default)s]') master.add_argument('host') master.add_argument('port', type=int) slave = subparsers.add_parser('slave') slave.add_argument('port', type=int) args = parser.parse_args() logging.basicConfig(level=getattr(logging, args.log.upper())) if 'host' in args: task = run_master(args) else: task = run_slave(args) task = trollius.async(task) trollius.get_event_loop().run_until_complete(task) task.result()
def main(): parser = argparse.ArgumentParser() parser.add_argument("--log", metavar="LEVEL", default="INFO", help="Log level [%(default)s]") subparsers = parser.add_subparsers(title="subcommands") master = subparsers.add_parser("master") master.add_argument("--quiet", action="store_true", default=False, help="Print only the final result") master.add_argument( "--packet", metavar="BYTES", type=int, default=9172, help="Maximum packet size to use for UDP [%(default)s]" ) master.add_argument( "--heap-size", metavar="BYTES", type=int, default=4194304, help="Payload size for heap [%(default)s]" ) master.add_argument("--addr-bits", metavar="BITS", type=int, default=40, help="Heap address bits [%(default)s]") group = master.add_argument_group("sender options") group.add_argument( "--send-buffer", metavar="BYTES", type=int, default=spead2.send.trollius.UdpStream.DEFAULT_BUFFER_SIZE, help="Socket buffer size [%(default)s]", ) group.add_argument( "--burst", metavar="BYTES", type=int, default=spead2.send.StreamConfig.DEFAULT_BURST_SIZE, help="Send burst size [%(default)s]", ) group = master.add_argument_group("receiver options") group.add_argument( "--recv-buffer", metavar="BYTES", type=int, default=spead2.recv.Stream.DEFAULT_UDP_BUFFER_SIZE, help="Socket buffer size [%(default)s]", ) group.add_argument( "--heaps", type=int, default=spead2.recv.Stream.DEFAULT_MAX_HEAPS, help="Maximum number of in-flight heaps [%(default)s]", ) group.add_argument( "--ring-heaps", type=int, default=spead2.recv.Stream.DEFAULT_RING_HEAPS, help="Ring buffer capacity in heaps [%(default)s]", ) group.add_argument("--mem-max-free", type=int, default=12, help="Maximum free memory buffers [%(default)s]") group.add_argument("--mem-initial", type=int, default=8, help="Initial free memory buffers [%(default)s]") master.add_argument("host") master.add_argument("port", type=int) slave = subparsers.add_parser("slave") slave.add_argument("port", type=int) args = parser.parse_args() logging.basicConfig(level=getattr(logging, args.log.upper())) if "host" in args: task = run_master(args) else: task = run_slave(args) task = trollius.async(task) trollius.get_event_loop().run_until_complete(task) task.result()
stream = make_stream(sources) return run_stream(stream, sources[0], args) args = get_args() logging.basicConfig(level=getattr(logging, args.log.upper())) if args.affinity is not None and len(args.affinity) > 0: spead2.ThreadPool.set_affinity(args.affinity[0]) thread_pool = spead2.ThreadPool(args.threads, args.affinity[1:] + args.affinity[:1]) else: thread_pool = spead2.ThreadPool(args.threads) memory_pool = None if args.mem_pool: memory_pool = spead2.MemoryPool(args.mem_lower, args.mem_upper, args.mem_max_free, args.mem_initial) if args.joint: coros = [make_coro(args.source)] else: coros = [make_coro([source]) for source in args.source] tasks = [trollius. async (x) for x in coros] task = trollius.wait(tasks, return_when=trollius.FIRST_EXCEPTION) trollius.get_event_loop().run_until_complete(task) # Trigger any recorded exception for t in tasks: t.result() if __name__ == '__main__': main()
def main(): def make_stream(sources): bug_compat = spead2.BUG_COMPAT_PYSPEAD_0_5_2 if args.pyspead else 0 stream = spead2.recv.trollius.Stream(thread_pool, bug_compat, args.heaps, args.ring_heaps) if memory_pool is not None: stream.set_memory_allocator(memory_pool) if args.memcpy_nt: stream.set_memcpy(spead2.MEMCPY_NONTEMPORAL) ibv_endpoints = [] for source in sources: try: if ':' in source: host, port = source.rsplit(':', 1) port = int(port) else: host = '' port = int(source) except ValueError: try: stream.add_udp_pcap_file_reader(source) except AttributeError: raise RuntimeError( 'spead2 was compiled without pcap support') else: if 'ibv' in args and args.ibv is not None: if host is None: raise ValueError( 'a multicast group is required when using --ibv') ibv_endpoints.append((host, port)) else: stream.add_udp_reader(port, args.packet, args.buffer, host) if ibv_endpoints: stream.add_udp_ibv_reader(ibv_endpoints, args.ibv, args.packet, args.buffer, args.ibv_vector, args.ibv_max_poll) return stream def make_coro(sources): stream = make_stream(sources) return run_stream(stream, sources[0], args), stream def stop_streams(): for stream in streams: stream.stop() args = get_args() logging.basicConfig(level=getattr(logging, args.log.upper())) if args.affinity is not None and len(args.affinity) > 0: spead2.ThreadPool.set_affinity(args.affinity[0]) thread_pool = spead2.ThreadPool(args.threads, args.affinity[1:] + args.affinity[:1]) else: thread_pool = spead2.ThreadPool(args.threads) memory_pool = None if args.mem_pool: memory_pool = spead2.MemoryPool(args.mem_lower, args.mem_upper, args.mem_max_free, args.mem_initial) if args.joint: coros_and_streams = [make_coro(args.source)] else: coros_and_streams = [make_coro([source]) for source in args.source] coros, streams = zip(*coros_and_streams) main_task = trollius. async (trollius.gather(*coros)) loop = trollius.get_event_loop() loop.add_signal_handler(signal.SIGINT, stop_streams) try: loop.run_until_complete(main_task) except trollius.CancelledError: pass loop.close()
return stream def make_coro(sources): stream = make_stream(sources) return run_stream(stream, sources[0], args) args = get_args() logging.basicConfig(level=getattr(logging, args.log.upper())) if args.affinity is not None and len(args.affinity) > 0: spead2.ThreadPool.set_affinity(args.affinity[0]) thread_pool = spead2.ThreadPool(args.threads, args.affinity[1:] + args.affinity[:1]) else: thread_pool = spead2.ThreadPool(args.threads) memory_pool = None if args.mem_pool: memory_pool = spead2.MemoryPool(args.mem_lower, args.mem_upper, args.mem_max_free, args.mem_initial) if args.joint: coros = [make_coro(args.source)] else: coros = [make_coro([source]) for source in args.source] tasks = [trollius.async(x) for x in coros] task = trollius.wait(tasks, return_when=trollius.FIRST_EXCEPTION) trollius.get_event_loop().run_until_complete(task) # Trigger any recorded exception for t in tasks: t.result() if __name__ == '__main__': main()
def main(): parser = argparse.ArgumentParser() parser.add_argument('--log', metavar='LEVEL', default='INFO', help='Log level [%(default)s]') subparsers = parser.add_subparsers(title='subcommands') master = subparsers.add_parser('master') master.add_argument('--quiet', action='store_true', default=False, help='Print only the final result') master.add_argument( '--packet', metavar='BYTES', type=int, default=9172, help='Maximum packet size to use for UDP [%(default)s]') master.add_argument('--heap-size', metavar='BYTES', type=int, default=4194304, help='Payload size for heap [%(default)s]') master.add_argument('--addr-bits', metavar='BITS', type=int, default=40, help='Heap address bits [%(default)s]') master.add_argument('--multicast', metavar='ADDRESS', type=str, help='Send via multicast group [unicast]') group = master.add_argument_group('sender options') group.add_argument('--send-affinity', type=spead2.parse_range_list, help='List of CPUs to pin threads to [no affinity]') group.add_argument( '--send-buffer', metavar='BYTES', type=int, default=spead2.send.trollius.UdpStream.DEFAULT_BUFFER_SIZE, help='Socket buffer size [%(default)s]') group.add_argument('--burst', metavar='BYTES', type=int, default=spead2.send.StreamConfig.DEFAULT_BURST_SIZE, help='Send burst size [%(default)s]') if hasattr(spead2.send, 'UdpIbvStream'): group.add_argument('--send-ibv', type=str, metavar='ADDRESS', help='Use ibverbs with this interface address [no]') group.add_argument( '--send-ibv-vector', type=int, default=0, metavar='N', help='Completion vector, or -1 to use polling [%(default)s]') group.add_argument( '--send-ibv-max-poll', type=int, default=spead2.send.UdpIbvStream.DEFAULT_MAX_POLL, help='Maximum number of times to poll in a row [%(default)s]') group = master.add_argument_group('receiver options') group.add_argument('--recv-affinity', type=spead2.parse_range_list, help='List of CPUs to pin threads to [no affinity]') group.add_argument('--recv-buffer', metavar='BYTES', type=int, default=spead2.recv.Stream.DEFAULT_UDP_BUFFER_SIZE, help='Socket buffer size [%(default)s]') if hasattr(spead2.recv.Stream, 'add_udp_ibv_reader'): group.add_argument('--recv-ibv', type=str, metavar='ADDRESS', help='Use ibverbs with this interface address [no]') group.add_argument( '--recv-ibv-vector', type=int, default=0, metavar='N', help='Completion vector, or -1 to use polling [%(default)s]') group.add_argument( '--recv-ibv-max-poll', type=int, default=spead2.recv.Stream.DEFAULT_UDP_IBV_MAX_POLL, help='Maximum number of times to poll in a row [%(default)s]') group.add_argument('--heaps', type=int, default=spead2.recv.Stream.DEFAULT_MAX_HEAPS, help='Maximum number of in-flight heaps [%(default)s]') group.add_argument('--ring-heaps', type=int, default=spead2.recv.Stream.DEFAULT_RING_HEAPS, help='Ring buffer capacity in heaps [%(default)s]') group.add_argument('--memcpy-nt', action='store_true', help='Use non-temporal memcpy [no]') group.add_argument('--mem-max-free', type=int, default=12, help='Maximum free memory buffers [%(default)s]') group.add_argument('--mem-initial', type=int, default=8, help='Initial free memory buffers [%(default)s]') master.add_argument('host') master.add_argument('port', type=int) slave = subparsers.add_parser('slave') slave.add_argument('port', type=int) args = parser.parse_args() logging.basicConfig(level=getattr(logging, args.log.upper())) if 'host' in args: task = run_master(args) else: task = run_slave(args) task = trollius. async (task) trollius.get_event_loop().run_until_complete(task) task.result()