Skip to content

Commit

Permalink
migrate to srs org as sb.
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed May 24, 2015
1 parent 9f6dc25 commit 5ed073c
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 38 deletions.
20 changes: 10 additions & 10 deletions README.md
@@ -1,22 +1,22 @@
st-load
SB(SRS Bench)
===========

hls/http/rtmp-play/rtmp-publish load test tool base on st(state-threads), support huge concurrency<br/>

## About

服务器负载测试工具(st-load):
服务器负载测试工具SB(SRS Bench):

1. 模拟huge并发:2G内存就可以开300k连接。基于states-threads的协程。
1. 支持HLS解析和测试,下载ts片后等待一个切片长度,模拟客户端。支持HLS点播和直播。执行程序:`./objs/st_hls_load`
1. 支持HTTP负载测试,所有并发重复下载一个http文件。可将80Gbps带宽测试的72Gbps。执行程序:`./objs/st_http_load `
1. 支持RTMP流播放测试,一个进程支持5k并发。执行程序:`./objs/st_rtmp_load`
1. 支持RTMP流推流测试,一个进程支持500个并发。执行程序:`./objs/st_rtmp_publish`
1. 支持HLS解析和测试,下载ts片后等待一个切片长度,模拟客户端。支持HLS点播和直播。执行程序:`./objs/sb_hls_load`
1. 支持HTTP负载测试,所有并发重复下载一个http文件。可将80Gbps带宽测试的72Gbps。执行程序:`./objs/sb_http_load `
1. 支持RTMP流播放测试,一个进程支持5k并发。执行程序:`./objs/sb_rtmp_load`
1. 支持RTMP流推流测试,一个进程支持500个并发。执行程序:`./objs/sb_rtmp_publish`
1. RTMP协议使用高性能服务器SRS([SimpleRtmpServer](https://github.com/winlinvip/simple-rtmp-server))的协议栈。

注意:

1. HTTP/HLS:HTTP服务器必须在头中返回Content-Length,不支持chunked方式。
1. HTTP/HLS:依赖服务器Content-Length,不支持chunked方式(chunked时会把所有内容当做body一直读)
2. 所有程序都在Linux下运行,模拟客户端运行。
3. 其他工具参考[srs-librtmp](https://github.com/winlinvip/simple-rtmp-server/wiki/v2_CN_SrsLibrtmp#srs-librtmp-examples)

Expand All @@ -25,7 +25,7 @@ hls/http/rtmp-play/rtmp-publish load test tool base on st(state-threads), suppor
```
git clone https://github.com/winlinvip/st-load.git &&
cd st-load && ./configure && make &&
./objs/st_rtmp_load -c 1 -r rtmp://127.0.0.1:1935/live/livestream
./objs/sb_rtmp_load -c 1 -r rtmp://127.0.0.1:1935/live/livestream
```

## Benchmarks
Expand Down Expand Up @@ -83,8 +83,8 @@ Mem: 2055440k total, 1304528k used, 750912k free, 182336k buffers
Swap: 2064376k total, 0k used, 2064376k free, 613848k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13091 winlin 20 0 186m 110m 1404 S 29.6 5.5 1:55.35 ./objs/st_rtmp_load -c 1000
12544 winlin 20 0 124m 22m 2080 S 20.3 1.1 1:51.51 ./objs/simple_rtmp_server
13091 winlin 20 0 186m 110m 1404 S 29.6 5.5 1:55.35 ./objs/sb_rtmp_load -c 1000
12544 winlin 20 0 124m 22m 2080 S 20.3 1.1 1:51.51 ./objs/srs

----total-cpu-usage---- -dsk/total- ---net/lo-- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
Expand Down
44 changes: 22 additions & 22 deletions configure
Expand Up @@ -77,35 +77,35 @@ help:
@echo " all build the http/hls load test tool over st(state-threads)"
clean:
(cd ${GLOBAL_DIR_OBJS}; rm -rf src st_*_load)
(cd ${GLOBAL_DIR_OBJS}; rm -rf src sb_*_load)
http: _prepare_dir
@echo "build the http load test tool over st(state-threads)"
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_http_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_http_load
rtmp: _prepare_dir
@echo "build the http load test tool over st(state-threads)"
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_rtmp_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_rtmp_load_fast
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_rtmp_publish
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_rtmp_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_rtmp_load_fast
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_rtmp_publish
hls: _prepare_dir
@echo "build the HLS load test tool over st(state-threads)"
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_hls_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_hls_load
all: _prepare_dir
@echo "build the http/hls/rtmp load test tool over st(state-threads)"
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_http_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_hls_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_rtmp_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_rtmp_load_fast
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} st_rtmp_publish
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_http_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_hls_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_rtmp_load
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_rtmp_load_fast
\$(MAKE) -f ${GLOBAL_DIR_OBJS}/${GLOBAL_FILE_MAKEFILE} sb_rtmp_publish
@echo "build ok, you can:"
@echo " ./objs/st_http_load"
@echo " ./objs/st_hls_load"
@echo " ./objs/st_rtmp_load"
@echo " ./objs/st_rtmp_load_fast"
@echo " ./objs/st_rtmp_publish"
@echo " ./objs/sb_http_load"
@echo " ./objs/sb_hls_load"
@echo " ./objs/sb_rtmp_load"
@echo " ./objs/sb_rtmp_load_fast"
@echo " ./objs/sb_rtmp_publish"
# the ./configure will generate it.
_prepare_dir:
Expand All @@ -132,7 +132,7 @@ GCC = g++
LINK = \$(GCC)
AR = ar
.PHONY: default st_http_load st_hls_load st_rtmp_load st_rtmp_load_fast st_rtmp_publish
.PHONY: default sb_http_load sb_hls_load sb_rtmp_load sb_rtmp_load_fast sb_rtmp_publish
default:
Expand Down Expand Up @@ -184,28 +184,28 @@ MAIN_ENTRANCES=("htl_main_hls_load" "htl_main_http_load" "htl_main_rtmp_load" "h
# http load test tool over st(state-threads)
ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile})
MODULE_OBJS="${CORE_OBJS[@]} ${OS_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}"
BUILD_KEY="st_http_load" APP_MAIN="htl_main_http_load" APP_NAME="st_http_load" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh
BUILD_KEY="sb_http_load" APP_MAIN="htl_main_http_load" APP_NAME="sb_http_load" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh

# rtmp play load test tool over st(state-threads)
ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile})
MODULE_OBJS="${CORE_OBJS[@]} ${OS_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}"
BUILD_KEY="st_rtmp_load" APP_MAIN="htl_main_rtmp_load" APP_NAME="st_rtmp_load" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh
BUILD_KEY="sb_rtmp_load" APP_MAIN="htl_main_rtmp_load" APP_NAME="sb_rtmp_load" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh

