Changeset - 5ed4a5524548
[Not reviewed]
0 3 2
Christopher Esterhuyse - 5 years ago 2020-10-02 20:54:27
christopher.esterhuyse@gmail.com
Goodbye, Nagle
5 files changed with 138 insertions and 45 deletions:
0 comments (0 inline, 0 general)
examples/bench_17/main.c
Show inline comments
 
#include <time.h>
 
#include "../../reowolf.h"
 
#include "../utility.c"
 
#define N 5
 
int main(int argc, char** argv) {
 
	int i, cid, min_pid, msgs;
 
	int i, j, cid, min_putter, min_getter, ports_tot, ports_used;
 
	char do_puts, do_gets;
 
	cid = atoi(argv[1]);
 
	min_pid = atoi(argv[2]);
 
	char role = argv[3][0]; // 'h' for head, 'i' for inner, 't' for tail, 's' for singleton
 
	msgs = atoi(argv[4]);
 
	printf("cid %d, min_pid %d, role='%c', msgs %d\n",
 
		cid, min_pid, role, msgs);
 
	min_putter = atoi(argv[2]);
 
	min_getter = atoi(argv[3]);
 
	ports_tot = atoi(argv[4]);
 
	ports_used = atoi(argv[5]);
 
	do_puts = argv[6][0]; // 't' or 'f'
 
	do_gets = argv[7][0];
 
	printf("cid %d, min_putter %d, min_getter %d, ports_tot %d, ports_used %d, do_puts %c, do_gets %c\n",
 
		cid, min_putter, min_getter, ports_tot, ports_used, do_puts, do_gets);
 
	printf("Error str `%s`\n", reowolf_error_peek(NULL));
 

	
 
	unsigned char pdl[] = "";
 
	Arc_ProtocolDescription * pd = protocol_description_parse(pdl, sizeof(pdl)-1);
 
	Connector * c = connector_new_with_id(pd, cid);
 
	PortId putters[N], getters[N];
 
	FfiSocketAddr addr = {{127, 0, 0, 1}, 0};
 
	if(role=='i' || role=='t') {
 
		// I have N getter ports!
 
		for(i=0; i<N; i++) {
 
			addr.port = min_pid+i;
 
			connector_add_net_port(c, &getters[i], addr, Polarity_Getter, EndpointPolarity_Passive);
 
		}
 
	}
 
	if(role=='h' || role=='i') {
 
		// I have N putter ports!
 
		for(i=0; i<N; i++) {
 
			addr.port = min_pid+i+N;
 
			connector_add_net_port(c, &putters[i], addr, Polarity_Putter, EndpointPolarity_Active);
 
		}
 
	}
 
	printf("Added all ports!\n");
 
	if(role=='i') {
 
		// Inner has a forwarder component to forward messages
 
		for(i=0; i<N; i++) {	
 
			connector_add_component(c, "forward", 7, (PortId[]){putters[i], getters[i]}, 2);
 
		}
 
	PortId putters[ports_tot], getters[ports_tot];
 
	for(i=0; i<ports_tot; i++) {
 
		connector_add_net_port(c, &putters[i],
 
			(FfiSocketAddr){{127, 0, 0, 1}, min_putter+i},
 
			Polarity_Putter, EndpointPolarity_Active);
 
		connector_add_net_port(c, &getters[i],
 
			(FfiSocketAddr){{127, 0, 0, 1}, min_getter+i},
 
			Polarity_Getter, EndpointPolarity_Passive);
 
	}
 
	connector_connect(c, -1);
 
	printf("connect ok!\n");
 
	
 
	clock_t begin = clock();
 
	char msg[] = "Hello, world!";
 
	for (i=0; i<10000; i++) {
 
		if(role=='h' || role=='s') {
 
			// singleton and head send N messages
 
			for(i=0; i<N; i++) { 
 
				connector_put_bytes(c, putters[i], msg, sizeof(msg)-1);
 
			}
 
		}
 
		if(role=='t' || role=='s') {
 
			// singleton and tail recv N messages
 
			for(i=0; i<N; i++) { 
 
				connector_get(c, getters[i]);
 
			}
 
	for (i=0; i<1000; i++) {
 
		for(j=0; j<ports_used; j++) {
 
			if(do_gets=='y') connector_get(c, getters[j]);
 
			if(do_puts=='y') connector_put_bytes(c, putters[j], msg, sizeof(msg)-1);
 
		}
 
		// inner doesn't send nor receive
 
		connector_sync(c, -1);
 
	}
 
	clock_t end = clock();
examples/bench_18/main.c
Show inline comments
 
new file 100644
 
#include <time.h>
 
#include "../../reowolf.h"
 
#include "../utility.c"
 
int main(int argc, char** argv) {
 
	// all outward connections are ACTIVE to localhost
 
	// use tcp_rendezvous
 
	int i, j, cid, min_putter, min_getter, ports_tot, ports_used;
 
	char do_puts, do_gets;
 
	cid = atoi(argv[1]);
 
	min_putter = atoi(argv[2]);
 
	min_getter = atoi(argv[3]);
 
	ports_tot = atoi(argv[4]);
 
	ports_used = atoi(argv[5]);
 
	do_puts = argv[6][0]; // 't' or 'f'
 
	do_gets = argv[7][0];
 
	printf("cid %d, min_putter %d, min_getter %d, ports_tot %d, ports_used %d, do_puts %c, do_gets %c\n",
 
		cid, min_putter, min_getter, ports_tot, ports_used, do_puts, do_gets);
 
	printf("Error str `%s`\n", reowolf_error_peek(NULL));
 

	
 
	unsigned char pdl[] = "";
 
	Arc_ProtocolDescription * pd = protocol_description_parse(pdl, sizeof(pdl)-1);
 
	Connector * c = connector_new_with_id(pd, cid);
 
	PortId putters[ports_tot], getters[ports_tot];
 
	for(i=0; i<ports_tot; i++) {
 
		connector_add_net_port(c, &putters[i],
 
			(FfiSocketAddr){{127, 0, 0, 1}, min_putter+i},
 
			Polarity_Putter, EndpointPolarity_Active);
 
		connector_add_net_port(c, &getters[i],
 
			(FfiSocketAddr){{127, 0, 0, 1}, min_getter+i},
 
			Polarity_Getter, EndpointPolarity_Active);
 
	}
 
	connector_connect(c, -1);
 
	printf("connect ok!\n");
 
	
 
	clock_t begin = clock();
 
	char msg[] = "Hello, world!";
 
	for (i=0; i<1000; i++) {
 
		for(j=0; j<ports_used; j++) {
 
			if(do_gets=='y') connector_get(c, getters[j]);
 
			if(do_puts=='y') connector_put_bytes(c, putters[j], msg, sizeof(msg)-1);
 
		}
 
		connector_sync(c, -1);
 
	}
 
	clock_t end = clock();
 
	double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
 
	printf("Time taken: %f\n", time_spent);
 
	return 0;
 
}
 
\ No newline at end of file
examples/bench_19/main.c
Show inline comments
 
new file 100644
 
#include <time.h>
 
#include "../../reowolf.h"
 
#include "../utility.c"
 
int main(int argc, char** argv) {
 
	// bounce off tokyo to my public IP
 
	int i, j, cid, min_putter, min_getter, ports_tot, ports_used, n_rounds;
 
	char do_puts, do_gets;
 
	cid = atoi(argv[1]);
 
	min_putter = atoi(argv[2]);
 
	min_getter = atoi(argv[3]);
 
	ports_tot = atoi(argv[4]);
 
	ports_used = atoi(argv[5]);
 
	do_puts = argv[6][0]; // 't' or 'f'
 
	do_gets = argv[7][0];
 
	n_rounds = atoi(argv[12]);
 
	
 
	// argv 8..12 is PEER_IP
 
	
 
	printf("cid %d, min_putter %d, min_getter %d, ports_tot %d, ports_used %d, do_puts %c, do_gets %c, n_rounds %d\n",
 
		cid, min_putter, min_getter, ports_tot, ports_used, do_puts, do_gets, n_rounds);
 
	printf("peer_ip %d.%d.%d.%d\n",
 
		atoi(argv[8]),
 
		atoi(argv[9]),
 
		atoi(argv[10]),
 
		atoi(argv[11]));
 
	
 
	printf("Error str `%s`\n", reowolf_error_peek(NULL));
 

	
 
	unsigned char pdl[] = "";
 
	Arc_ProtocolDescription * pd = protocol_description_parse(pdl, sizeof(pdl)-1);
 
	Connector * c = connector_new_with_id(pd, cid);
 
	PortId putters[ports_tot], getters[ports_tot];
 
	for(i=0; i<ports_tot; i++) {
 
		connector_add_net_port(c, &putters[i],
 
			(FfiSocketAddr){
 
				{atoi(argv[8]),atoi(argv[9]),atoi(argv[10]),atoi(argv[11]),},
 
				min_putter+i
 
			},
 
			Polarity_Putter, EndpointPolarity_Active);
 
		connector_add_net_port(c, &getters[i],
 
			(FfiSocketAddr){
 
				{0,0,0,0},
 
				min_getter+i
 
			},
 
			Polarity_Getter, EndpointPolarity_Passive);
 
	}
 
	connector_connect(c, -1);
 
	printf("connect ok!\n");
 
	
 
	clock_t begin = clock();
 
	char msg[] = "Hello, world!";
 
	for (i=0; i<n_rounds; i++) {
 
		for(j=0; j<ports_used; j++) {
 
			if(do_gets=='y') connector_get(c, getters[j]);
 
			if(do_puts=='y') connector_put_bytes(c, putters[j], msg, sizeof(msg)-1);
 
		}
 
		connector_sync(c, -1);
 
	}
 
	clock_t end = clock();
 
	double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
 
	printf("Time taken: %f\n", time_spent);
 
	return 0;
 
}
 
\ No newline at end of file
examples/zoop.sh
Show inline comments
 
#!/bin/bash
 
for included in {0..13}
 
for ports in 2 4 6 8 10 12 14 16
 
do
 
	./bench_13/main.exe 65535 $included 13
 
done
 
\ No newline at end of file
 
	./bench_19/main.exe 98 7500 7000 16 $ports y y 192 168 1 4 1000
 
done
src/runtime/setup.rs
Show inline comments
 
@@ -494,6 +494,7 @@ fn setup_endpoints_and_pair_ports(
 
                            .expect("Net Setup's getter port info isn't known"); // unreachable
 
                        if event.is_writable() && !net_todo.sent_local_port {
 
                            // can write and didn't send setup msg yet? Do so!
 
                            let _ = net_endpoint.stream.set_nodelay(true);
 
                            let msg = Msg::SetupMsg(SetupMsg::MyPortInfo(MyPortInfo {
 
                                owner: local_info.owner,
 
                                polarity: local_info.polarity,
0 comments (0 inline, 0 general)