Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Loadtest: Using pysmb to build a load test on a SMB server. #75

Merged
merged 6 commits into from
Apr 15, 2024

Conversation

spuiuk
Copy link
Collaborator

@spuiuk spuiuk commented Mar 25, 2024

A simple load test

We use python threads to open up several consecutive connections
on the SMB server and perform either open/write, open/read and delete
operations with an interval of 0-0.5 seconds between each operation.
The tests are run for fixed duration of time before we stop and
print out the stats for the number of operations performed

This at the moment is a proof of concept of how we can setup a load test. We are still waiting on #74 to be ready before we can use this change.

The changes proposed are in the last commit. For this code, we set up 100 concurrent connections running for 30 seconds.

depends on #76

@spuiuk
Copy link
Collaborator Author

spuiuk commented Mar 28, 2024

rebasing on PR #76 to use the pysmb python module instead.

Copy link

dpulls bot commented Mar 31, 2024

🎉 All dependencies have been resolved !

@spuiuk spuiuk changed the title Loadtest: Using pysmbc to build a load test on a SMB server. Loadtest: Using pysmb to build a load test on a SMB server. Mar 31, 2024
@spuiuk spuiuk force-pushed the loadtest branch 4 times, most recently from 238ba0a to e125389 Compare April 4, 2024 15:21
Copy link

dpulls bot commented Apr 5, 2024

🎉 All dependencies have been resolved !

@spuiuk
Copy link
Collaborator Author

spuiuk commented Apr 8, 2024

Interesting observations:

  1. cephfs and cephfs-vfs show very similar results with a 1000 clients.
  2. gpfs-vfs seems to be much faster than the gpfs-default but still slower than cephfs.
  3. cephfs seems to be faster that xfs in this particular test.

I am still not convinced that the loading test is picking up errors well. More testing is required.

The outputs from the loading test.

cephfs
______________ test_loading[192.168.123.10-share-cephfs-default] _______________
----------------------------- Captured stdout call -----------------------------
Process # 1 100 Connections: read: 3127 write: 1434 delete: 1045 error: 0 client_error: 0
Process # 0 100 Connections: read: 3155 write: 1445 delete: 1011 error: 0 client_error: 0
Process # 2 100 Connections: read: 3170 write: 1451 delete: 1018 error: 0 client_error: 0
Process # 8 100 Connections: read: 3116 write: 1485 delete: 1023 error: 0 client_error: 0
Process # 9 100 Connections: read: 3181 write: 1429 delete: 1028 error: 0 client_error: 0
Process # 3 100 Connections: read: 3095 write: 1421 delete: 1083 error: 0 client_error: 0
Process # 5 100 Connections: read: 3132 write: 1415 delete: 1033 error: 0 client_error: 0
Process # 4 100 Connections: read: 3071 write: 1440 delete: 1052 error: 0 client_error: 0
Process # 7 100 Connections: read: 3219 write: 1392 delete: 991 error: 0 client_error: 0
Process # 6 100 Connections: read: 3108 write: 1433 delete: 1042 error: 0 client_error: 0
Total: read: 31374 write: 14345 delete: 10326 error: 0 client_error: 0

ceph-vfs
________________ test_loading[192.168.123.10-share-cephfs-vfs] _________________
----------------------------- Captured stdout call -----------------------------
Process # 1 100 Connections: read: 3041 write: 1380 delete: 1016 error: 0 client_error: 0
Process # 2 100 Connections: read: 3042 write: 1380 delete: 1003 error: 0 client_error: 0
Process # 3 100 Connections: read: 3020 write: 1392 delete: 1030 error: 0 client_error: 0
Process # 5 100 Connections: read: 3065 write: 1363 delete: 991 error: 0 client_error: 0
Process # 7 100 Connections: read: 2990 write: 1411 delete: 1007 error: 0 client_error: 0
Process # 0 100 Connections: read: 3031 write: 1377 delete: 984 error: 0 client_error: 0
Process # 4 100 Connections: read: 2990 write: 1422 delete: 1004 error: 0 client_error: 0
Process # 6 100 Connections: read: 2949 write: 1429 delete: 1057 error: 0 client_error: 0
Process # 8 100 Connections: read: 3004 write: 1403 delete: 1018 error: 0 client_error: 0
Process # 9 100 Connections: read: 3013 write: 1409 delete: 971 error: 0 client_error: 0
Total: read: 30145 write: 13966 delete: 10081 error: 0 client_error: 0

