add root directive cpu_affinity, to set the cpu affinity of srs
正在显示
2 个修改的文件
包含
25 行增加
和
3 行删除
@@ -65,6 +65,9 @@ asprocess off; | @@ -65,6 +65,9 @@ asprocess off; | ||
65 | # whether using build-in speex to aac transcoding | 65 | # whether using build-in speex to aac transcoding |
66 | # default: off | 66 | # default: off |
67 | speex2aac off; | 67 | speex2aac off; |
68 | +# set cpu affinity,the index of the cpu core,0,1,2,... | ||
69 | +# default -1,don't set affinity | ||
70 | +cpu_affinity -1; | ||
68 | 71 | ||
69 | ############################################################################################# | 72 | ############################################################################################# |
70 | # heartbeat/stats sections | 73 | # heartbeat/stats sections |
@@ -47,6 +47,10 @@ using namespace std; | @@ -47,6 +47,10 @@ using namespace std; | ||
47 | #include <srs_app_utility.hpp> | 47 | #include <srs_app_utility.hpp> |
48 | #include <srs_core_performance.hpp> | 48 | #include <srs_core_performance.hpp> |
49 | #include "../../objs/version.h" | 49 | #include "../../objs/version.h" |
50 | +#ifndef __USE_GNU | ||
51 | +#define __USE_GNU | ||
52 | +#endif | ||
53 | +#include<sched.h> | ||
50 | 54 | ||
51 | using namespace _srs_internal; | 55 | using namespace _srs_internal; |
52 | 56 | ||
@@ -1007,8 +1011,6 @@ int SrsConfig::reload_conf(SrsConfig* conf) | @@ -1007,8 +1011,6 @@ int SrsConfig::reload_conf(SrsConfig* conf) | ||
1007 | return ret; | 1011 | return ret; |
1008 | } | 1012 | } |
1009 | 1013 | ||
1010 | - set_config_static(); | ||
1011 | - | ||
1012 | return ret; | 1014 | return ret; |
1013 | } | 1015 | } |
1014 | 1016 | ||
@@ -1584,6 +1586,7 @@ int SrsConfig::check_config() | @@ -1584,6 +1586,7 @@ int SrsConfig::check_config() | ||
1584 | && n != "http_api" && n != "stats" && n != "vhost" && n != "pithy_print_ms" | 1586 | && n != "http_api" && n != "stats" && n != "vhost" && n != "pithy_print_ms" |
1585 | && n != "http_stream" && n != "http_server" && n != "stream_caster" | 1587 | && n != "http_stream" && n != "http_server" && n != "stream_caster" |
1586 | && n != "utc_time" && n != "work_dir" && n != "asprocess" && n != "speex2aac" | 1588 | && n != "utc_time" && n != "work_dir" && n != "asprocess" && n != "speex2aac" |
1589 | + && n != "cpu_affinity" | ||
1587 | ) { | 1590 | ) { |
1588 | ret = ERROR_SYSTEM_CONFIG_INVALID; | 1591 | ret = ERROR_SYSTEM_CONFIG_INVALID; |
1589 | srs_error("unsupported directive %s, ret=%d", n.c_str(), ret); | 1592 | srs_error("unsupported directive %s, ret=%d", n.c_str(), ret); |
@@ -2102,7 +2105,23 @@ void SrsConfig::set_config_static() | @@ -2102,7 +2105,23 @@ void SrsConfig::set_config_static() | ||
2102 | } | 2105 | } |
2103 | else | 2106 | else |
2104 | _speex2aac = false; | 2107 | _speex2aac = false; |
2105 | - | 2108 | + |
2109 | + conf = root->get("cpu_affinity"); | ||
2110 | + int cpu_index = -1; | ||
2111 | + if(conf){ | ||
2112 | + cpu_index = atoi(conf->arg0().c_str()); | ||
2113 | + } | ||
2114 | + if(cpu_index >= 0){ | ||
2115 | + cpu_set_t mask; | ||
2116 | + CPU_ZERO(&mask); | ||
2117 | + CPU_SET(cpu_index, &mask); | ||
2118 | + if (sched_setaffinity(0, sizeof(mask), &mask) == -1){ | ||
2119 | + srs_error("error when set cpu affinity to CPU:%d",cpu_index); | ||
2120 | + } | ||
2121 | + else{ | ||
2122 | + srs_trace("success in set cpu affinity to CPU:%d",cpu_index); | ||
2123 | + } | ||
2124 | + } | ||
2106 | } | 2125 | } |
2107 | 2126 | ||
2108 | int SrsConfig::parse_buffer(SrsConfigBuffer* buffer) | 2127 | int SrsConfig::parse_buffer(SrsConfigBuffer* buffer) |
-
请 注册 或 登录 后发表评论