Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
        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()
Exemple #4
0
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()
Exemple #5
0
        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()
Exemple #6
0
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()