xfs
________________ test_loading[192.168.123.10-share-xfs-default] ________________
----------------------------- Captured stdout call -----------------------------
Process # 3 100 Connections: read: 2629 write: 1215 delete: 829 error: 0 client_error: 0
Process # 6 100 Connections: read: 2611 write: 1201 delete: 846 error: 0 client_error: 0
Process # 4 100 Connections: read: 2576 write: 1224 delete: 881 error: 0 client_error: 0
Process # 1 100 Connections: read: 2584 write: 1221 delete: 847 error: 0 client_error: 0
Process # 0 100 Connections: read: 2574 write: 1232 delete: 868 error: 0 client_error: 0
Process # 8 100 Connections: read: 2567 write: 1216 delete: 894 error: 0 client_error: 0
Process # 9 100 Connections: read: 2608 write: 1232 delete: 825 error: 0 client_error: 0
Process # 2 100 Connections: read: 2547 write: 1243 delete: 872 error: 0 client_error: 0
Process # 7 100 Connections: read: 2556 write: 1233 delete: 883 error: 0 client_error: 0
Process # 5 100 Connections: read: 2522 write: 1231 delete: 879 error: 0 client_error: 0
Total: read: 25774 write: 12248 delete: 8624 error: 0 client_error: 0

gpfs
_______________ test_loading[192.168.123.20-share-gpfs-default] ________________
----------------------------- Captured stdout call -----------------------------
Process # 7 100 Connections: read: 1499 write: 815 delete: 485 error: 0 client_error: 0
Process # 6 100 Connections: read: 1533 write: 788 delete: 493 error: 0 client_error: 0
Process # 8 100 Connections: read: 1537 write: 791 delete: 483 error: 0 client_error: 0
Process # 3 100 Connections: read: 1504 write: 804 delete: 488 error: 0 client_error: 0
Process # 5 100 Connections: read: 1474 write: 807 delete: 520 error: 0 client_error: 0
Process # 4 100 Connections: read: 1527 write: 784 delete: 499 error: 0 client_error: 0
Process # 1 100 Connections: read: 1503 write: 791 delete: 514 error: 0 client_error: 0
Process # 9 100 Connections: read: 1481 write: 798 delete: 505 error: 0 client_error: 0
Process # 2 100 Connections: read: 1466 write: 785 delete: 519 error: 0 client_error: 0
Process # 0 100 Connections: read: 1502 write: 763 delete: 502 error: 0 client_error: 0
Total: read: 15026 write: 7926 delete: 5008 error: 0 client_error: 0

gpfs-vfs
_________________ test_loading[192.168.123.20-share-gpfs-vfs] __________________
----------------------------- Captured stdout call -----------------------------
Process # 2 100 Connections: read: 3086 write: 1446 delete: 1049 error: 0 client_error: 0
Process # 1 100 Connections: read: 3123 write: 1428 delete: 1041 error: 0 client_error: 0
Process # 4 100 Connections: read: 3099 write: 1436 delete: 1032 error: 0 client_error: 0
Process # 6 100 Connections: read: 3055 write: 1428 delete: 1068 error: 0 client_error: 0
Process # 9 100 Connections: read: 3118 write: 1454 delete: 1001 error: 0 client_error: 0
Process # 0 100 Connections: read: 3088 write: 1416 delete: 1054 error: 0 client_error: 0
Process # 8 100 Connections: read: 3111 write: 1429 delete: 1023 error: 0 client_error: 0
Process # 5 100 Connections: read: 3053 write: 1414 delete: 1053 error: 0 client_error: 0
Process # 7 100 Connections: read: 3026 write: 1466 delete: 1048 error: 0 client_error: 0
Process # 3 100 Connections: read: 3076 write: 1408 delete: 1054 error: 0 client_error: 0
Total: read: 30835 write: 14325 delete: 10423 error: 0 client_error: 0

