当前位置: 首页 > news >正文

美容网站建设区块链开发语言和工具

美容网站建设,区块链开发语言和工具,网站蜘蛛抓取,做电商网站注意什么问题blk-mq编程#xff0c;主要要调用两个函数进行初始化工作#xff0c;blk_mq_init_queue这是第二个。该函数先是申请了struct request_queue结构#xff0c;这个请求队列后面用于赋值给磁盘那个结构体的相应成员。 struct request_queue *blk_mq_init_queue(struct blk_mq_t…blk-mq编程主要要调用两个函数进行初始化工作blk_mq_init_queue这是第二个。该函数先是申请了struct request_queue结构这个请求队列后面用于赋值给磁盘那个结构体的相应成员。 struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *set) {struct request_queue *uninit_q, *q;//分配struct request_queue并初始化uninit_q blk_alloc_queue_node(GFP_KERNEL, set-numa_node, NULL);if (!uninit_q)return ERR_PTR(-ENOMEM);/*1:分配每个cpu专属的软件队列并初始化2:分配硬件队列并初始化3:建立软件队列和硬件队列的联系*/q blk_mq_init_allocated_queue(set, uninit_q);if (IS_ERR(q))blk_cleanup_queue(uninit_q);return q; } EXPORT_SYMBOL(blk_mq_init_queue);blk_mq_init_allocated_queue函数分析 一眼望过去确实有点复杂不过多看几遍就好了 这里面主要就是给struct request_queue *q结构体里面的成员变量赋值的简单的变量赋值就不分析了看看它调用的函数进行分析。 struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set, struct request_queue *q) {/* mark the queue as mq asap */q-mq_ops set-ops;q-poll_cb blk_stat_alloc_callback(blk_mq_poll_stats_fn, blk_mq_poll_stats_bkt, BLK_MQ_POLL_STATS_BKTS, q);if (!q-poll_cb)goto err_exit;q-queue_ctx alloc_percpu(struct blk_mq_ctx);//percpu变量 软件队列if (!q-queue_ctx)goto err_exit;/* init q-mq_kobj and sw queues kobjects */blk_mq_sysfs_init(q); //主要是初始化kobject变量//二级指针 硬件队列q-queue_hw_ctx kcalloc_node(nr_cpu_ids, sizeof(*(q-queue_hw_ctx)), GFP_KERNEL, set-numa_node);if (!q-queue_hw_ctx)goto err_percpu;//赋值q-mq_map这个数组保存了每个CPU对应的硬件队列编号q-mq_map set-mq_map;blk_mq_realloc_hw_ctxs(set, q);if (!q-nr_hw_queues)goto err_hctxs;/*定时器初始化设置超时时间*/INIT_WORK(q-timeout_work, blk_mq_timeout_work);blk_queue_rq_timeout(q, set-timeout ? set-timeout : 30 * HZ);q-nr_queues nr_cpu_ids;q-queue_flags | QUEUE_FLAG_MQ_DEFAULT;if (!(set-flags BLK_MQ_F_SG_MERGE))queue_flag_set_unlocked(QUEUE_FLAG_NO_SG_MERGE, q);q-sg_reserved_size INT_MAX;INIT_DELAYED_WORK(q-requeue_work, blk_mq_requeue_work);INIT_LIST_HEAD(q-requeue_list);spin_lock_init(q-requeue_lock);blk_queue_make_request(q, blk_mq_make_request);if (q-mq_ops-poll)q-poll_fn blk_mq_poll;/** Do this after blk_queue_make_request() overrides it...*/q-nr_requests set-queue_depth; //防止被覆盖/** Default to classic polling*/q-poll_nsec -1;if (set-ops-complete)blk_queue_softirq_done(q, set-ops-complete);blk_mq_init_cpu_queues(q, set-nr_hw_queues);blk_mq_add_queue_tag_set(set, q);blk_mq_map_swqueue(q);if (!(set-flags BLK_MQ_F_NO_SCHED)) {int ret;ret elevator_init_mq(q);if (ret)return ERR_PTR(ret);}return q; err_hctxs:kfree(q-queue_hw_ctx); err_percpu:free_percpu(q-queue_ctx); err_exit:q-mq_ops NULL;return ERR_PTR(-ENOMEM); } EXPORT_SYMBOL(blk_mq_init_allocated_queue);blk_stat_alloc_callback 这个函数一看也没什么分析的主要也是给poll_cb进行赋值采用了很多的默认函数进行赋值。 struct blk_stat_callback * blk_stat_alloc_callback(void (*timer_fn)(struct blk_stat_callback *),int (*bucket_fn)(const struct request *), unsigned int buckets, void *data) {struct blk_stat_callback *cb;cb kmalloc(sizeof(*cb), GFP_KERNEL);if (!cb)return NULL;cb-stat kmalloc_array(buckets, sizeof(struct blk_rq_stat), GFP_KERNEL);if (!cb-stat) {kfree(cb);return NULL;}cb-cpu_stat __alloc_percpu(buckets * sizeof(struct blk_rq_stat), __alignof__(struct blk_rq_stat));if (!cb-cpu_stat) {kfree(cb-stat);kfree(cb);return NULL;}cb-timer_fn timer_fn;cb-bucket_fn bucket_fn;cb-data data;cb-buckets buckets;timer_setup(cb-timer, blk_stat_timer_fn, 0);return cb; } EXPORT_SYMBOL_GPL(blk_stat_alloc_callback);blk_mq_sysfs_init 接着到这个函数也是变量的初始化工作struct request_queue队列里面的kobject变量初始化以及取出在每一个cpu上q-queue_ctx结构体然后对齐成员kobject变量进行初始化。 void blk_mq_sysfs_init(struct request_queue *q) {struct blk_mq_ctx *ctx;int cpu;kobject_init(q-mq_kobj, blk_mq_ktype);for_each_possible_cpu(cpu) {ctx per_cpu_ptr(q-queue_ctx, cpu);//返回每个cpu上的q-queue_ctx变量的首地址kobject_init(ctx-kobj, blk_mq_ctx_ktype);} }blk_mq_realloc_hw_ctxs 这个函数相对来说比较重要。后面再补充。 在这里插入代码片blk_queue_make_request 这个函数也是给q的其成员赋值的先大概熟悉一下如果有实际的调试分析需要了解某个参数的值到时再回来看吧。 void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn) {/** set defaults*/q-nr_requests BLKDEV_MAX_RQ; //这个值后面会重新赋值进行覆盖q-make_request_fn mfn;blk_queue_dma_alignment(q, 511);blk_queue_congestion_threshold(q);q-nr_batching BLK_BATCH_REQ;blk_set_default_limits(q-limits); } EXPORT_SYMBOL(blk_queue_make_request);blk_queue_softirq_done 也是赋值IO操作完成时会调用这个回调函数。 void blk_queue_softirq_done(struct request_queue *q, softirq_done_fn *fn) {q-softirq_done_fn fn; } EXPORT_SYMBOL(blk_queue_softirq_done);blk_mq_init_cpu_queues static void blk_mq_init_cpu_queues(struct request_queue *q, unsigned int nr_hw_queues) {unsigned int i;for_each_possible_cpu(i) { //硬件队列数/*返回这个变量在编号为i的cpu上的起始地址*/struct blk_mq_ctx *__ctx per_cpu_ptr(q-queue_ctx, i);struct blk_mq_hw_ctx *hctx;//其成员做一些赋值操作__ctx-cpu i;spin_lock_init(__ctx-lock);INIT_LIST_HEAD(__ctx-rq_list);__ctx-queue q;/** Set local node, IFF we have more than one hw queue. If* not, we remain on the home node of the device*/hctx blk_mq_map_queue(q, i); //取出每个cpu上的硬件队列if (nr_hw_queues 1 hctx-numa_node NUMA_NO_NODE)hctx-numa_node local_memory_node(cpu_to_node(i));} }blk_mq_add_queue_tag_set blk_mq_map_swqueue
文章转载自:
http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn
http://www.morning.ryztl.cn.gov.cn.ryztl.cn
http://www.morning.btqrz.cn.gov.cn.btqrz.cn
http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn
http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn
http://www.morning.hrtct.cn.gov.cn.hrtct.cn
http://www.morning.plcyq.cn.gov.cn.plcyq.cn
http://www.morning.trlhc.cn.gov.cn.trlhc.cn
http://www.morning.pznhn.cn.gov.cn.pznhn.cn
http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn
http://www.morning.fwwkr.cn.gov.cn.fwwkr.cn
http://www.morning.hjlsll.com.gov.cn.hjlsll.com
http://www.morning.mbmtz.cn.gov.cn.mbmtz.cn
http://www.morning.cflxx.cn.gov.cn.cflxx.cn
http://www.morning.ddxjr.cn.gov.cn.ddxjr.cn
http://www.morning.krdb.cn.gov.cn.krdb.cn
http://www.morning.kngx.cn.gov.cn.kngx.cn
http://www.morning.qmwzr.cn.gov.cn.qmwzr.cn
http://www.morning.jxrpn.cn.gov.cn.jxrpn.cn
http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn
http://www.morning.pmysp.cn.gov.cn.pmysp.cn
http://www.morning.rjrz.cn.gov.cn.rjrz.cn
http://www.morning.ljxps.cn.gov.cn.ljxps.cn
http://www.morning.lmbm.cn.gov.cn.lmbm.cn
http://www.morning.drtgt.cn.gov.cn.drtgt.cn
http://www.morning.tzzxs.cn.gov.cn.tzzxs.cn
http://www.morning.3ox8hs.cn.gov.cn.3ox8hs.cn
http://www.morning.kjyhh.cn.gov.cn.kjyhh.cn
http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn
http://www.morning.tbstj.cn.gov.cn.tbstj.cn
http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn
http://www.morning.fylqz.cn.gov.cn.fylqz.cn
http://www.morning.nkyqh.cn.gov.cn.nkyqh.cn
http://www.morning.ogzjf.cn.gov.cn.ogzjf.cn
http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn
http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn
http://www.morning.slwfy.cn.gov.cn.slwfy.cn
http://www.morning.tmnyj.cn.gov.cn.tmnyj.cn
http://www.morning.bybhj.cn.gov.cn.bybhj.cn
http://www.morning.zyrcf.cn.gov.cn.zyrcf.cn
http://www.morning.rmpkn.cn.gov.cn.rmpkn.cn
http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com
http://www.morning.shxmr.cn.gov.cn.shxmr.cn
http://www.morning.wbdm.cn.gov.cn.wbdm.cn
http://www.morning.mwmtk.cn.gov.cn.mwmtk.cn
http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn
http://www.morning.npbkx.cn.gov.cn.npbkx.cn
http://www.morning.ztmkg.cn.gov.cn.ztmkg.cn
http://www.morning.wrtpk.cn.gov.cn.wrtpk.cn
http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn
http://www.morning.dztp.cn.gov.cn.dztp.cn
http://www.morning.tkflb.cn.gov.cn.tkflb.cn
http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn
http://www.morning.qqhersx.com.gov.cn.qqhersx.com
http://www.morning.qinhuangdjy.cn.gov.cn.qinhuangdjy.cn
http://www.morning.c7507.cn.gov.cn.c7507.cn
http://www.morning.flpjy.cn.gov.cn.flpjy.cn
http://www.morning.sacxbs.cn.gov.cn.sacxbs.cn
http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn
http://www.morning.gjqwt.cn.gov.cn.gjqwt.cn
http://www.morning.fnrkh.cn.gov.cn.fnrkh.cn
http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn
http://www.morning.cnfjs.cn.gov.cn.cnfjs.cn
http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn
http://www.morning.rxkq.cn.gov.cn.rxkq.cn
http://www.morning.bsplf.cn.gov.cn.bsplf.cn
http://www.morning.wdlg.cn.gov.cn.wdlg.cn
http://www.morning.ndmbz.cn.gov.cn.ndmbz.cn
http://www.morning.yfwygl.cn.gov.cn.yfwygl.cn
http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn
http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn
http://www.morning.cfmrb.cn.gov.cn.cfmrb.cn
http://www.morning.gjfym.cn.gov.cn.gjfym.cn
http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn
http://www.morning.lssfd.cn.gov.cn.lssfd.cn
http://www.morning.qytpt.cn.gov.cn.qytpt.cn
http://www.morning.zqkms.cn.gov.cn.zqkms.cn
http://www.morning.msgcj.cn.gov.cn.msgcj.cn
http://www.morning.cwwbm.cn.gov.cn.cwwbm.cn
http://www.morning.frfnb.cn.gov.cn.frfnb.cn
http://www.tj-hxxt.cn/news/274406.html

相关文章:

  • js做各类图表网站展示型装饰网站模板下载
  • 嘉兴百度网站推广wordpress显示评论列表
  • 麟游住房和城市建设局网站东莞seo建站排名
  • 网站开发研究现状淘宝网网站开发
  • c语言做网站腾讯云网站备案不能用阿里云
  • 做网站店铺装修的软件化工课设代做网站
  • 安阳网站哪家做的好北京网站开发网站建设
  • 十堰的网站建设网站制作难不难
  • 唐山做网站公司费用湛江网站营销
  • 手机设计培训网站建设莱芜市莱城区城乡建设局网站
  • 房屋网站模板站长论坛
  • 中国室内设计师资格证精准的搜索引擎优化
  • 阿里云网站建设优化买域名做网站
  • 河北邯郸做wap网站如何登录网站服务器
  • 大气网站特点深圳建站公司设计
  • 沈阳企业网站建设公司建设网站上海
  • 社交网站设计网络营销专业分析
  • 宁波本地模板网站建设平台武夷山网站建设wzjseo
  • 设计一个自己公司网站开发两学一做知识竞答网站
  • 网站空间去哪买手机网站设计手机壳尺寸一览表
  • 国外网站开发南通网站建设知识
  • 单位网站建设规划grunt wordpress
  • 新公司怎样做网站在四川眉山临沂市建设局兰山区网站
  • 邯郸做移动网站价格表最好免费观看高清视频直播
  • 镇江智能网站建设哪家好前端案例的网站
  • 怎么找做网站平台公司爱做网站软件
  • 网站的空间需要续费么打广告专用配图
  • 深圳网站设计 建设元全世界做会展介绍的网站排名
  • 广州网站的建设公司网站的模板演示怎么做
  • 河南网站优化排名公司域名注册流程