go.nanomsg.org/mangos/v3@v3.4.3-0.20240217232803-46464076f1f5/perf/main.go (about) 1 // Copyright 2019 The Mangos Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use file except in compliance with the License. 5 // You may obtain a copy of the license at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Package perf provides utilities to measure mangos peformance against 16 // libnanomsg' perf tools. 17 18 package main 19 20 import ( 21 "fmt" 22 "log" 23 "os" 24 "strconv" 25 "time" 26 ) 27 28 func usage() { 29 fmt.Printf("Bad Usage!\n") 30 os.Exit(1) 31 } 32 33 func doRemoteReqRepLatency(args []string) { 34 if len(args) < 3 { 35 log.Fatalf("Usage: remote_lat <connect-to> <msg-size> <roundtrips>") 36 } 37 addr := args[0] 38 msgSize, err := strconv.Atoi(args[1]) 39 if err != nil { 40 log.Fatalf("Bad msgsize: %v", err) 41 } 42 roundTrips, err := strconv.Atoi(args[2]) 43 if err != nil { 44 log.Fatalf("Bad roundtrips: %v", err) 45 } 46 ReqRepLatencyClient(addr, msgSize, roundTrips) 47 os.Exit(0) 48 } 49 50 func doLocalReqRepLatency(args []string) { 51 if len(args) < 3 { 52 log.Fatalf("Usage: local_lat <connect-to> <msg-size> <roundtrips>") 53 } 54 addr := args[0] 55 msgSize, err := strconv.Atoi(args[1]) 56 if err != nil { 57 log.Fatalf("Bad msgsize: %v", err) 58 } 59 roundTrips, err := strconv.Atoi(args[2]) 60 if err != nil { 61 log.Fatalf("Bad roundtrips: %v", err) 62 } 63 ReqRepLatencyServer(addr, msgSize, roundTrips) 64 os.Exit(0) 65 } 66 67 func doRemoteLatency(args []string) { 68 if len(args) < 3 { 69 log.Fatalf("Usage: remote_lat <connect-to> <msg-size> <roundtrips>") 70 } 71 addr := args[0] 72 msgSize, err := strconv.Atoi(args[1]) 73 if err != nil { 74 log.Fatalf("Bad msgsize: %v", err) 75 } 76 roundTrips, err := strconv.Atoi(args[2]) 77 if err != nil { 78 log.Fatalf("Bad roundtrips: %v", err) 79 } 80 LatencyClient(addr, msgSize, roundTrips) 81 os.Exit(0) 82 } 83 84 func doLocalLatency(args []string) { 85 if len(args) < 3 { 86 log.Fatalf("Usage: local_lat <connect-to> <msg-size> <roundtrips>") 87 } 88 addr := args[0] 89 msgSize, err := strconv.Atoi(args[1]) 90 if err != nil { 91 log.Fatalf("Bad msgsize: %v", err) 92 } 93 roundTrips, err := strconv.Atoi(args[2]) 94 if err != nil { 95 log.Fatalf("Bad roundtrips: %v", err) 96 } 97 LatencyServer(addr, msgSize, roundTrips) 98 os.Exit(0) 99 } 100 101 func doRemoteThroughput(args []string) { 102 if len(args) < 3 { 103 log.Fatalf("Usage: remote_thr <connect-to> <msg-size> <msg-count>") 104 } 105 addr := args[0] 106 msgSize, err := strconv.Atoi(args[1]) 107 if err != nil { 108 log.Fatalf("Bad msg-size: %v", err) 109 } 110 msgCount, err := strconv.Atoi(args[2]) 111 if err != nil { 112 log.Fatalf("Bad msg-count: %v", err) 113 } 114 ThroughputClient(addr, msgSize, msgCount) 115 os.Exit(0) 116 } 117 118 func doLocalThroughput(args []string) { 119 if len(args) < 3 { 120 log.Fatalf("Usage: local_thr <connect-to> <msg-size> <msg-count>") 121 } 122 addr := args[0] 123 msgSize, err := strconv.Atoi(args[1]) 124 if err != nil { 125 log.Fatalf("Bad msg-size: %v", err) 126 } 127 msgCount, err := strconv.Atoi(args[2]) 128 if err != nil { 129 log.Fatalf("Bad msg-count: %v", err) 130 } 131 ThroughputServer(addr, msgSize, msgCount) 132 os.Exit(0) 133 } 134 135 func doInprocLat(args []string) { 136 if len(args) < 2 { 137 log.Fatalf("Usage: inproc_lat <msg-size> <roundtrip-count>") 138 } 139 140 size, err := strconv.Atoi(args[0]) 141 if err != nil { 142 log.Fatalf("Bad msg-size: %v", err) 143 } 144 count, err := strconv.Atoi(args[1]) 145 if err != nil { 146 log.Fatalf("Bad roundtrip-count: %v", err) 147 } 148 go LatencyServer("inproc://inproc_lat", size, count) 149 time.Sleep(10 * time.Millisecond) 150 LatencyClient("inproc://inproc_lat", size, count) 151 os.Exit(0) 152 } 153 154 func doInprocReqRepLatency(args []string) { 155 if len(args) < 2 { 156 log.Fatalf("Usage: inproc_lat <msg-size> <roundtrip-count>") 157 } 158 159 size, err := strconv.Atoi(args[0]) 160 if err != nil { 161 log.Fatalf("Bad msg-size: %v", err) 162 } 163 count, err := strconv.Atoi(args[1]) 164 if err != nil { 165 log.Fatalf("Bad roundtrip-count: %v", err) 166 } 167 go ReqRepLatencyServer("inproc://inproc_lat", size, count) 168 time.Sleep(10 * time.Millisecond) 169 ReqRepLatencyClient("inproc://inproc_lat", size, count) 170 os.Exit(0) 171 } 172 173 func doInprocThr(args []string) { 174 if len(args) < 2 { 175 log.Fatalf("Usage: inproc_thr <msg-size> <msg-count>") 176 } 177 178 size, err := strconv.Atoi(args[0]) 179 if err != nil { 180 log.Fatalf("Bad msg-size: %v", err) 181 } 182 count, err := strconv.Atoi(args[1]) 183 if err != nil { 184 log.Fatalf("Bad msg-count: %v", err) 185 } 186 go ThroughputClient("inproc://inproc_lat", size, count) 187 ThroughputServer("inproc://inproc_lat", size, count) 188 os.Exit(0) 189 } 190 191 func main() { 192 args := os.Args 193 194 tries := 0 195 for tries = 0; tries < 2; tries++ { 196 switch args[0] { 197 case "remote_reqlat": 198 doRemoteReqRepLatency(args[1:]) 199 200 case "local_reqlat": 201 doLocalReqRepLatency(args[1:]) 202 203 case "latency_client": 204 fallthrough 205 case "remote_lat": 206 doRemoteLatency(args[1:]) 207 208 case "latency_server": 209 fallthrough 210 case "local_lat": 211 doLocalLatency(args[1:]) 212 213 case "throughput_client": 214 fallthrough 215 case "remote_thr": 216 doRemoteThroughput(args[1:]) 217 218 case "througput_server": 219 fallthrough 220 case "local_thr": 221 doLocalThroughput(args[1:]) 222 223 case "inproc_thr": 224 doInprocThr(args[1:]) 225 226 case "inproc_lat": 227 doInprocLat(args[1:]) 228 229 case "inproc_reqlat": 230 doInprocReqRepLatency(args[1:]) 231 232 default: 233 args = args[1:] 234 } 235 } 236 usage() 237 }