@spuiuk
Copy link
Collaborator Author

spuiuk commented Apr 8, 2024

A second run of the tests

  1. xfs seems to be still slightly lower than the other filesystems. This could be because actual backend io is limited to one machine for xfs vs multiple machines for the other distributed filesystems. Though latency should be lower for xfs.
  2. both variants of gpfs are equally fast and similat to cephfs levels.
  3. cephfs and cephfs-vfs are very similar in performance.

xfs:
________________ test_loading[192.168.123.10-share-xfs-default] ________________
----------------------------- Captured stdout call -----------------------------
Process # 4 100 Connections: read: 2881 write: 1310 delete: 969 error: 0 client_error: 0
Process # 3 100 Connections: read: 2883 write: 1332 delete: 931 error: 0 client_error: 0
Process # 6 100 Connections: read: 2847 write: 1339 delete: 951 error: 0 client_error: 0
Process # 2 100 Connections: read: 2870 write: 1350 delete: 941 error: 0 client_error: 0
Process # 8 100 Connections: read: 2890 write: 1300 delete: 953 error: 0 client_error: 0
Process # 1 100 Connections: read: 2921 write: 1322 delete: 929 error: 0 client_error: 0
Process # 0 100 Connections: read: 2912 write: 1301 delete: 931 error: 0 client_error: 0
Process # 7 100 Connections: read: 2899 write: 1341 delete: 947 error: 0 client_error: 0
Process # 9 100 Connections: read: 2999 write: 1285 delete: 902 error: 0 client_error: 0
Process # 5 100 Connections: read: 2875 write: 1348 delete: 964 error: 0 client_error: 0
Total: read: 28977 write: 13228 delete: 9418 error: 0 client_error: 0

cephfs:
______________ test_loading[192.168.123.10-share-cephfs-default] _______________
----------------------------- Captured stdout call -----------------------------
Process # 2 100 Connections: read: 3187 write: 1473 delete: 1072 error: 0 client_error: 0
Process # 0 100 Connections: read: 3262 write: 1456 delete: 1065 error: 0 client_error: 0
Process # 6 100 Connections: read: 3272 write: 1435 delete: 1052 error: 0 client_error: 0
Process # 8 100 Connections: read: 3224 write: 1462 delete: 1069 error: 0 client_error: 0
Process # 3 100 Connections: read: 3199 write: 1447 delete: 1106 error: 0 client_error: 0
Process # 4 100 Connections: read: 3222 write: 1471 delete: 1074 error: 0 client_error: 0
Process # 1 100 Connections: read: 3244 write: 1455 delete: 1077 error: 0 client_error: 0
Process # 7 100 Connections: read: 3162 write: 1516 delete: 1106 error: 0 client_error: 0
Process # 5 100 Connections: read: 3248 write: 1465 delete: 1068 error: 0 client_error: 0
Process # 9 100 Connections: read: 3266 write: 1437 delete: 1049 error: 0 client_error: 0
Total: read: 32286 write: 14617 delete: 10738 error: 0 client_error: 0

