源码解读如何提高RGW最大并发数
源码解读如何提高RGW最大并发数
秦牧羊 发表于6个月前
源码解读如何提高RGW最大并发数
  • 发表于 6个月前
  • 阅读 49
  • 收藏 0
  • 点赞 0
  • 评论 4

腾讯云 技术升级10大核心产品年终让利>>>   

源码解读如何提高RGW最大并发数

以rgw服务的main()为入口,查看整个fastcgi的初始化过程,代码如下

#src/rgw/rgw_main.cc
int main(int argc, const char **argv)
    if (framework == "fastcgi" || framework == "fcgi") {
      RGWProcessEnv fcgi_pe = { store, &rest, olog, 0 };

      fe = new RGWFCGXFrontend(fcgi_pe, config);
      
    dout(0) << "starting handler: " << fiter->first << dendl;
    int r = fe->init(); #调用RGWFCGXFrontend的init()方法

再看init()方法构建了一个RGWFCGXProcess,并将rgw_thread_pool_size作为实参传递进去。

#src/rgw/rgw_frontend.h
class RGWFCGXFrontend : public RGWProcessFrontend {
public:
  RGWFCGXFrontend(RGWProcessEnv& pe, RGWFrontendConfig* _conf)
    : RGWProcessFrontend(pe, _conf) {}

  int init() {
    pprocess = new RGWFCGXProcess(g_ceph_context, &env,
				  g_conf->rgw_thread_pool_size, conf);
    return 0;
  }
}; 

默认rgw_thread_pool_size为100,代码定义如下

#src/common/config_opts.h
OPTION(rgw_thread_pool_size, OPT_INT, 100) 

通过RGWFCGXProcess的构造函数发现max_connections=num_threads + (num_threads >> 3),也就是说默认情况下max_connections=100+1=101,代码注释中也提到这是为了确保能够尽可能多的处理请求。

#src/rgw/rgw_process.h
class RGWFCGXProcess : public RGWProcess {
	int max_connections;
public:

  /* have a bit more connections than threads so that requests are
   * still accepted even if we're still processing older requests */
  RGWFCGXProcess(CephContext* cct, RGWProcessEnv* pe, int num_threads,
		 RGWFrontendConfig* _conf)
    : RGWProcess(cct, pe, num_threads, _conf),
      max_connections(num_threads + (num_threads >> 3))
    {}

  void run();
  void handle_request(RGWRequest* req);
};

所以num_threads控制着max_connections的数量,如果你想提高单个rgw进程的最大并发数量,需要调高rgw_thread_pool_size。

共有 人打赏支持
粉丝 64
博文 57
码字总数 28980
评论 (4)
dengxiafub
max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?
秦牧羊

引用来自“dengxiafub”的评论

max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?

回复@dengxiafub : 位移运算
dengxiafub

引用来自“秦牧羊”的评论

引用来自“dengxiafub”的评论

max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?

回复@dengxiafub : 位移运算
@秦牧羊 那么max_connections的结果应该是max_connections=100+12=112 ?
秦牧羊

引用来自“dengxiafub”的评论

引用来自“秦牧羊”的评论

引用来自“dengxiafub”的评论

max_connections=num_threads + (num_threads >> 3),其中,num_threads=100,那么(num_threads >> 3 = 12 ?

回复@dengxiafub : 位移运算
@秦牧羊 那么max_connections的结果应该是max_connections=100+12=112 ?

回复@dengxiafub : y
×
秦牧羊
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: