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

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)获取物理页个数


你可能感兴趣的:(【base库学习】进程绑定cpu方法)