cephfs-vfs
________________ test_loading[192.168.123.10-share-cephfs-vfs] _________________
----------------------------- Captured stdout call -----------------------------
Process # 4 100 Connections: read: 3102 write: 1442 delete: 1061 error: 0 client_error: 0
Process # 5 100 Connections: read: 3101 write: 1475 delete: 1025 error: 0 client_error: 0
Process # 6 100 Connections: read: 3149 write: 1389 delete: 1058 error: 0 client_error: 0
Process # 0 100 Connections: read: 3145 write: 1419 delete: 1052 error: 0 client_error: 0
Process # 7 100 Connections: read: 3146 write: 1419 delete: 1026 error: 0 client_error: 0
Process # 3 100 Connections: read: 3130 write: 1436 delete: 1053 error: 0 client_error: 0
Process # 1 100 Connections: read: 3139 write: 1451 delete: 1036 error: 0 client_error: 0
Process # 8 100 Connections: read: 3129 write: 1424 delete: 1045 error: 0 client_error: 0
Process # 2 100 Connections: read: 3101 write: 1467 delete: 1025 error: 0 client_error: 0
Process # 9 100 Connections: read: 3129 write: 1446 delete: 1045 error: 0 client_error: 0
Total: read: 31271 write: 14368 delete: 10426 error: 0 client_error: 0

gpfs:
_______________ test_loading[192.168.123.20-share-gpfs-default] ________________
----------------------------- Captured stdout call -----------------------------
Process # 6 100 Connections: read: 3239 write: 1493 delete: 1142 error: 0 client_error: 0
Process # 7 100 Connections: read: 3248 write: 1508 delete: 1135 error: 0 client_error: 0
Process # 2 100 Connections: read: 3362 write: 1450 delete: 1064 error: 0 client_error: 0
Process # 8 100 Connections: read: 3300 write: 1472 delete: 1114 error: 0 client_error: 0
Process # 1 100 Connections: read: 3301 write: 1495 delete: 1091 error: 0 client_error: 0
Process # 4 100 Connections: read: 3271 write: 1490 delete: 1111 error: 0 client_error: 0
Process # 3 100 Connections: read: 3227 write: 1514 delete: 1136 error: 0 client_error: 0
Process # 0 100 Connections: read: 3302 write: 1477 delete: 1094 error: 0 client_error: 0
Process # 9 100 Connections: read: 3329 write: 1482 delete: 1081 error: 0 client_error: 0
Process # 5 100 Connections: read: 3293 write: 1504 delete: 1098 error: 0 client_error: 0
Total: read: 32872 write: 14885 delete: 11066 error: 0 client_error: 0

gpfs-vfs:
_________________ test_loading[192.168.123.20-share-gpfs-vfs] __________________
----------------------------- Captured stdout call -----------------------------
Process # 7 100 Connections: read: 3234 write: 1530 delete: 1119 error: 0 client_error: 0
Process # 9 100 Connections: read: 3315 write: 1479 delete: 1087 error: 0 client_error: 0
Process # 2 100 Connections: read: 3250 write: 1534 delete: 1084 error: 0 client_error: 0
Process # 6 100 Connections: read: 3341 write: 1473 delete: 1072 error: 0 client_error: 0
Process # 5 100 Connections: read: 3296 write: 1500 delete: 1086 error: 0 client_error: 0
Process # 0 100 Connections: read: 3295 write: 1493 delete: 1113 error: 0 client_error: 0
Process # 1 100 Connections: read: 3273 write: 1519 delete: 1089 error: 0 client_error: 0
Process # 3 100 Connections: read: 3274 write: 1486 delete: 1096 error: 0 client_error: 0
Process # 8 100 Connections: read: 3212 write: 1527 delete: 1134 error: 0 client_error: 0
Process # 4 100 Connections: read: 3264 write: 1497 delete: 1091 error: 0 client_error: 0
Total: read: 32754 write: 15038 delete: 10971 error: 0 client_error: 0

@spuiuk spuiuk force-pushed the loadtest branch 4 times, most recently from 2e464c0 to 5a78ab3 Compare April 10, 2024 14:22
Timeout errors for operations are raised as
smb.smb_structs.OperationFailure
Not connected errors are raised as
base.NotConnectedError

