@@ -26,8 +26,9 @@ use testutils::rackscale_runner::{RackscaleBench, RackscaleRun};
2626use testutils:: runner_args:: RackscaleTransport ;
2727
2828use testutils:: memcached:: {
29- parse_memcached_output, rackscale_memcached_checkout, MemcachedShardedConfig ,
30- MEMCACHED_MEM_SIZE_MB , MEMCACHED_NUM_QUERIES ,
29+ linux_spawn_memcached, parse_memcached_output, rackscale_memcached_checkout,
30+ MemcachedShardedConfig , MEMCACHED_MEM_SIZE_MB , MEMCACHED_NUM_QUERIES ,
31+ RACKSCALE_MEMCACHED_CSV_COLUMNS ,
3132} ;
3233
3334#[ test]
@@ -477,12 +478,12 @@ struct MemcachedInternalConfig {
477478
478479#[ test]
479480#[ cfg( not( feature = "baremetal" ) ) ]
480- fn s11_rackscale_memcached_benchmark_internal ( ) {
481- rackscale_memcached_benchmark ( RackscaleTransport :: Shmem ) ;
481+ fn s11_rackscale_shmem_memcached_internal_benchmark ( ) {
482+ rackscale_memcached_internal_benchmark ( RackscaleTransport :: Shmem ) ;
482483}
483484
484485#[ cfg( not( feature = "baremetal" ) ) ]
485- fn rackscale_memcached_benchmark ( transport : RackscaleTransport ) {
486+ fn rackscale_memcached_internal_benchmark ( transport : RackscaleTransport ) {
486487 let is_smoke = cfg ! ( feature = "smoke" ) ;
487488
488489 let file_name = format ! (
@@ -491,6 +492,11 @@ fn rackscale_memcached_benchmark(transport: RackscaleTransport) {
491492 ) ;
492493 let _ignore = std:: fs:: remove_file ( file_name. clone ( ) ) ;
493494
495+ let baseline_file_name = "rackscale_baseline_memcached_benchmark.csv" ;
496+ if cfg ! ( feature = "baseline" ) {
497+ let _ignore = std:: fs:: remove_file ( baseline_file_name. clone ( ) ) ;
498+ }
499+
494500 let built = BuildArgs :: default ( )
495501 . module ( "rkapps" )
496502 . user_feature ( "rkapps:memcached-bench" )
@@ -525,24 +531,32 @@ fn rackscale_memcached_benchmark(transport: RackscaleTransport) {
525531 . open ( file_name)
526532 . expect ( "Can't open file" ) ;
527533 if write_headers {
528- let row = "git_rev,benchmark,nthreads,mem,queries,time,thpt,num_clients,num_replicas\n " ;
529- let r = csv_file. write ( row. as_bytes ( ) ) ;
534+ let r = csv_file. write ( RACKSCALE_MEMCACHED_CSV_COLUMNS . as_bytes ( ) ) ;
530535 assert ! ( r. is_ok( ) ) ;
531536 }
532537
533- let actual_num_clients = if is_baseline { 0 } else { num_clients } ;
538+ let os_name = if is_baseline { "nros" } else { "dinos" } ;
539+ let protocol = if is_baseline {
540+ "internal"
541+ } else if file_name. contains ( & RackscaleTransport :: Ethernet . to_string ( ) ) {
542+ "tcp"
543+ } else {
544+ "shmem"
545+ } ;
534546
535547 let r = csv_file. write ( format ! ( "{}," , env!( "GIT_HASH" ) ) . as_bytes ( ) ) ;
536548 assert ! ( r. is_ok( ) ) ;
549+
537550 let out = format ! (
538- "memcached_internal,{},{},{},{},{},{},{}" ,
551+ "memcached_internal,{},{},{},{},{},{},{},{}" ,
552+ os_name,
553+ protocol,
554+ num_clients,
539555 ret. b_threads,
540556 ret. b_mem,
541557 ret. b_queries,
542558 ret. b_time,
543- ret. b_thpt,
544- actual_num_clients,
545- num_clients
559+ ret. b_thpt
546560 ) ;
547561 let r = csv_file. write ( out. as_bytes ( ) ) ;
548562 assert ! ( r. is_ok( ) ) ;
@@ -619,18 +633,20 @@ fn rackscale_memcached_benchmark(transport: RackscaleTransport) {
619633 }
620634 }
621635
622- let bench = RackscaleBench {
636+ let mut bench = RackscaleBench {
623637 test,
624638 cmd_fn,
625639 baseline_timeout_fn,
626640 rackscale_timeout_fn,
627641 mem_fn,
628642 } ;
629643
644+ bench. run_bench ( false , is_smoke) ;
645+
630646 if cfg ! ( feature = "baseline" ) {
647+ bench. test . file_name = baseline_file_name. to_string ( ) ;
631648 bench. run_bench ( true , is_smoke) ;
632649 }
633- bench. run_bench ( false , is_smoke) ;
634650}
635651
636652#[ ignore]
@@ -860,9 +876,7 @@ fn rackscale_memcached_dcm(transport: RackscaleTransport, dcm_config: Option<DCM
860876
861877#[ test]
862878#[ cfg( not( feature = "baremetal" ) ) ]
863- fn s11_rackscale_memcached_benchmark_sharded_linux ( ) {
864- use std:: fs:: remove_file;
865-
879+ fn s11_linux_memcached_sharded_benchmark ( ) {
866880 use rexpect:: process:: signal:: Signal :: SIGKILL ;
867881
868882 let machine = Machine :: determine ( ) ;
@@ -910,86 +924,8 @@ fn s11_rackscale_memcached_benchmark_sharded_linux() {
910924 spawn_command ( command, Some ( timeout_ms) ) . expect ( "failed to spawn memcached" )
911925 }
912926
913- fn spawn_memcached (
914- id : usize ,
915- config : & MemcachedShardedConfig ,
916- timeout_ms : u64 ,
917- ) -> Result < PtySession > {
918- let con_info = if config. protocol == "tcp" {
919- format ! ( "tcp://localhost:{}" , 11212 + id)
920- } else {
921- let pathname = config. path . join ( format ! ( "memcached{id}.sock" ) ) ;
922- if pathname. is_file ( ) {
923- remove_file ( pathname. clone ( ) ) . expect ( "Failed to remove path" ) ; // make sure the socket file is removed
924- }
925- format ! ( "unix://{}" , pathname. display( ) )
926- } ;
927-
928- let mut command = Command :: new ( "bash" ) ;
929-
930- command. args ( & [
931- "scripts/spawn-memcached-process.sh" ,
932- id. to_string ( ) . as_str ( ) ,
933- con_info. as_str ( ) ,
934- ( 2 * config. mem_size ) . to_string ( ) . as_str ( ) ,
935- config. num_threads . to_string ( ) . as_str ( ) ,
936- ] ) ;
937- command. current_dir ( config. path . as_path ( ) ) ;
938-
939- println ! ( "Spawning memcached:\n $ `{:?}`" , command) ;
940-
941- let mut res = spawn_command ( command, Some ( timeout_ms) ) ?;
942- std:: thread:: sleep ( Duration :: from_secs ( 1 ) ) ;
943-
944- match res. exp_regex ( r#"INTERNAL BENCHMARK CONFIGURE"# ) {
945- Ok ( ( _prev, _matched) ) => {
946- println ! ( " $ OK." ) ;
947- Ok ( res)
948- }
949- Err ( e) => {
950- println ! ( " $ FAILED. {}" , e) ;
951- Err ( e)
952- }
953- }
954- }
927+ let file_name = "linux_memcached_sharded_benchmark.csv" ;
955928
956- fn spawn_loadbalancer ( config : & MemcachedShardedConfig , timeout_ms : u64 ) -> Result < PtySession > {
957- let mut command = Command :: new ( "./loadbalancer/loadbalancer" ) ;
958- command. args ( & [ "--binary" ] ) ;
959- command. arg ( format ! ( "--num-queries={}" , config. num_queries) . as_str ( ) ) ;
960- command. arg ( format ! ( "--num-threads={}" , config. num_threads) . as_str ( ) ) ;
961- command. arg ( format ! ( "--max-memory={}" , config. mem_size / 8 ) . as_str ( ) ) ;
962- let mut servers = String :: from ( "--servers=" ) ;
963- for i in 0 ..config. num_servers {
964- if i > 0 {
965- servers. push_str ( "," ) ;
966- }
967- if config. protocol == "tcp" {
968- if config. is_local_host {
969- servers. push_str ( format ! ( "tcp://localhost:{}" , 11212 + i) . as_str ( ) ) ;
970- } else {
971- // +1 because tap0 is reserved for the controller.
972- let ip = 10 + i + 1 ;
973- servers. push_str ( format ! ( "tcp://172.31.0.{}:{}" , ip, 11211 ) . as_str ( ) ) ;
974- }
975- } else {
976- servers. push_str (
977- format ! ( "unix://{}/memcached{}.sock" , config. path. display( ) , i) . as_str ( ) ,
978- ) ;
979- }
980- }
981- command. arg ( servers. as_str ( ) ) ;
982- command. current_dir ( config. path . as_path ( ) ) ;
983-
984- // give the servers some time to be spawned
985- std:: thread:: sleep ( Duration :: from_secs ( 5 ) ) ;
986-
987- println ! ( "Spawning Loadbalancer: \n $ `{:?}`" , command) ;
988-
989- spawn_command ( command, Some ( timeout_ms) )
990- }
991-
992- let file_name = "memcached_benchmark_sharded_linux.csv" ;
993929 let _r = std:: fs:: remove_file ( file_name) ;
994930
995931 let mut csv_file = OpenOptions :: new ( )
@@ -998,8 +934,7 @@ fn s11_rackscale_memcached_benchmark_sharded_linux() {
998934 . open ( file_name)
999935 . expect ( "Can't open file" ) ;
1000936
1001- let row = "git_rev,benchmark,os,nthreads,protocol,mem,queries,time,thpt\n " ;
1002- let r = csv_file. write ( row. as_bytes ( ) ) ;
937+ let r = csv_file. write ( RACKSCALE_MEMCACHED_CSV_COLUMNS . as_bytes ( ) ) ;
1003938 assert ! ( r. is_ok( ) ) ;
1004939
1005940 let max_threads_per_node = if is_smoke {
@@ -1032,9 +967,11 @@ fn s11_rackscale_memcached_benchmark_sharded_linux() {
1032967 parse_memcached_output ( & mut pty, & mut output) . expect ( "could not parse output!" ) ;
1033968 let r = csv_file. write ( format ! ( "{}," , env!( "GIT_HASH" ) ) . as_bytes ( ) ) ;
1034969 assert ! ( r. is_ok( ) ) ;
970+
971+ //git_rev,benchmark,os,protocol,npieces,nthreads,mem,queries,time,thpt
1035972 let out = format ! (
1036- "memcached_sharded,linux,{},{},{},{},{},{}\n " ,
1037- res . b_threads , "internal" , res. b_mem, res. b_queries, res. b_time, res. b_thpt,
973+ "memcached_sharded,linux,{},{},{},{},{},{},{} \n " ,
974+ "internal" , 1 , res . b_threads , res. b_mem, res. b_queries, res. b_time, res. b_thpt,
1038975 ) ;
1039976 let r = csv_file. write ( out. as_bytes ( ) ) ;
1040977 assert ! ( r. is_ok( ) ) ;
@@ -1060,22 +997,24 @@ fn s11_rackscale_memcached_benchmark_sharded_linux() {
1060997 let mut memcached_ctrls = Vec :: new ( ) ;
1061998 for i in 0 ..num_nodes {
1062999 memcached_ctrls. push (
1063- spawn_memcached ( i, & config, timeout_ms) . expect ( "could not spawn memcached" ) ,
1000+ linux_spawn_memcached ( i, & config, timeout_ms)
1001+ . expect ( "could not spawn memcached" ) ,
10641002 ) ;
10651003 }
10661004
1067- let mut pty =
1068- spawn_loadbalancer ( & config , timeout_ms ) . expect ( "failed to spawn load balancer" ) ;
1005+ let mut pty = testutils :: memcached :: spawn_loadbalancer ( & config , timeout_ms )
1006+ . expect ( "failed to spawn load balancer" ) ;
10691007 let mut output = String :: new ( ) ;
10701008 use rexpect:: errors:: ErrorKind :: Timeout ;
10711009 match parse_memcached_output ( & mut pty, & mut output) {
10721010 Ok ( res) => {
10731011 let r = csv_file. write ( format ! ( "{}," , env!( "GIT_HASH" ) ) . as_bytes ( ) ) ;
10741012 assert ! ( r. is_ok( ) ) ;
10751013 let out = format ! (
1076- "memcached_sharded,linux,{},{},{},{},{},{}\n " ,
1077- res. b_threads,
1014+ "memcached_sharded,linux,{},{},{},{},{},{},{}\n " ,
10781015 protocol,
1016+ config. num_servers,
1017+ res. b_threads,
10791018 res. b_mem,
10801019 res. b_queries,
10811020 res. b_time,
@@ -1102,8 +1041,12 @@ fn s11_rackscale_memcached_benchmark_sharded_linux() {
11021041 let r = csv_file. write ( format ! ( "{}," , env!( "GIT_HASH" ) ) . as_bytes ( ) ) ;
11031042 assert ! ( r. is_ok( ) ) ;
11041043 let out = format ! (
1105- "memcached_sharded,linux,{},{},failure,failure,failure,failure\n " ,
1106- config. num_servers, protocol,
1044+ "memcached_sharded,linux,{},{},{},{},{},failure,failure\n " ,
1045+ protocol,
1046+ config. num_servers,
1047+ config. num_threads * config. num_servers,
1048+ config. mem_size,
1049+ config. num_queries,
11071050 ) ;
11081051 let r = csv_file. write ( out. as_bytes ( ) ) ;
11091052 assert ! ( r. is_ok( ) ) ;
@@ -1166,6 +1109,7 @@ fn s11_rackscale_memcached_benchmark_sharded_nros() {
11661109 }
11671110 } ;
11681111
1112+ // TODO: consolidate code with testutils::memcached::spawn_loadbalancer
11691113 fn spawn_loadbalancer ( config : & MemcachedShardedConfig , timeout_ms : u64 ) -> Result < PtySession > {
11701114 let mut command = Command :: new ( "./loadbalancer/loadbalancer" ) ;
11711115 command. args ( & [ "--binary" ] ) ;
0 commit comments