centos7.8arm64cpu管理找不到缓存文件夹cache的问题

水上冰石 2020-11-30 11:40:38
在安装centos7.8arm64版本到树莓派4b,8g版本上的时候,成功安装,并使用。
但是没有找到/sys/devices/system/cpu/cpu0/cache 缓存相关信息的文件夹。ls -al 查看,也不存在隐藏文件夹中,也未指向其他的文件。
因为安装有docker,配置过cgroup,可能管理cpu的是使用cgroup。但是为什么会缺少cache文件夹呢?

在安装应用,比如k8s系统的时候,发现启动kubelet报错,具体原因是cpu读取缓存文件的时候报错,找不到文件夹。

具体参考过源码,具体如下:
for idx, node := range nodes {
caches, err := sysinfo.GetCacheInfo(sysFs, node.Cores[0].Threads[0])
if err != nil {
klog.Errorf("failed to get cache information for node %d: %v", node.Id, err)
continue
}
numThreadsPerCore := len(node.Cores[0].Threads)
numThreadsPerNode := len(node.Cores) * numThreadsPerCore
for _, cache := range caches {
c := info.Cache{
Size: cache.Size,
Level: cache.Level,
Type: cache.Type,
}
if cache.Cpus == numThreadsPerNode && cache.Level > 2 {
// Add a node-level cache.
nodes[idx].AddNodeCache(c)
} else if cache.Cpus == numThreadsPerCore {
// Add to each core.
nodes[idx].AddPerCoreCache(c)
}
// Ignore unknown caches.
}
}
return nodes, numCores, nil
}


func GetCacheInfo(sysFs sysfs.SysFs, id int) ([]sysfs.CacheInfo, error) {
caches, err := sysFs.GetCaches(id)
if err != nil {
return nil, err
}

info := []sysfs.CacheInfo{}
for _, cache := range caches {
if !strings.HasPrefix(cache.Name(), "index") {
continue
}
cacheInfo, err := sysFs.GetCacheInfo(id, cache.Name())
if err != nil {
return nil, err
}
info = append(info, cacheInfo)
}
return info, nil
}


func (self *realSysFs) GetCacheInfo(id int, name string) (CacheInfo, error) {
cachePath := fmt.Sprintf("%s%d/cache/%s", cacheDir, id, name)
out, err := ioutil.ReadFile(path.Join(cachePath, "/size"))
if err != nil {
return CacheInfo{}, err
}
var size uint64
n, err := fmt.Sscanf(string(out), "%dK", &size)
if err != nil || n != 1 {
return CacheInfo{}, err
}
// convert to bytes
size = size * 1024
out, err = ioutil.ReadFile(path.Join(cachePath, "/level"))
if err != nil {
return CacheInfo{}, err
}
var level int
n, err = fmt.Sscanf(string(out), "%d", &level)
if err != nil || n != 1 {
return CacheInfo{}, err
}

out, err = ioutil.ReadFile(path.Join(cachePath, "/type"))
if err != nil {
return CacheInfo{}, err
}
cacheType := strings.TrimSpace(string(out))
cpuCount, err := getCpuCount(cachePath)
if err != nil {
return CacheInfo{}, err
}
return CacheInfo{
Size: size,
Level: level,
Type: cacheType,
Cpus: cpuCount,
}, nil
}


这是读取缓存信息并使用的时候的具体源码信息。实际上,也就是经阅读,发现,是在读取cache文件,并获取缓存级别,缓存数等信息,进而计算生成的线程数。
但是读取是这样的,为什么会找不到cache文件呢?

centos7.8 arm64 cpu的缓存到底是怎么管理的?cache到底是哪个阶段创建出来的?为何会缺少缓存文件?怎么创建缓存文件呢?

我在继续寻找解决思路,请求专家一起来解决,难道是centos7.8版本的bug?
...全文
15724 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
水上冰石 2020-12-07
  • 打赏
  • 举报
回复
还没有,顶一个吧。我在深入研究centos cpu管理块,感觉有些吃力。
weixin_42142364 2020-12-06
  • 打赏
  • 举报
回复
我也遇到了这个问题,还不知道咋解决,不知楼主解决了没有
水上冰石 2020-11-30
  • 打赏
  • 举报
回复
自己顶一个,帖子别沉了

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