We catch them and raise them as more generic errors instead.

Signed-off-by: Sachin Prabhu <[email protected]>
These tests load the SMB server and check the results.

Signed-off-by: Sachin Prabhu <[email protected]>
This is in preparation for writing larger files over SMB.

Signed-off-by: Sachin Prabhu <[email protected]>
Allow us to create a temporary file of a certain size by passing the
filesize paramter.

Signed-off-by: Sachin Prabhu <[email protected]>
@spuiuk spuiuk force-pushed the loadtest branch 3 times, most recently from 0d475da to 0472471 Compare April 10, 2024 16:12
@spuiuk
Copy link
Collaborator Author

spuiuk commented Apr 10, 2024

/retest all

1 similar comment
@spuiuk
Copy link
Collaborator Author

spuiuk commented Apr 10, 2024

/retest all

For generating a better small file load, instead of a simple text
string, use a 4K files to generate the read/write loads.

Also educe number of threads/processs to 50
resulting in 50 x 10 = 500 simultaneous connections.

Signed-off-by: Sachin Prabhu <[email protected]>
@spuiuk
Copy link
Collaborator Author

spuiuk commented Apr 11, 2024

It appears that ceph.vfs tests do not proceed towards completion.

Give below are the test results for xfs, cephfs, gpfs and gpfs-vfs respectively.

10 processes x 5 threads each = 50 simultaneous connection
writing/reading 16Gb files.

xfs
________________ test_loading[192.168.123.10-share-xfs-default] ________________
----------------------------- Captured stdout call -----------------------------
Process #5 5 Connections: read: 81 write: 52 delete: 38 error: 0 client_error: 0
Process #9 5 Connections: read: 91 write: 42 delete: 30 error: 0 client_error: 0
Process #7 5 Connections: read: 89 write: 44 delete: 25 error: 0 client_error: 0
Process #0 5 Connections: read: 91 write: 47 delete: 31 error: 0 client_error: 0
Process #3 5 Connections: read: 82 write: 53 delete: 28 error: 0 client_error: 0
Process #1 5 Connections: read: 98 write: 44 delete: 27 error: 0 client_error: 0
Process #4 5 Connections: read: 93 write: 47 delete: 28 error: 0 client_error: 0
Process #2 5 Connections: read: 74 write: 55 delete: 35 error: 0 client_error: 0
Process #6 5 Connections: read: 84 write: 45 delete: 37 error: 0 client_error: 0
Process #8 5 Connections: read: 83 write: 56 delete: 29 error: 0 client_error: 0
Total: read: 866 write: 485 delete: 308 error: 0 client_error: 0
___________ test_check_mnt_stress[192.168.123.10-share-xfs-default] ____________

cephfs
______________ test_loading[192.168.123.10-share-cephfs-default] _______________
----------------------------- Captured stdout call -----------------------------
Process #5 5 Connections: read: 32 write: 19 delete: 3 error: 0 client_error: 0
Process #2 5 Connections: read: 31 write: 20 delete: 13 error: 0 client_error: 0
Process #0 5 Connections: read: 28 write: 21 delete: 11 error: 0 client_error: 0
Process #1 5 Connections: read: 30 write: 20 delete: 11 error: 0 client_error: 0
Process #3 5 Connections: read: 34 write: 20 delete: 11 error: 0 client_error: 0
Process #4 5 Connections: read: 19 write: 26 delete: 9 error: 0 client_error: 0
Process #6 5 Connections: read: 32 write: 21 delete: 10 error: 0 client_error: 0
Process #7 5 Connections: read: 23 write: 24 delete: 8 error: 0 client_error: 0
Process #9 5 Connections: read: 44 write: 21 delete: 9 error: 0 client_error: 0
Process #8 5 Connections: read: 24 write: 19 delete: 9 error: 0 client_error: 0
Total: read: 297 write: 211 delete: 94 error: 0 client_error: 0
=========================== short test summary info ============================

gpfs
_______________ test_loading[192.168.123.20-share-gpfs-default] ________________
----------------------------- Captured stdout call -----------------------------
Process #4 5 Connections: read: 32 write: 25 delete: 10 error: 0 client_error: 0
Process #1 5 Connections: read: 32 write: 24 delete: 13 error: 0 client_error: 0
Process #6 5 Connections: read: 34 write: 24 delete: 9 error: 0 client_error: 0
Process #3 5 Connections: read: 37 write: 21 delete: 11 error: 0 client_error: 0
Process #7 5 Connections: read: 38 write: 21 delete: 11 error: 0 client_error: 0
Process #9 5 Connections: read: 37 write: 24 delete: 14 error: 0 client_error: 0
Process #8 5 Connections: read: 36 write: 25 delete: 8 error: 0 client_error: 0
Process #2 5 Connections: read: 40 write: 23 delete: 14 error: 0 client_error: 0
Process #5 5 Connections: read: 38 write: 23 delete: 17 error: 0 client_error: 0
Process #0 5 Connections: read: 47 write: 21 delete: 10 error: 0 client_error: 0
Total: read: 371 write: 231 delete: 117 error: 0 client_error: 0

gpfs-vfs
_________________ test_loading[192.168.123.20-share-gpfs-vfs] __________________
----------------------------- Captured stdout call -----------------------------
Process #9 5 Connections: read: 34 write: 24 delete: 8 error: 0 client_error: 0
Process #1 5 Connections: read: 35 write: 18 delete: 8 error: 0 client_error: 0
Process #3 5 Connections: read: 32 write: 20 delete: 9 error: 0 client_error: 0
Process #4 5 Connections: read: 34 write: 23 delete: 10 error: 0 client_error: 0
Process #5 5 Connections: read: 37 write: 24 delete: 10 error: 0 client_error: 0
Process #6 5 Connections: read: 36 write: 20 delete: 9 error: 0 client_error: 0
Process #2 5 Connections: read: 32 write: 23 delete: 11 error: 0 client_error: 0
Process #0 5 Connections: read: 39 write: 18 delete: 8 error: 0 client_error: 0
Process #8 5 Connections: read: 27 write: 26 delete: 21 error: 0 client_error: 0
Process #7 5 Connections: read: 32 write: 21 delete: 13 error: 0 client_error: 0
Total: read: 338 write: 217 delete: 107 error: 0 client_error: 0
___________ test_check_io_consistency[192.168.123.20-share-gpfs-vfs] ___________

@spuiuk
Copy link
Collaborator Author

spuiuk commented Apr 11, 2024

The code to test a number of simultaneous connections to the Samba server is nearly complete and is in position to be reviewed. The test with 50 simultaneous connections writing 16Mb files appear to work for most filesystems except for cephfs-vfs.

We can further tune the number of connections for cephfs-vfs in later PRs.

Copy link
Collaborator

@synarete synarete left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks fine, two minor comments

@@ -26,17 +26,21 @@
# total number of processes
total_processes: int = 10
# each with this number of threads
per_process_threads: int = 100
per_process_threads: int = 50
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I liked 100 (a round number).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have hit the limits of number of files open per process in earlier tests. So to avoid hitting resource limits, I thought it would be better to limit the number of threads per process.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fair enough

# running the connection test for this many seconds
test_runtime: int = 30
# size of test files
test_file_size = 4 * 1024 # 4k size
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Python style: 4 * (2 ** 10)

@spuiuk
Copy link
Collaborator Author

spuiuk commented Apr 14, 2024

/retest centos-ci/cephfs.vfs

@spuiuk spuiuk merged commit 8a6d710 into samba-in-kubernetes:main Apr 15, 2024
7 of 10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants