首页 > 编程知识 正文

hadoop格式化hdfs命令,hadoop配置文件说明

时间:2023-05-05 11:22:32 阅读:153688 作者:3224

在F2FS的sysfs调节文件系统参数F2FS文件系统中,GC_min_sleep_time(GC休眠的最小时间)、min_ipu_util )就地更新的最小文件系统有关这些参数的信息,请参见LinuxdocumentationABItestingsysfs-fs-f2fs。

启动f2fs文件系统时,这些配置参数将显示在系统目录/sys/fs/f2fs/disk/下。 用户可以使用cat命令显示默认参数值,并使用echo xxx attr_name修改配置参数。

修改参数:

在文件系统的源代码中,该部分位于sysfs.c(4.9.176 )中。 每个属性都有以下结构:

struct f2fs_attr {//参数名称struct attribute attr; sysfs现实配置参数ssize_t(*show ) (struct f2fs_attr *,struct f2fs_sb_info *,char * ); sysfs中用户定义的配置参数ssize_t(*store ) (struct f2fs_attr *、struct f2fs_sb_info *、const char *、size_t ); int struct_type; int offset; int id; (; 但是,这里不是按属性列出结构,而是在宏中定义。

# define f2f s _ attr _offset (_ struct _ type,_name,_mode,_show,_store,_ offset ) _ staticstructf2fs . store=_store,_.stru re } # define f2f s _ rw _ attr (struct _ type,struct_name,name,elname ) _ f2fs _ arw elname ) ) F2FS_rw_attr ) GC_thread、f2fs_gc_kthread、GC _ rgent _ sleep f2fs _ rw _ attr (GC _ thread ) f2fs_rw_attr(GC_thread,f2fs_gc_kthread,gc_max_sleep_time,max_sleep_time ); f2fs_rw_attr(GC_thread,f2fs_gc_kthread,gc_no_gc_sleep_time,no_gc_sleep_time ); f2fs_rw_attr(GC_thread,f2fs_gc_kthread,gc_idle,gc_idle ); f2fs_rw_attr(GC_thread,f2fs_gc_kthread,gc_urgent,gc_urgent ); f2fs_rw_attr(sm_info,f2fs_sm_info,reclaim_segments,rec_prefree_segments ); f2fs_rw_attr(DCC_info,discard_cmd_control,max_small_discards,max_discards ); f2fs_rw_attr(DCC_info,discard_cmd_control,discard_granularity,discard_granularity ); f2fs_rw_attr(reserved_blocks、f2fs_sb_info、reserved_blocks、reserved_blocks ); f2fs_rw_attr(sm_info,f2fs_sm_info,batched_trim_sections,trim_sections ); f2fs_rw_attr(sm_info,f2fs_sm_info,ipu_policy,ipu_policy ); f2fs_rw_attr(sm_info,f2fs_sm_info,min_ipu_util,min_ipu_util ); f2fs_rw_attr(sm_info,f2fs_sm_info,min_fsync_blocks,min_fsync_blocks ); f2fs_rw_attr(sm_info,f2fs_sm_info,min_hot_blocks,min_hot_blocks ); f2fs_rw_attr(sm_info,f2fs_sm_info,min_ssr_sections,min_ssr_sections ); F2FS

_RW_ATTR(NM_INFO, f2fs_nm_info, ram_thresh, ram_thresh);F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ra_nid_pages, ra_nid_pages);F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, dirty_nats_ratio, dirty_nats_ratio);F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, dir_level, dir_level);F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, cp_interval, interval_time[CP_TIME]);F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, idle_interval, interval_time[REQ_TIME]);F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, iostat_enable, iostat_enable);#ifdef CONFIG_F2FS_FAULT_INJECTIONF2FS_RW_ATTR(FAULT_INFO_RATE, f2fs_fault_info, inject_rate, inject_rate);F2FS_RW_ATTR(FAULT_INFO_TYPE, f2fs_fault_info, inject_type, inject_type);#endifF2FS_GENERAL_RO_ATTR(dirty_segments);F2FS_GENERAL_RO_ATTR(lifetime_write_kbytes);F2FS_GENERAL_RO_ATTR(features);F2FS_GENERAL_RO_ATTR(current_reserved_blocks);#ifdef CONFIG_F2FS_FS_ENCRYPTIONF2FS_FEATURE_RO_ATTR(encryption, FEAT_CRYPTO);#endif#ifdef CONFIG_BLK_DEV_ZONEDF2FS_FEATURE_RO_ATTR(block_zoned, FEAT_BLKZONED);#endifF2FS_FEATURE_RO_ATTR(atomic_write, FEAT_ATOMIC_WRITE);F2FS_FEATURE_RO_ATTR(extra_attr, FEAT_EXTRA_ATTR);F2FS_FEATURE_RO_ATTR(project_quota, FEAT_PROJECT_QUOTA);F2FS_FEATURE_RO_ATTR(inode_checksum, FEAT_INODE_CHECKSUM);F2FS_FEATURE_RO_ATTR(flexible_inline_xattr, FEAT_FLEXIBLE_INLINE_XATTR);F2FS_FEATURE_RO_ATTR(quota_ino, FEAT_QUOTA_INO);

然后继续以宏的方式将这些属性统一加到一个结构体变量中:

#define ATTR_LIST(name) (&f2fs_attr_##name.attr)static struct attribute *f2fs_attrs[] = {ATTR_LIST(gc_urgent_sleep_time),ATTR_LIST(gc_min_sleep_time),ATTR_LIST(gc_max_sleep_time),ATTR_LIST(gc_no_gc_sleep_time),ATTR_LIST(gc_idle),ATTR_LIST(gc_urgent),ATTR_LIST(reclaim_segments),ATTR_LIST(max_small_discards),ATTR_LIST(discard_granularity),ATTR_LIST(batched_trim_sections),ATTR_LIST(ipu_policy),ATTR_LIST(min_ipu_util),ATTR_LIST(min_fsync_blocks),ATTR_LIST(min_hot_blocks),ATTR_LIST(min_ssr_sections),ATTR_LIST(max_victim_search),ATTR_LIST(dir_level),ATTR_LIST(ram_thresh),ATTR_LIST(ra_nid_pages),ATTR_LIST(dirty_nats_ratio),ATTR_LIST(cp_interval),ATTR_LIST(idle_interval),ATTR_LIST(iostat_enable),#ifdef CONFIG_F2FS_FAULT_INJECTIONATTR_LIST(inject_rate),ATTR_LIST(inject_type),#endifATTR_LIST(dirty_segments),ATTR_LIST(lifetime_write_kbytes),ATTR_LIST(features),ATTR_LIST(reserved_blocks),ATTR_LIST(current_reserved_blocks),NULL,};

观察结构体 struct f2fs_attr,里面有两个函数指针 show 和 store,分别用于现实和自定义配置参数,两个函数的具体实现如下,两个过程是互逆的,前者将配置参数变量的值拷贝到 sysfs 的缓冲区 buff,后置从 sysfs 的缓冲区 buff 拷贝数据到配置参数的变量中:

static ssize_t f2fs_sbi_show(struct f2fs_attr *a,struct f2fs_sb_info *sbi, char *buf){unsigned char *ptr = NULL;unsigned int *ui;// 获取配置参数参在文件系统中,所在的结构体的的指针ptr = __struct_ptr(sbi, a->struct_type);if (!ptr)return -EINVAL;// 通过偏移获取到对应的配置参数变量ui = (unsigned int *)(ptr + a->offset);// 把配置参数拷贝到缓冲区bufreturn snprintf(buf, PAGE_SIZE, "%un", *ui);}static ssize_t f2fs_sbi_store(struct f2fs_attr *a,struct f2fs_sb_info *sbi,const char *buf, size_t count){unsigned char *ptr;unsigned long t;unsigned int *ui;ssize_t ret;// 获取配置参数参在文件系统中,所在的结构体的的指针ptr = __struct_ptr(sbi, a->struct_type);if (!ptr)return -EINVAL;// 通过偏移获取到对应的配置参数变量ui = (unsigned int *)(ptr + a->offset);// 把buf中的字符串转换成unsigned long类型ret = kstrtoul(skip_spaces(buf), 0, &t);if (ret < 0)return ret;#ifdef CONFIG_F2FS_FAULT_INJECTIONif (a->struct_type == FAULT_INFO_TYPE && t >= (1 << FAULT_MAX))return -EINVAL;#endifif (a->struct_type == RESERVED_BLOCKS) {spin_lock(&sbi->stat_lock);if (t > (unsigned long)sbi->user_block_count) {spin_unlock(&sbi->stat_lock);return -EINVAL;}*ui = t;sbi->current_reserved_blocks = min(sbi->reserved_blocks,sbi->user_block_count - valid_user_blocks(sbi));spin_unlock(&sbi->stat_lock);return count;}if (!strcmp(a->attr.name, "discard_granularity")) {if (t == 0 || t > MAX_PLIST_NUM)return -EINVAL;if (t == *ui)return count;*ui = t;return count;}// unsigned long 转换成unsigned int,之所以要这样转换,是因为discard_granularity 是unsigned long,而其他都是 unsigned int*ui = t;if (!strcmp(a->attr.name, "iostat_enable") && *ui == 0)f2fs_reset_iostat(sbi);if (!strcmp(a->attr.name, "gc_urgent") && t == 1 && sbi->gc_thread) {sbi->gc_thread->gc_wake = 1;wake_up_interruptible_all(&sbi->gc_thread->gc_wait_queue_head);wake_up_discard_thread(sbi, true);}return count;}

除了这些基础的配置参数,还有其他的特质参数,如 atomic_write,extra_attr等,暂时没有深入了解,有空再来补充。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。