bench_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package yamux
  2. import (
  3. "fmt"
  4. "testing"
  5. )
  6. func BenchmarkPing(b *testing.B) {
  7. client, server := testClientServer()
  8. defer client.Close()
  9. defer server.Close()
  10. for i := 0; i < b.N; i++ {
  11. rtt, err := client.Ping()
  12. if err != nil {
  13. b.Fatalf("err: %v", err)
  14. }
  15. if rtt == 0 {
  16. b.Fatalf("bad: %v", rtt)
  17. }
  18. }
  19. }
  20. func BenchmarkAccept(b *testing.B) {
  21. client, server := testClientServer()
  22. defer client.Close()
  23. defer server.Close()
  24. go func() {
  25. for i := 0; i < b.N; i++ {
  26. stream, err := server.AcceptStream()
  27. if err != nil {
  28. return
  29. }
  30. stream.Close()
  31. }
  32. }()
  33. for i := 0; i < b.N; i++ {
  34. stream, err := client.Open()
  35. if err != nil {
  36. b.Fatalf("err: %v", err)
  37. }
  38. stream.Close()
  39. }
  40. }
  41. func BenchmarkSendRecv(b *testing.B) {
  42. client, server := testClientServer()
  43. defer client.Close()
  44. defer server.Close()
  45. sendBuf := make([]byte, 512)
  46. recvBuf := make([]byte, 512)
  47. doneCh := make(chan struct{})
  48. go func() {
  49. stream, err := server.AcceptStream()
  50. if err != nil {
  51. return
  52. }
  53. defer stream.Close()
  54. for i := 0; i < b.N; i++ {
  55. if _, err := stream.Read(recvBuf); err != nil {
  56. b.Fatalf("err: %v", err)
  57. }
  58. }
  59. close(doneCh)
  60. }()
  61. stream, err := client.Open()
  62. if err != nil {
  63. b.Fatalf("err: %v", err)
  64. }
  65. defer stream.Close()
  66. for i := 0; i < b.N; i++ {
  67. if _, err := stream.Write(sendBuf); err != nil {
  68. b.Fatalf("err: %v", err)
  69. }
  70. }
  71. <-doneCh
  72. }
  73. func BenchmarkSendRecvLarge(b *testing.B) {
  74. client, server := testClientServer()
  75. defer client.Close()
  76. defer server.Close()
  77. const sendSize = 512 * 1024 * 1024
  78. const recvSize = 4 * 1024
  79. sendBuf := make([]byte, sendSize)
  80. recvBuf := make([]byte, recvSize)
  81. b.ResetTimer()
  82. recvDone := make(chan struct{})
  83. go func() {
  84. stream, err := server.AcceptStream()
  85. if err != nil {
  86. return
  87. }
  88. defer stream.Close()
  89. for i := 0; i < b.N; i++ {
  90. for j := 0; j < sendSize/recvSize; j++ {
  91. if _, err := stream.Read(recvBuf); err != nil {
  92. b.Fatalf("err: %v", err)
  93. }
  94. }
  95. fmt.Printf("Capacity of rcv buffer = %v, length of rcv window = %v\n", stream.recvBuf.Cap(), stream.recvWindow)
  96. }
  97. close(recvDone)
  98. }()
  99. stream, err := client.Open()
  100. if err != nil {
  101. b.Fatalf("err: %v", err)
  102. }
  103. defer stream.Close()
  104. for i := 0; i < b.N; i++ {
  105. if _, err := stream.Write(sendBuf); err != nil {
  106. b.Fatalf("err: %v", err)
  107. }
  108. }
  109. <-recvDone
  110. }