【base库学习】进程绑定cpu方法

来源:互联网 发布:sybase数据库学习 编辑:程序博客网 时间:2024/06/05 11:43
affinity.h
#ifndef BASE_AFFINITY_H_#define BASE_AFFINITY_H_namespace base {  void ApplyAffinitySetting();}  // namespace base#endif  // BASE_AFFINITY_H_

affinity.cc

#include "base/affinity.h"#include <unistd.h>  // gcc 4.7 is needed#include <sys/sysinfo.h>#include <sched.h>#include <string>#include <vector>#include "base/flags.h"#include "base/string_util.h"DEFINE_string(    affinity_setting,    "",    "Affinity setting: specify the cpu ids, seperated by comma.E.g.: '0,1'");namespace base {  void ApplyAffinitySetting() {    if (FLAGS_affinity_setting.empty()) {      return;    }    std::vector<std::string> results;    SplitString(FLAGS_affinity_setting, ',', &results);    int cpu_num = sysconf(_SC_NPROCESSORS_CONF);    cpu_set_t mask;    CPU_ZERO(&mask);    for (int i = 0; i < results.size(); i++) {      int cpu_id = StringToInt(results[i]);      CHECK_LT(cpu_id, cpu_num);      CPU_SET(cpu_id, &mask);    }    LOG(INFO) << "Set CPU affinity " << FLAGS_affinity_setting;    if (sched_setaffinity(0, sizeof(mask), &mask)) {      LOG(WARNING) << "Could not set CPU affinity " << FLAGS_affinity_setting;    }  }}  // namespace base

该方法主要用于实现将当前进程绑定到指定的CPU上面执行。

主要实现方法ApplyAffinitySetting()

sysconf是<sys/sysinfo.h>中的方法,主要获取选项的当前值。

sysconf(_SC_NPROCESSORS_CONF)获取cpu个数

sysconf(_SC_PAGESIZE)获取系统页面大小

sysconf (_SC_PHYS_PAGES)获取物理页个数


原创粉丝点击