# rtmp play load test tool over st(state-threads)
# Remark, the fast algorithm may not work for other RTMP server, it's ok for SRS/GO-SRS.
ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile})
MODULE_OBJS="${CORE_OBJS[@]} ${OS_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}"
BUILD_KEY="st_rtmp_load_fast" APP_MAIN="htl_main_rtmp_load_fast" APP_NAME="st_rtmp_load_fast" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh
BUILD_KEY="sb_rtmp_load_fast" APP_MAIN="htl_main_rtmp_load_fast" APP_NAME="sb_rtmp_load_fast" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh

# rtmp publish load test tool over st(state-threads)
ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile})
MODULE_OBJS="${CORE_OBJS[@]} ${OS_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}"
BUILD_KEY="st_rtmp_publish" APP_MAIN="htl_main_rtmp_publish" APP_NAME="st_rtmp_publish" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh
BUILD_KEY="sb_rtmp_publish" APP_MAIN="htl_main_rtmp_publish" APP_NAME="sb_rtmp_publish" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh

# hls load test tool over direct TCP.
ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile})
MODULE_OBJS="${CORE_OBJS[@]} ${OS_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}"
BUILD_KEY="st_hls_load" APP_MAIN="htl_main_hls_load" APP_NAME="st_hls_load" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh
BUILD_KEY="sb_hls_load" APP_MAIN="htl_main_hls_load" APP_NAME="sb_hls_load" LINK_OPTIONS="-ldl" SO_PATH="" . auto/apps.sh

echo 'configure ok! '

Expand Down
12 changes: 6 additions & 6 deletions src/core/htl_core_error.hpp
Expand Up @@ -57,13 +57,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define ERROR_RTMP_INVALID_RESPONSE 603
#define ERROR_RTMP_OPEN_FLV 604

#define ProductVersion "1.0.13"
#define ProductHTTPName "Bravo HttpLoad/"ProductVersion
#define ProductHLSName "Bravo HlsLoad/"ProductVersion
#define ProductRtmpName "Bravo RtmpPlayLoad/"ProductVersion
#define ProductRtmpPublishName "Bravo RtmpPublishLoad/"ProductVersion
#define ProductVersion "1.0.14"
#define ProductHTTPName "SB(SRS Bench) HttpLoad/"ProductVersion
#define ProductHLSName "SB(SRS Bench) HlsLoad/"ProductVersion
#define ProductRtmpName "SB(SRS Bench) RtmpPlayLoad/"ProductVersion
#define ProductRtmpPublishName "SB(SRS Bench) RtmpPublishLoad/"ProductVersion
#define BuildPlatform "linux"
#define BugReportEmail "winterserver@126.com"
#define BugReportEmail "winlin@vip.126.com"

#define HTTP_HEADER_BUFFER 1024
#define HTTP_BODY_BUFFER 32*1024
Expand Down

0 comments on commit 5ed073c

Please sign in to comment.