cache 的sys接口在/sys/devices/system/cpu/cpu0/cache/ 如下图所示:
这里以index0 为例,可以看到图中的熟悉。具体的code在driver/base/cacheinfo.c 中
static const struct attribute_group cache_default_group = {
.attrs = cache_default_attrs,
.is_visible = cache_default_attrs_is_visible,
};
static struct attribute *cache_default_attrs[] = {
&dev_attr_id.attr,
&dev_attr_type.attr,
&dev_attr_level.attr,
&dev_attr_shared_cpu_map.attr,
&dev_attr_shared_cpu_list.attr,
&dev_attr_coherency_line_size.attr,
&dev_attr_ways_of_associativity.attr,
&dev_attr_number_of_sets.attr,
&dev_attr_size.attr,
&dev_attr_allocation_policy.attr,
&dev_attr_write_policy.attr,
&dev_attr_physical_line_partition.attr,
NULL
};
可以看到在看到在cache_default_attrs中定义的attrs在终端上没有显示,这是因为在定义cache_default_attrs的时候有一个成员函数is_visible 来决定那些attrs是否
可以被看到。
static umode_t
cache_default_attrs_is_visible(struct kobject *kobj,
struct attribute *attr, int unused)
{
struct device *dev = kobj_to_dev(kobj);
struct cacheinfo *this_leaf = dev_get_drvdata(dev);
const struct cpumask *mask = &this_leaf->shared_cpu_map;
umode_t mode = attr->mode;
#以id 为例这个if 条件在我的平台上不成立,因此这里返回0,所以就会在sys接口中看不到id
if ((attr == &dev_attr_id.attr) && (this_leaf->attributes & CACHE_ID))
return mode;
return 0;
}