精华内容
下载资源
问答
  • 作者:高鹏(八怪)本节包含分发调用流程请...我们知道并行回放的方式有两种,包含 LOGICAL_CLOCK 和 DATABASE,体现在判定哪些事物能够并行回放的规则不同。实际上源码对应两个不同的类:Mts_submode_logical_clockM...

    作者:高鹏(八怪)

    本节包含分发调用流程请参考链接:

    一、综述

    与单 SQL 线程的回放不同,MTS 包含多个工作线程,原有的 SQL 线程蜕变为协调线程。SQL 协调线程同时还承担了检查点的工作。我们知道并行回放的方式有两种,包含 LOGICAL_CLOCK 和 DATABASE,体现在判定哪些事物能够并行回放的规则不同。实际上源码对应两个不同的类:Mts_submode_logical_clock

    Mts_submode_database

    这里只准备讨论基于 LOGICAL_CLOCK 的并发方式,而不会讨论老的基于 DATABASE 的方式,下面是我设置的参数:slave_parallel_type:LOGICAL_CLOCK

    slave_parallel_workers :4

    注意 slave_parallel_workers 设置的是工作线程的个数,且不包协调线程,因此如果不想使用 MTS 应该将这个参数设置为 0,然后 ‘stop slave;start slave’ 才能生效。因为工作线程在启动的时候已经初始化完毕了。因为我们知道在 5.7 中即便不开启 GTID 也包含的匿名的 GTID Event,它携带了 last commit 和 seq number,因此即便关闭 GTID 也可以使用 MTS,但是不建议后面第 26 节可以找到原因。

    在前面我们讨论了 MySQL 层事务提交的流程和基于 WRITESET 的并行复制方式,我们总共提到了三种生成 last commit 和 seq number 的方式:ORDER_COMMIT

    WRITESET

    WRITESET_SESSION

    它们控制的是生成 last commit 和 seq number 的规则。而从库只要将参数 slave_parallel_type 设置为 LOGICAL_CLOCK,其能否并行的依据就是 last commit 和 seq number。我们下面的描述还是以一个正常的 ‘Delete’ 语句删除一行数据的 Event 来描述,那么这个事物 Event 的顺序如下:

    同时在此之前我们先来明确一下 MySQL 中持久化 MTS 信息的三个场所,因为和传统的单 SQL 线程的主从不同,MTS 需要存储更多的信息。注意我们只讨论 master_info_repository 和 relay_log_info_repository 为 TABLE 的情况,如下:slave_master_info 表:由 IO 线程进行更新,超过 sync_master_info 设置更新,单位 Event 个数。

    relay_log_info_repository 表:由 SQL 协调线程执行检查点的时候进行更新。

    slave_worker_info 表:由工作线程每次提交事务的时候更新。

    更加详细的解释参考第 25 节,同时会解释为什么只考虑 master_info_repository 和 relay_log_info_repository 为 TABLE 的原因。

    二、协调线程的分发机制

    协调线程在 Event 的分发中主要完成下面两个工作:判定事务是否可以并行回放。

    判定事务由哪一个工作线程进行回放。

    和单 SQL 线程执行的流程不同,主要体现在函数 apply_event_and_update_pos 下面,对于单线程而言会完成 Event 的应用,而对用 MTS 而言就是只会完成 Event 的分发,具体的应用将会由工作线程完成。这里说一下简化的流程,具体函数调用参考笔记。下面是一张流程图:

    三、步骤解析

    下面对每一步进行解析如下:

    (1)如果是 GTID_LOG_EVENT 代表事物开始,将本事物加入到 GAQ 队列中(下一节会详细描述 GAQ)。可参考函数 Log_event::get_slave_worker。

    (2)将 GTID_LOG_EVENT 加入到 curr_group_da 队列中暂存。可参考函数 Log_event::get_slave_worker。

    (3)获取 GTID_LOG_EVENT 中的 last commit 和 seq number 值。可参考函数 Mts_submode_logical_clock::schedule_next_event。

    (4)获取 current_lwm 值,这个值代表的是所有在 GAQ 队列上还没有提交完成事务中最早的那个事务的前一个已经提交事务的 seq number,可能后面的事务已经提交完成了,听起来可能比较拗口但很重要,如果都提交完成了那么就是取最新提交的事务的 seq number,下面的图表达的就是这个意思,这个图是源码中的。这个值的获取可参考函数Mts_submode_logical_clock::get_lwm_timestamp。

    the last time index containg lwm

    +------+

    | LWM |

    | | |

    V V V

    GAQ:x xoooooxxxxxXXXXX...X

    ^ ^

    | | LWM+1(LWM代表的是检查点指向的位置)

    |

    + new current_lwm(这里就是current_lwm)

    here `x' stands for committed, `X' for committed and discarded from

    the running range of the queue, `o' for not committed.

    我们可以先不看 LWM 部分,对于检查点的 LWM 后面在讨论。seq number 从右向左递增,在 GAQ 中实际上有三种值:X:已经做了检查点,在 GAQ 中出队的事物。

    x:已经提交完成的事物。

    o:没有提交完成的事物。

    我们可以看到我们需要获取的 current_lwm 并不是最新一次提交事物的 seq number 的值,而是最早未提交事物的前一个已经提交事物的 seq number。这一点很重要,因为理解后就会知道大事务是如何影响 MTS 的并行回放的,同时中间的 5 个 ‘o’ 实际上就是所谓的 ‘gap’,关于 ‘gap’ 下一节还会详细描述。

    (5)将 GTID_LOG_EVENT 中的 last commit 和当前 current_lwm 进行比较。可以参考函数 Mts_submode_logical_clock::schedule_next_event。下面是大概的规则:如果 last commit 小于等于 current_lwm 表示可以进行并行回放,继续。

    如果 last commit 大于 current_lwm 则表示不能进行并行回放。这个时候协调线程就需要等待了,直到小于等于的条件成立。成立后协调线程会被工作线程唤醒。等待期间状态被置为 “Waiting for dependent transaction to commit”。

    源码处也比较简单如下:

    longlong lwm_estimate= estimate_lwm_timestamp();

    //这个值 只有在 出现 下面等待的时候 才会设置 min_waited_timestamp ,

    //设置了min_waited_timestamp才会更新lwm_estimate

    if (!clock_leq(last_committed, lwm_estimate) &&

    // @return true when a "<=" b,false otherwise last_committed<=lwm_estimate

    rli->gaq->assigned_group_index != rli->gaq->entry)

    {

    if (wait_for_last_committed_trx(rli, last_committed, lwm_estimate))

    //等待上一次 组提交的完成 Waiting for dependent transaction to commit

    (6)如果是 QUERY_EVENT 则加入到 curr_group_da 队列中暂存。

    (7)如果是 MAP_EVENT 进行工作线程的分配。参考函数 Mts_submode_logical_clock::get_least_occupied_worker,分配工作线程如下:如果有空闲的工作线程则分配完成,继续。

    如果没有空闲的工作线程则等待空闲的工作线程。这种情况下状态会置为 “Waiting for slave workers to process their queues”。

    下面是分配的标准,其实也很简单:

    for (Slave_worker **it= rli->workers.begin(); it != rli->workers.end(); ++it)

    {

    Slave_worker *w_i= *it;

    if (w_i->jobs.len == 0)

    //任务队列为0表示本Worker线程空闲可以分配

    return w_i;

    }

    return 0;

    (8)将 GTID_LOG_EVENT 和 QUERY_EVENT 分配给工作线程。可参考 append_item_to_jobs 函数。前面工作线程已经分配了,这里就可以开始将 Event 分配给这个工作线程了。分配的时候需要检查工作线程的任务队列是否已满,如果满了需要等待,状态置为 “Waiting for Slave Worker queue”。因为分配的单位是 Event,对于一个事务而言可能包含很多 Event,如果工作线程应用的速度赶不上协调线程入队的速度,可能导致任务队列的积压,因此任务队列被占满是可能的。任务队列的大小为 16384 如下:

    mts_slave_worker_queue_len_max= 16384;

    下面是入队的部分代码:

    while (worker->running_status == Slave_worker::RUNNING && !thd->killed &&

    (ret= en_queue(&worker->jobs, job_item)) == -1)

    //如果已经满了

    {

    thd->ENTER_COND(&worker->jobs_cond, &worker->jobs_lock,

    &stage_slave_waiting_worker_queue, &old_stage);

    //标记等待状态

    worker->jobs.overfill= TRUE;

    worker->jobs.waited_overfill++;

    rli->mts_wq_overfill_cnt++; //标记队列满的次数

    mysql_cond_wait(&worker->jobs_cond, &worker->jobs_lock);

    //等待唤醒

    mysql_mutex_unlock(&worker->jobs_lock);

    thd->EXIT_COND(&old_stage);

    mysql_mutex_lock(&worker->jobs_lock);

    }

    (9)MAP_EVENT 分配给工作线程,同上。(10)DELETE_EVENT 分配给工作线程,同上。(11)XID_EVENT 分配给工作线程,但是这里还需要额外的处理,主要处理一些和检查点相关的信息,这里关注一点如下:

    ptr_group->checkpoint_log_name= my_strdup(key_memory_log_event,

    rli->get_group_master_log_name(), MYF(MY_WME));

    ptr_group->checkpoint_log_pos= rli->get_group_master_log_pos();

    ptr_group->checkpoint_relay_log_name=my_strdup(key_memory_log_event,

    rli->get_group_relay_log_name(), MYF(MY_WME));

    ptr_group->checkpoint_relay_log_pos= rli->get_group_relay_log_pos();

    ptr_group->ts= common_header->when.tv_sec + (time_t) exec_time;

    //Seconds_behind_master related .checkpoint

    //的时候会将这个值再次传递 mts_checkpoint_routine()

    ptr_group->checkpoint_seqno= rli->checkpoint_seqno;

    //获取seqno 这个值会在chkpt后减去偏移量

    如果检查点处于这个事务上,那么这些信息会出现在表 slave_worker_info 中,并且会出现在 show slave status 中。也就是说,show slave status 中很多信息是来自 MTS 的检查点。下一节将详细描述检查点。

    (12)如果上面 Event 的分配过程大于 2 分钟(120 秒),可能会出现一个日志如下:

    这个截图也是一个朋友问的问题。实际上这个日志可以算一个警告。实际上对应的源码为:

    sql_print_information("Multi-threaded slave statistics%s: "

    "seconds elapsed = %lu; "

    "events assigned = %llu; "

    "worker queues filled over overrun level = %lu; "

    "waited due a Worker queue full = %lu; "

    "waited due the total size = %lu; "

    "waited at clock conflicts = %llu "

    "waited (count) when Workers occupied = %lu "

    "waited when Workers occupied = %llu",

    rli->get_for_channel_str(),

    static_cast

    (my_now - rli->mts_last_online_stat),

    //消耗总时间 单位秒

    rli->mts_events_assigned,

    //总的event分配的个数

    rli->mts_wq_overrun_cnt,

    // worker线程分配队列大于 90%的次数 当前硬编码 14746

    rli->mts_wq_overfill_cnt,

    //由于work 分配队列已满造成的等待次数 当前硬编码 16384

    rli->wq_size_waits_cnt,

    //大Event的个数 一般不会存在

    rli->mts_total_wait_overlap,

    //由于上一组并行有大事物没有提交导致不能分配worker线程的等待时间 单位纳秒

    rli->mts_wq_no_underrun_cnt,

    //work线程由于没有空闲的而等待的次数

    rli->mts_total_wait_worker_avail);

    //work线程由于没有空闲的而等待的时间 单位纳秒

    因为经常看到朋友问这里详细说明一下它们的含义,从前面的分析中我们一共看到三个等待点:“Waiting for dependent transaction to commit”

    由于协调线程判定本事务由于 last commit 大于 current_lwm 因此不能并行回放,协调线程处于等待,大事务会加剧这种情况。

    “Waiting for slave workers to process their queues”由于没有空闲的工作线程,协调线程会等待。这种情况说明理论上的并行度是理想的,但是可能是参数 slave_parallel_workers 设置不够。当然设置工作线程的个数应该和服务器的配置和负载相结合考虑,因为第 29 节我们会看到线程是 CPU 调度最小的单位。

    “Waiting for Slave Worker queue”

    由于工作线程的任务队列已满,协调线程会等待。这种情况前面说过是由于一个事务包含了过多的 Event 并且工作线程应用 Event 的速度赶不上协调线程分配 Event 的速度,导致了积压并且超过了 16384 个 Event。

    另外实际上还有一种等待如下:“Waiting for Slave Workers to free pending events”:由所谓的 ‘big event’ 造成的,什么是 ‘big event’ 呢,源码中描述为:event size is greater than slave_pending_jobs_size_max but less than slave_max_allowed_packet。我个人认为出现的可能性不大,因此没做过多考虑。可以在函数 append_item_to_jobs 中找到答案。我们下面对应日志中的输出进行详细解释,如下:

    我们可以看到这个日志还是记录很全的,基本覆盖了前面我们讨论的全部可能性。那么我们再看看案例中的日志,waited at clock conflicts=91895169800 大约 91 秒。120 秒钟大约 91 秒都因为不能并行回放而造成的等待,很明显应该考虑是否有大事物的存在。

    四、并行回放判定的列子

    下面是我主库使用 WRITESET 方式生成的一段 binary log 片段,我们主要观察 lastcommit 和 seq number,通过分析来熟悉这种过程。

    我们根据刚才说的并行判断规则,即:如果 last commit 小于等于 current_lwm 表示可以进行并行回放,继续。

    如果 last commit 大于 current_lwm 则表示不能进行并行回放,需要等待。

    具体解析如下:

    (last commit:22 seq number:23)这个事务会在(last commit:21 seq number:22)事务执行完成后执行因为(last commit:22<= seq number:22),后面的事务直到(last_commit:22 seq number:30),实际上都可以并行执行,我们先假设他们都执行完成了。我们继续观察随后的三个事务如下:last_committed:29 sequence_number:31

    last_committed:30 sequence_number:32

    last_committed:27 sequence_number:33

    我们注意到到这是基于 WRITESET 的并行复制下明显的特征。last commit 可能比上一个事务更小,这就是我们前面说的根据 Writeset 的历史 MAP 信息计算出来的。因此还是根据上面的规则它们三个是可以并行执行的。因为很明显:last_committed:29 <= current_lwm:30

    last_committed:30 <= current_lwm:30

    last_committed:27 <= current_lwm:30

    但是如果(last commit:22 seq number:30)这个事务之前有一个大事务没有执行完成的话,那么 current_lwm 的取值将不会是 30。比如(last commit:22 seq number:27)这个事务是大事务那么 current_lwm 将会标记为 26,上面的三个事务将会被堵塞,并且分配(last commit:29 seq number:31)的时候就已经堵塞了,原因如下:last_committed:29 > current_lwm:26

    last_committed:30 > current_lwm:26

    last_committed:27 > current_lwm:26

    我们再考虑一下基于 WRITESET 的并行复制下(last commit:27 seq number:33)这个事务,因为在我们并行规则下 last commit 越小获得并发的可能性越高。因此基于 WRITESET 的并行复制确实提高了从库回放的并行度,但正如第 16 节《基于 WRITESET 的并行复制方式》所讲主库会有一定的开销。

    第 19 节结束。

    最后推荐高鹏的专栏《深入理解 MySQL 主从原理 32 讲》,想要透彻了解学习 MySQL 主从原理的朋友不容错过。

    展开全文
  • 《嵌入式高速串行并行技术——基于FPGA实现与应用(张锋著)》 看了一下前言、目录、自序、以及他本书创作过程中的随笔 (小编就决定把这本书分享出来,也不知道这样做好不好。所以,在这里有个小请求,大家尽量...

    前言

    • 之前想学习一下总线相关的知识,就去图书馆搜,其中,有一本是:
    • 《嵌入式高速串行并行技术——基于FPGA实现与应用(张锋著)》
      在这里插入图片描述
    • 看了一下前言、目录、自序、以及他本书创作过程中的随笔
    • 小编就决定把这本书分享出来,也不知道这样做好不好。所以,在这里有个小请求,大家尽量低调食用,不要点赞收藏转发哈

    本书 自序 —— 张峰

    人是什么单位,人生又如何衡量?

    熊培云在《思想国》中讲,人是时间单位,因为我们在提到某人的时候,总是在人名后面跟上一个括号,并注明生卒年份,以示起止。

    除了这个差值,还用什么来衡量?

    数学上,通常将时间看成一个维度,即以时间为坐标系的横轴,那纵轴呢?见仁见智,人的选择和作为也应该是一个维度,人物传记是这样写的,什么时间做了什么事。

    那号称知识分子的我们,若早已过了彷徨的年龄,其使命又当如何?

    打破框架,探索未知。

    打破框架,何其难也。文明得以发展,在于经验和知识的累积,而这种累积,多数又来源于各种权威的言传身教,就像父母告诫小孩子,冰激凌吃多会肚子痛一样,一一得到了验证,长此以往,框架得以形成,触碰不得。框架有利于知识的传授,也会束缚人的头脑,意大利的水手Amerigo Vespucci发现了一个大的岛屿,而权威《圣经》中竟然没有记载,就觉得不可思议、不可理喻。

    而终有人会承认这种事实存在、证据确凿的未知,于是,框架终究会被打破,美洲America就此诞生。
    所以人虽无往不在枷锁之中,却是生而自由的;知识分子在解决温饱问题后,可以思其力之所不及,忧其智之所不能,嫦娥奔月不也从神话变成了现实吗!

    所以应心怀梦想,坚韧追寻,应具有王国维先生的“昨夜西风凋碧树,独上高楼,望尽天涯路”之境界,而社会的残酷、自扰、抵触、牵制、掣肘、诱惑终究共存,所以有隐忍、有退让;学胡适先生的“不降志、不屈身、不追赶时髦,也不回避危险”,虽有拘有束有碍,仍可自斟自饮自开怀。

    人总是会老的,所谓百忧感其心,万事劳其形,渥然丹者为槁木,黟然黑者为星星,纵然头发稀少,两眼昏花,颈肩酸痛,双腿僵直,仍不觉辛苦,因为余心所善,不想了无意义。

    本书的形成,历经波折,构思萌芽于2012年年底,苦于自身知识匮乏,算不上一份大餐,积累沉淀,到2014年年底渐觉内容充实,可一吐为快了,于是查阅典献,收集资料,匆忙恍惚间,2015年已过了大半,竟不能再迟疑。

    总线技术是在多个项目实践中提取出来的,如高速存储、图像处理、信号处理、系统集成等,亲力躬行,才知深浅。本文中提到的各种总线,并不是3年之功,从2006年算起,已有10年。10年时间积累了这300多页内容,也不知是多还是少?2006年第一次接触PCI总线;2007年将PCI提升到了PCIX,还用会了SRIO总线,当时还是Virtex-2Pro盛行,现在已不见踪影;2008—2009年主要是SATA、SAS;2010年接触了PCIE/CPCIE;2011年闲暇时摸透了Serdes技术,终于在2013年应用成熟,JESD204/Aurora也在这一年完成;2014年做了VPX架构的整机,2015年将SRIO的交换结构收入骰中。这就是本书的主体内容,并在此基础上增加了对总线的发展历程、现状及后续趋势的描述与预测。而最后则是关于目前嵌入式系统中常用的其他串行总线(FC、Infiniband)了,作者并没有亲身实现,只是自行理解并汇编资料罢了。

    当我们回首往事时,会发现很多激荡人心的故事,有的显焕一些,有的黯淡一些,当看到自己为发展而努力,为自由而奋斗,总是心底暖暖的。我们对于过去,固然可以看到无穷的光辉,对于将来,也必须抱着更大的期待。

    努力吧,勤能补拙,不致虚度。

    努力活吧,以时间的长度弥补智力的不足。

    怀念过去,不畏将来,是为序。

    或许某些人会觉得这部分是鸡汤。你说是,那就是了。

    总线概述及分类

    总线,英文为“Bus”,Bus一词最初起源于拉丁文“omnibus”,意为“for all”,有三个含义:公共汽车、作家的作品合集、作为形容词意为综合性多功能的。最早始用于计算机领域,总线是指汇集在一起的多种功能的线路。后经深化和延伸,指计算机内各模块及计算机之间的一种通信系统,涉及硬件(器件、线缆)和软件(通信协议)。

    IT行业以摩尔定律(Moore’s Law)在飞速发展,总线的性能也要与之适应并水涨船高。自从第一代计算机及总线问世以来,总线领域爆发了三次更新换代的革命:第一代总线以1984年IBM推出的PC/AT(Personal Computer/Advanced Technology)总线为蓝本,其速率最初不足1 Mbps,并最终形成了ISA(Industry Standard Architecture)标准,在1993年被PCI总线代替;PCI(Peripheral Component Interconnect Local Bus)总线是第二代总线的典型代表,2002年并行传输的PCI总线被串行传输的PCIE(PCI Express)总线代替;而目前PCIE 3.0版本的速率为8 Gbps,是最初的PC/AT总线的800倍,PCIE 4.0将支持16.0 Gbps,也即将问世。

    在总线的发展过程中,有多种分类方式。

    按传输速率分类:分为低速总线、高速总线。按业内规律,总线的传输时钟在66 MHz以下为低速总线,高于66 MHz为高速总线。

    按连接类型分类:分为系统总线、外设总线、扩展总线等。

    按适用范围分类:分为内部总线和外部总线。计算机机箱内的总线称为内部总线,如PCI;计算机机箱外的称为外部总线,如连接打印机的USB总线等。而有些总线内外都适用,如SATA为内部总线,而eSATA(external SATA)为外部总线。

    按应用领域分类:有计算机系统应用总线、嵌入式系统应用总线等,PCI为计算机类总线,而CPCI(Compact PCI)则归为嵌入式系统类的应用总线。

    按使用环境分类:分为航天、航空、车载、航载等总线,以满足不同的使用环境要求,如ARINC-429、ARINC-629、MIL-STD-1553B、CAN总线等。

    按传输方式分类:分为并行总线和串行总线,并行总线通常采用1个时钟信号+多位并行数据信号的方式传输数据,如前面的ISA、PCI都为并行数据总线,在一个时钟周期内,传输多位数据;串行总线则将时钟嵌入到数据内,在一个时钟周期内传输1 bit数据,以串行比特流的方式实现数据通信。

    本书关注的是嵌入式系统中的高速串行总线技术。

    串行总线通信正当时

    早期的总线多采用多位数据并行传输方式,通过提升并行数据位宽、数据运行频率,提升总线传输速率,如早期的PC/XT总线数据位宽是8 bit,运行频率为kHz级别,到1999年出现了PCIX总线,其数据位宽是64 bit,运行频率为133 MHz,总线的传输速率达到了1066 MBps。

    总线的并行数据位宽及频率的提升带来了数据传输速率的飞跃,但也带来了其他问题:总线并行数据信号间的同步变得日益困难,且无法解决串扰问题,这导致多种并行总线协议的更新速率越来越慢,耗时越来越长,限制了总线性能的进一步提升,影响处理器性能的发挥,即通过提升总线的并行数据位宽及运行频率,以提升总线速率的方法走到了“死胡同”,业内迫切需要一种新的变革方式。

    2000年前后,多个国际组织将眼光瞄向了基于比特流通信的串行总线结构,多种串行总线标准也如雨后春笋般出世,如现在大名鼎鼎的PCIE、SRIO、SATA、FC等总线,也有推出后不久就“夭折”的,如Starfabric总线。Starfabric总线当时吸引了大量的风投,还推出了Starfabric的协议转换芯片,而最终还是以失败告终——Starfabric总线技术针对性不足。

    目前,在PC领域和嵌入式系统中,基于比特流的高速串行通信总线正全面代替传统的并行数据总线方式,如前期广泛用于PC系统的并行数据总线PCI/PCIX,正被串行的PCIE总线所代替;曾经在存储领域独占江山的ATA(parallel ATA)总线、SCSI总线,分别被串行的SATA(Serial ATA)、SAS(Serial attached SCSI)所代替;与PC领域相对应的工业及嵌入式应用领域,串行总线的应用更是一发而不可收,出现了FC(Fiber Channel)、SRIO(Serial RapidIO)、Aurora等多种协议标准,即使针对ADC、DAC这种专用接口,也吸收了串行总线传输的思想,出现了JESD204协议,以代替传统的基于LVCMOS电平、多位数据线并行的ADC、DAC接口方式。鉴于目前高速串行总线的广泛应用,VITA组织推出了一种针对高速串行总线通信架构的标准——VPX,以规范上述多种串行总线的互连。

    与串行总线的高速、先进相对应的是其开发过程的困难重重,串行的二进制比特流不能提供更多有效参考信息,只能以眼图判断信号完整性,而各种总线的协议分析仪,价格却不够亲民,调试手段有限,针对常用的高速串行总线,如何进行快速开发,尤其是FPGA内的应用开发,一直是业内的难题。本书试图对多种高速串行的共性技术进行提取,并对具体协议加以具体分析,实现过程具体展现,以实现基于FPGA甚至于整个嵌入式系统的高速串行总线的通信。

    FPGA让一切皆有可能

    既然总线是现代通信系统的神经,那相应处理器是就关节了。目前主流的处理器厂商推出的PowerPC、DSP、FPGA等芯片,均含有一种或多种高速串行通信总线接口,如高端的PowerPC、DSP通常含有SRIO及PCIE,有的还含有SATA存储接口。ASIC厂商的目标就是将这些复杂的总线功能做成如傻瓜相机一样,只要存在就会使用,而FPGA则是另类,除了总线的简单验证,还提供了二次开发功能,甚至还能玩“深沉”,DIY一些自主的IP核,可谓男女老少都喜欢,满足高中低各个层次的需求。

    FPGA代替DSP完成密集型运算功能已多见不怪,甚至觉得不这样就是非主流。FPGA内嵌PowerPC及ARM处理器内核,代替外置的PowerPC及ARM独立芯片,完成一些协议/控制解析,似乎也很恰当,FPGA可谓功能强大。而对于各种高速总线接口,FPGA则提供了一种万全之策:基于FPGA内嵌的高速串行收发器GTX可实现多种高速串行总线接口,如SRIO、SATA、FC等。若资金充裕,可购买各种高速串行总线的IP核,使用时比傻瓜相机复杂一点;若智力充裕,则可自己理解协议,编写高速串行总线的IP核,卖给“帝王家”,也是一种生存方式;若资金、智力都不充裕,那是只能寄希望于时间充裕了,好在时间总是可以挤的,挤挤还是有的。

    基于FPGA研究高速串行总线技术,可攻可守,本书中SRIO、PCIE、Aurora为调用IP核方式,而SERDES、JESD204、SATA则为自主开发IP核,而最后的CPCIE、VPX、FC、Infiniband则侧重于嵌入式系统的实现,与FPGA无关。

    本书的内容结构安排

    小编前期只会更新前期关注的PCIE,如果有时间,并且自己确实需要,才会更新其他。

    本书内容分为三篇共11章,另有4个附录。第1章为第1篇,按时间的先后顺序梳理出计算机和嵌入式系统领域曾经出现过并各领风骚数几年的总线,并对总线领域的三次革命加以分析,以力证高速串行总线是目前通信架构的主流,并基于高速串行总线技术的特点及瓶颈,预测总线的后续发展趋势。

    第2篇包含第2~第7章,分别介绍并基于FPGA实现了目前嵌入式系统中常用的串行总线技术,涉及SERDES、JESD、SRIO、PCIE、Aurora、SATA总线。从行文方法上,以概述开篇,回答选题(做什么、为什么、性能如何);接以协议分析,力求简洁清晰,续以基于FPGA的具体工程实现,然后给出测试结果,验证思路,最后给出小结及展望,为嵌入式系统的专项高速串行总线应用提供参考。

    第3篇包含第8~第11章,涉及目前嵌入式系统中的常用总线架构,侧重于整机设计,内容有CPCIE、VPX、FC、Infiniband技术,为高速总线在嵌入式系统整机中的应用提供参考。

    附录A~附录D则收录了本书写作过程中的随笔,希望能从非技术角度讲一点技术问题。

    在整书的编写过程中,文吉、陈远参与编写第1章,任国强、吴威参与编写第6章,任国强、文吉完成全程校对。在整个编委会的共同努力下,我们尽可能多地呈献关于总线,以及IT技术甚至其他相关的知识,以物有所值,可覆盖面广也意味着增加了出错的可能性,我们期望通过本书对总线的基本原理、实现过程及应用实例的介绍,使读者对总线有一种宏观的把握,微观细节上的了解,以起到抛砖引玉的作用。由于作者水平和时间有限,一些不自知的错误,敬候高明的读者指正,作者联系方式为zhangfeng1186@163.com。

    关于参考文献

    本书的参考文献主要来源于Xilinx公司和其他一些官方组织公开的资料,如PICMG、SCSITA、VITA、FCIA等,还有一些引用来源于互联网,出处并不明显或难以联系作者,在此也一并感谢并希望原创作者与编者联系,以便再版时增补。

    关于写作风格

    书中的图表有些仍为英文原版,从技术角度考虑,英文更易理解,故没有译为中文。
    单纯技术是枯燥乏味的,本书在力求准确时,尽量以简洁、轻松的笔调论述,个人所好,不喜可喷。
    除了与总线相关的内容外,本书还以延伸阅读的方式展开了部分具体技术细节,以及对其他知识的扩展,以供感兴趣的读者赏阅。

    本书的读者对象

    本书定位于工程应用,主要针对从事嵌入式系统开发的整机设计人员、终端技术开发人员,以及那些对嵌入式系统、FPGA、总线有更深入理解需求的人员,包含职场新手、研究生和高年级本科生。

    作 者

    2016年10月

    本书创作过程中的随笔

    D.1 没落的贵族——Motorola

    爱君芙蓉婵娟之艳色,若可餐兮难再得,怜君冰玉清迥之明心,情不极兮意亦深。

    Motorola已难再见,多情公子已无情,落寞秀才让人叹。

    创业,冒险创新

    1928年,Paul Galvin创立了Galvin Manufacturing Corporation公司。

    1930年,公司迎来了首次重大突破,推出了首个可以消除引擎盖静电干扰的车载收音机,并且实现了大众市场的商业化,财富迅速积累。

    1947年,鉴于车载音响系统的成功,Galvin Manufacturing Corporation公司改名为Motorola,含义为运动中的声音。

    让Motorola得以维持生计的是他们不断创新的技术,Paul Galvin营造了一种企业文化,鼓励人们去发明、失败、学习、再发明。正是这种勇于承担风险的文化,让Motorola在业界闻名,他们在培训和开发上面投入了很多资源,而且近乎狂热地支持员工发明创造。所以Motorola在当时的消费者电子产品,包括家庭收音机和电视机,以及负责公共安全和防御的相关设备,如警用双向无线对讲机等,都占据绝对领导地位。

    1983年,Motorola推出第一款手机——DynaTAC,引爆了手机通信市场,从此移动手机业务吸引了整个公司、整个行业、整个国家,甚至整个世界,DynaTAC在中国,被称为“大哥大”。
    1994年,Motorola制造了美国市场上60%的移动手机,收入达220亿美元,利润接近20亿美元,在财富500强中排名第23。

    创新无处不在,除了手机业务上的成功,Motorola为质量管控开发了一套系统Six Sigma,可以确保99.99966%的产品没有品质问题。通用电气、IBM、波音等财富500强企业都采用了这套系统。

    守成,固步自封

    在1994年—1997年之间,手机业务让Motorola达到了生意上的顶峰,但成也萧何,败也萧何,手机业务也成为Motorola企业文化中的一颗毒瘤。当公共安全部的员工们还在给警察和消防员销售产品时,手机部门的人却在花天酒地,高唱“我们有的是钱”。

    Motorola一直是数字蜂窝技术的早期开发者,这一技术取代了传统的模拟蜂窝系统,他们的数字网络专利产生大量利润。然而令人不可思议的是,Motorola手机部门并不着急进行从模拟到数字的转型。于是数字蜂窝技术的工程师们发出了特有的抗议方式:不再使用自家手机,而使用由高通(Motorola在电信半导体行业里最大的竞争对手)制造的数字化手机。

    与此同时,一家芬兰的公司浮出水面,它花了四年时间开发数字蜂窝技术手机,并于1998年超过Motorola,成为世界上最大的移动手机制造商,这家芬兰公司就是Nokia。

    创新不再,官僚气息严重,手机技术和数字网络技术脱节,曾经红火的手机业务反而成了Motorola最大的拖累,Motorola在全球范围有60种不同业务,但每个都非常薄弱,没有核心竞争力,2001年,Motorola总收入额300亿美元,却亏损近40亿。

    2003年底开始,Galvin家族决定卖出拥有的Motorola 3%股份,并于数年后,彻底离开了Motorola。离开了创始人Galvin家族的Motorola还是Motorola吗?还是曾经玩命创新的Motorola吗?

    Galvin家族身退后,继任者是Ed Zander。他曾是Sun Microsystems的CEO。他接手Motorola工作之后,哭了,发现Motorola不仅发展缓慢,而且对未来电信技术的融合更是一塌糊涂,为了拯救公司,Zander集全公司于一点,推出了Motorola 的新款Razr手机,性感超薄可折叠,却叫好不叫卖。
    2005年,Zander与好朋友乔布斯合力开发了一款Rokr的手机,并手把手地教会乔布斯如何做手机。
    2007年,当苹果的第一部iPhone推出时,Motorola仍然在卖2年前的Razr手机。

    此后,Motorola决定采用Android系统,并于2009年10月推出Droid的新手机,并在发布的前几个月,销量超过了iPhone。截至2010年年底,经过四年的巨额亏损,手机部门又重新盈利了,但在2011年又被超越,这次不是Nokia,而是三星。

    衰退,鲜有声息

    铱卫星系统

    20世纪80年代末,Motorola推出了铱卫星系统Iridium,建设可以覆盖地球的卫星系统,以此实现蜂窝系统无法实现的通信能力。他们组织了50亿美元的财团进行开发,摩托罗拉自己投入了 26亿美元和许多工程师。90年代末,铱系统终于运行起来了,但是3000美元的手机和一分钟7美元的话费过于昂贵。铱计划在1999年宣布破产,最后以2500万美元被卖掉了,为了弥补财政赤字,Motorola以11亿美元出售了它的一部分半导体业务,这就是后来的ON Semiconductor。

    手机业务

    2011年1月,Motorola决定拆分为两个公司,Motorola Mobility(手机业务)和Motorola Solutions(企业级解决方案)。

    2011年8月,Google宣布以每股40美元,共125亿美元收购Motorola Mobility,并于2013年8月,推出了Google旗下的Motorola手机——Moto X。在美国销量不及预期情况下,Moto X占领了印度和巴西的市场。

    在拥有了Motorola Mobility最为得意的专利后,Google又在2015年1月将Motorola手机相关的业务甩卖给了联想,只有29亿美元,于是联想在国内推出了新Moto X、新Moto G及 Moto X Pro。

    半导体业务

    想当年,金戈铁马,气吞万里如虎。
    Motorola何其辉煌,其PowerPC架构处理器产品与IBM公司不相上下,除了IBM的PowerPC系列,还有Motorola公司的MPC(Motorola PowerPC)——MPC8548、MPC8572、MPC8641。

    2004年,Motorola决定将其半导体业务分拆为一个独立的公司——Freescale,虽然后来Freescale公司推出了P2020、P4080、P5020等处理器,MPC系列仍是其一大支柱,而2015年,Freescale 又被 NXP Semiconductor收购,现在输入www.freescale.com的网址,会自动跳转到www.nxp.com网址去,虽然MPC系列、P系列处理器还在,但已不能再称为是Freescale公司或者更早的Motorola公司的产品了。

    此外,被出售的还有它的电视和无线广播业务、政府与防务业务,以及赖以成名的汽车电子业务……

    除了正常的商业运作外,感情上我们还是不愿意看到Motorola被拆分与甩卖,尤其是像手机与Freescale这样被转手两次,毕竟一个时代就这样过去了。

    再见,Motorola,再一次重温一下经典的logo吧,也许再也不见。

    “灭六国者六国也,非秦也;族秦者秦也,非天下也。……秦人不暇自哀,而后人哀之;后人哀之而不鉴之,亦使后人而复哀后人也。”

    参考文献

    [1]摩托罗拉的衰败.百度文库.
    [2]摩托罗拉.百度百科.
    [3]Motorola.www.wikipedia.com.
    [4]www.freescale.com.
    [5]www.nxp.com.

    D.2 JESD204 协议IP核实现纪实

    2013年,前期跟踪的“十二五”项目陆续落地,对ADC采样技术提出了新的要求,某项目要求实现N(N>10)个ADC通道的160 MHz采样率,单板面积限制下72 mm×132 mm以下。

    已有成熟技术不满足需求:采样率不高,前期项目应用的最高采样率只有65 MHz,按改动最小原则查新后,发现确有类似的同类芯片,可满足采样率160 MHz要求,但N个通道,需要N个ADC芯片。带来了第二个问题,面积超标,无法解决,陷入停顿。

    经过大量调研,最终选取了基于JESD204协议的实现方案,(见书中图3-39和图3-40),难度大,却唯一可行。

    基于JESD204协议的ADC采样数据,可通过FPGA内的高速串行接口GTX(仅一对差分线)直接进入FPGA,完美的接口形式,看着就舒服,让人磨刀霍霍,跃跃欲试。

    问题来了,JESD204协议如何实现?购买国外的IP核,还是自已动手编写?鉴于项目无法忍受购买IP核的长周期,我们决定自己开发。

    资料不易得,得到JESD204协议的文档后,只有一个文档,上马开弓。

    人生不如意,十之八九。JESD204开发过程,一直不如意。先后遇到了电源驱动能力不够、纹波过大、器件损坏、风扇影响波形、线损过大等多种闻或未闻的疑难杂症,排除外围因素后,还有一个棘手问题,ADC不是智能器件,只能发送数据,在FPGA中如何判定解析出的ADC数据是正确的,若不对,是FPGA解析的不对,还是ADC本身发出的数据就不对?

    当山穷水复的时候,我们怀疑过,能否做出这种新出现的IP核,是否需要找人合作,再一想,不就是一个IP核吗,其文档也不过区区145页,连1000多页的SATA协议都做出来了,这个JESD204还能算什么?于是满血,start again,again and again……

    冲锋的号角毅然响起,坚定的信念没有动摇,在忙了近两个月之后,终于在FPGA中看到了一个让人心动的正弦波,那感觉真是平滑细腻有光泽,想不笑都难。

    临危不惧,受命即出,成功即归,不矜不伐。

    我们认为,采用高速串行传输方式,基于JESD204协议,是ADC采样数据传输方式的必然选择

    D.3 由而立到不惑

    当繁复的工作淹没了激情,最初的理想已渐行渐远,休戚与共,波澜不惊,甚至于连探索未知的勇气都没有,我不禁要问,这就是我曾经朝思梦想,为伊憔悴的科研工作,这就是我以后为之奋斗,实现价值的精神寄托?

    不,绝不!

    为什么会有焦虑?为什么会有不安?为什么会有不断的疑惑?为什么会不断地质询自己?因为我们还有理想,还在追寻,还要积跬步致千里,还要上九天揽月,下五洋捉鳖。

    我们为什么要创新,因为职业规化需要。

    已过而立之年,再三、五、十年之后,按正常的职业发展规化,40岁左右,应为单位中坚,中流砥柱,试问,凭什么?徒长的年龄?徒增的工龄?年龄再涨,也涨不过70后,精力自然也弱于了90后,在前有堵载(70后),后有追兵(90后)的现实面前,创新,唯有创新,去开拓一个新领域,研究一项新技术,占领技术制高点,尽可能高,尽可能多,才能笑傲江湖,独孤不败,那才是真正的科研工作,令人朝思梦想,为伊憔悴,为之振奋,奋斗终生。

    我们为什么要创新,因为心路成长需求。

    工作安排大多任务紧、强度大,有张没弛,但这仍然不能阻挡我们勇于创新的决心,在项目中要勇于攻克前辈还没有攻克的技术点,这才是技术发展的潮流。人云亦云,能有多少进步?有多大的风险就有多大的机遇,当你众里寻她千百度,找到一个突破点时,那才是燎原的星星之火。

    创新,直观感觉是解决了技术难题,转化了经济效益,更深入是对知其然,亦要知其所以然的遵循,以管窥蠡测,推陈出新;是对“路漫漫其修远矣,吾将上下而求索”的坚守,以有所寄托,有所突破。

    创新,对于个人,要有独立的人格,有灵魂,有独立空间,使思想自由,以充分发挥主观能动性;于单位,要给予个人相对宽松的环境,有激励,要充分信任,攻克难关非一日之攻,要集中人力/精力,一鼓作气,使技术见底,不可使之间断,反复。

    创新,要趁早,不能白了头,昔往日,忆流年,悔成伤。

    昔我去者,杨柳依依;今我来也,雨雪纷纷。当我们两鬓斑白业已成霜的时候,再回首,是谈笑风生一览众山小呢?还是临川慕鱼徒有感伤?

    有理想的人海阔天空。试问,你还有理想吗?是每年多出的几个铜钱吗?还是心系远方,志在高翔。

    D.4 思想自由

    君君、臣臣、父父、子子。

    语出《论语 颜渊》:齐景公问政于孔子(前551—前479),孔子对曰:“君君、臣臣、父父、子子”。

    300年后,西汉,董仲舒(前179—前104),提出“大一统”概念:将自然界的和谐统一运用到思想领域,要求思想统一,汉武帝推行“罢黜百家,独尊儒术”,从此,儒家思想成为正统、权威,惶惶不可欺,横行2000多年,直至公元后的1919年,五四运动,胡适提出“打孔家店”(是打,而非打倒),对以儒家文化为代表的旧文化、旧主义进行批判,从此拉开了新文化运行的大幕。陈独秀创刊《新青年》,宣传新思想,蔡元陪提出“思想自由,兼容并包”,多种主义迎来了黄金时期,再现百家争鸣,直到抗战的全面胜利。

    君君、臣臣、父父、子子。改朝换代了不止24史,而儒家文化却浸入骨髓,一枝独大了两千多年,究其原因,可能是习惯了“君权神授”,家长制,事事自上而下,一切行动听指挥,少动脑筋,大家都省事,就像安抚幼儿园的小娃娃一样,今天乖没乖,要听老师话。

    80年代后,社会逐渐步入正轨,即使要讨论姓资姓社的问题,也要先吃饱饭再说,逐渐归还了原本属于个体的自由,个体积极性调动了起来。而社会总是在不经意间又进步了一点点,不知不觉间请旨研究从幕后来到了台前,就如同猴子原本四条腿爬行,无意间发现三条腿也可以走,解放了一只手出来,可摘到更多的果子,屁颠屁颠地欢欣雀跃好大一阵子,旋即又哀伤了起来:只解放了一只手,可活动到更大的范围,吃到更多的果子,可如果想吃到更多更多的果子呢?另一只手为什么也不解放了呢?

    从四条腿爬行到三条腿半直立行走是积淀,从三条腿半直立到两条腿的直立行走,是自由。

    既然法无禁止则当行,那不奉旨,不请旨,先干了再说,是不是也可行呢?这就是本书的来由,突然发现这个看似按部就班的社会,已经越发开明,远比我们想像的自由。

    独立之精神,自由之思想。

    D.5 再议八股

    读书人,最不济,

    背时文,烂如泥,

    国家本为求才计,谁知道变成了欺人计,

    三句承题,二句破题,摇头摆尾,便道是圣门高第。

    流行于明清的八股文,起初只是文章的一种可选格式,由破题、承题、起讲、入题、起股、中股、后股、束股组成,后四部分均包含二股排比或对偶,其文字繁简、语句长短、声调高低要严格成文,选题也只有四书五经,观点须与圣人同,不能恣意推新,以免亵渎经典。

    作为一种可选的写作套路,本无可厚非。若只是存在,选或不选均可,就像诗词曲赋一样,但当八股成了取士的唯一标准时,同样也就走向了衰亡:八股的标准过于严苛完善,丧失了改进的余地,最终迎接它的只能是废除。所以当1911的辛亥革命爆发时,清朝廷东南自保,全国观望,革命之顺利,亦超出革命党人的预期,究其原因,在于民众未必都识得“民主、民权、民生”的先进性,只是对清廷审美疲劳,想迫不及待的换一个而已。

    所以八股文的命运同样如此,八股文断不可取,断不可再取。

    标准的技术文章,就像邻家之女一样“增之一分则太长,减之一分则太短”,要求简洁准确,婉约大方。当年大学的线性代数,一上来就是特征值、特征向量、奇异矩阵三个定义,紧跟着三个定律。足够简洁,却还是感觉云山雾绕脚不着地,直到最后要结课了,才发现线性代数原来是对线性方程组求解,所以力求简洁准确的前提条件是要先理解,好消化。

    按照这个思路,近年来出了一些看上去“风格模糊”的书,如《人类简历》,是历史却比教科书轻松;《明朝那些事儿》是纪实抑或小说还是玄幻?傻傻分不清;《数学之美》讲数学原理用的却是大白话而非公式;《盛世的疼痛》写史则具有散文的神美;甚至IT行业的专业技术书《5G通信之道》、《FPGA之道》、这个“道”是通信链路的Channel、Lane,还是老子的“道可道,非常道”?而《MFC之道》更是以“横看成岭侧成峰”开头,颠覆了我们对于专业书刊的认知,不仅仅在销量上。

    既然是科技图书,我们也在力求简洁准确,并增加了一些其他的Interesting的故事、纪实、感悟等,其目的就是要让这个专业书刊,有观点、有态度、有情感。

    附《时文叹》原文:

    时文叹

    (清)徐大椿

    读书人,最不济,

    背时文,烂如泥,

    国家本为求才计,谁知道变成了欺人计,

    三句承题,二句破题,摇头摆尾,便道是圣门高第,

    可知道三通四史,是何等文章,汉祖唐宗,是哪一朝皇帝?

    案头放高头讲章,店里买新科利器,

    读得来肩高背低,口角唏嘘,甘蔗渣儿嚼了又嚼,有何滋味!

    辜负光阴,白白昏迷一世,就教他骗得高官,也是百姓朝廷的晦气!

    后记

    展开全文
  • 3.虚拟化关键技术&并行编程

    千次阅读 2021-12-12 13:01:46
    使用虚拟化技术,将多台服务器的应用整合到一台服务器上的多个虚拟机上运行。 虚拟化的几个概念 Guest OS:运行在虚拟机上的操作系统 Guest Machine:虚拟出来的虚拟机 Hypervisor (Virtual Machine Monitor,即VMM...

    计算虚拟化

    • CPU虚拟化(目标是使虚拟机上的指令能被正常执行,且效率接近物理机)、内存虚拟化、I/O虚拟化
    • 虚拟化将软硬件解耦,将内存、CPU、网卡等计算资源,通过软件抽象后提供给虚拟机使用,极大的提升了资源利用率以及灵活度。
    • 使用虚拟化技术,将多台服务器的应用整合到一台服务器上的多个虚拟机上运行。

    虚拟化的几个概念

    • Guest OS:运行在虚拟机上的操作系统
    • Guest Machine:虚拟出来的虚拟机
    • Hypervisor (Virtual Machine Monitor,即VMM)虚拟化软件层
    • Host OS:运行在物理机之上的OS
    • Host Machine:物理机
      CPU全虚拟化
    • Guest OS指令段在执行前进行争端翻译,将其中的敏感非特权指令替换为Ring0中执行对应特权指令。非特权指令直接执行。
    • 优点:Guest OS无需修改,可移植性和兼容性好
    • 缺点:当负载较大、敏感指令频繁被执行时CPU性能低下。
    • 例如:VMWare/Hyper-V/KVN-x86

    CPU半虚拟化

    • 在Hypervisor上运行的Guest OS已经集成了与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hypercisor来实现虚拟化。
    • 优点:非常接近物理机
    • 缺点:不支持未修改的操作系统,兼容性和可移植性差。
    • 例如:Xen/KVM-PowerPC(建议指令集)

    CPU-硬件辅助虚拟化

    • 对CPU指令进行改进即VT-x,客户机在此模式下运行与原生态系统在非虚拟机化环境中运行性能一样,不需要向全虚拟化那样每条指令都先翻译再执行;在少数必要的时候,某些客户机指令的运行才需要被VMM截获并做相应处理。
    • VT-x提供两种操作模式VMX root operation和VMX non-root operation。VMM运行在前者,虚拟机运行在后者。
    • KVM-86/VMWare/ESX Server 3/Xen 3.0.

    Hypervisor架构

    • 计算虚拟化的软件层,通常叫Hypervisor,即虚拟化层,也叫虚拟机监控器VMM,负责Guest OS所有硬件资源调用。
    • TYPE-I(裸金属架构):VMM直接运行在裸机上,使用和管理底层硬件资源,Guest OS对硬件资源访问都需要通过VMM完成,VMM拥有硬件驱动程序。
    • TYPE-II(宿主型、寄居型):VMM之下还有一层操作系统,Guest OS对硬件资源访问必须经过宿主操作系统,带来额外开销,所有硬件驱动、内存管理、进程调度等有宿主操作系统执行。

    CPU虚拟化-CPU指令系统
    内核态:操作系统访问硬件(物理内存,IO设备等),关键数据结构,运行中断等
    用户态:用户运行应用进程。

    内存虚拟化:目标是能够做好虚拟机内存空间之间的隔离,使每个虚拟机都认为自己拥有了整个内存地址,且效率也能接近物理机。
    计算虚拟化目标是不仅让虚拟机访问到他们所需要的I/O资源,而且要做好它们之间的隔离工作,更重要的是减轻由于虚拟化所带来的的开销。

    I/O虚拟化:
    I/O虚拟化需要解决两个问题
    1.设备发现:需要控制个虚拟机能够访问的设备
    2.访问截取:
    通过I/O端口或者MMIO对设备的访问
    设备通过DMA与内存进行数据交换

    存储虚拟化

    1.RAID:磁盘阵列

    磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个系统效能,利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

    2.分布式存储

    分布式存储是可以将分散开来的磁盘聚集起来组成一个虚拟的存储设备,在不增加专业的存储设备情况下为企业提供大容量高性能的存储服务。
    分布式存储产生的原因是传统存储再成本、垂直扩展、存储水平扩容、容错性几个方面的问题
    分布式存储分类三大类

    2.1 块存储

    将裸磁盘空间整个映射给主机/VM使用,用户可以根据需要随意将块存储格式化成文件系统来使用。

    2.2 文件存储

    文件存储好比是一个文件夹,文件系统已经存在,用户可以直接将自己的数据存放在文件存储上

    2.3 对象存储

    每个数据对应这一个唯一id,在面对对象存储中,不再有类似文件系统的目录层级结构,完全扁平化存储,即可以根据对象的id直接定位到数据的位置。

    3.分布式文件系统

    分布式关键系统关键能力
    多主机共享磁盘
    持久化保存数据
    文件系统的在线扩容
    和主机的集群无关

    网络虚拟化

    二层和三层网络虚拟化主要解耦了服务器和减缓及之间的关系
    四层和七层网络虚拟化主要解耦了网络设备和租户之间的关系
    二层网络虚拟化

    软件定义网络

    总结

    CPU全虚拟化:Guest OS指令模拟操作系统指令
    CPU半虚拟化:Guest OS修改操作系统指令

    数据处理和并行编程

    数据密集型计算

    • 概念:采用数据并行方法实现大数据量并行计算的应用,计算数据量级为TB或PB级,因此也被称为是大数据的核心支撑技术。

    数据本地性

    在数据密集型计算中充分利用数据本地性可以提高系统的吞吐量。主要思想如下:

    • 将任务放置在离输入数据最近的节点运行
    • 网络带宽远远低于计算节点本地磁盘的带宽总和
    • 机架内两个节点之间的带宽远大于跨机架的两个节点之间的带宽,将任务调度到同一个机架内的节点是次优选择。
    • 在调度任务时移动代价很小是计算而不是移动代价昂贵的数据,避免有限的网络带宽处于饱和状态。

    分布式数据处理

    含义:分散的选择方案就是分布式数据处理(DDP)方案。分布式数据处理不仅是一种技术上的概念,也是一种结构上的概念。分布式数据处理的概念是建立在集中和分散这两种信息服务都能实现的原则基础上的。
    集中/分散的问题归结起来就是建立综合的信息系统(集中)和对用户服务(分散)这两者结合的问题。

    并行编程模型

    并行编程模型包括数据并行编程模型和消息传递编程模型

    • 数据并行编程模型的编程级别比较高,编程相对简单,但它仅适用于数据并行问题
    • 消息传递模型编程级别较低,但消息传递编程模型可以有更广泛的应用范围。
    展开全文
  • 微机原理与接口技术课程设计---计算机并行处理机制的研究计算机科学与技术学院课程设计报告2011 — 2012学年第 1 学期课程名称 微机原理与接口技术设计题目 计算机并行处理机制的研究学生姓名学 号专业班级指导教师...

    微机原理与接口技术课程设计---计算机并行处理机制的研究

    计算机科学与技术学院

    课程设计报告

    2011 — 2012学年第 1 学期

    课程名称 微机原理与接口技术

    设计题目 计算机并行处理机制的研究

    学生姓名

    学 号

    专业班级

    指导教师

    2011 年 9 月 6 日

    目录

    一、概述1

    二、并行的概念1

    2. 1 并行性1

    2. 2 并行等级的划分1

    2. 3 实现并行处理的技术途径3

    三、计算机内部并行处理机制3

    3.1流水线3

    3.2超标量结构4

    3.3 超流水线结构6

    3.4 VLIW(超长指令字)6

    四、计算机间的并行处理机制8

    4. 1对称多处理机SMP8

    4. 1. 1 SMP的结构和特性8

    4. 1. 2 多处理机中的扩展存储层次结构9

    4. 2大规模并行处理机MPP10

    4. 2. 1 MPP的结构和特性10

    4. 2. 2 当代MPP系统的公共体系结构11

    4. 3机群12

    4 . 3. 1机群的概念和特性12

    4. 3. 2 机群的分类13

    4. 3. 3 机群的体系结构13

    五、总结与展望16

    六、参考资料16

    一、概述

    计算机从1946年的ENIAC机问世以来,至今已经历了五次更新换代。每一代计算机的性能都成数量级倍的提高,计算机的体积、重量、价格、稳定性、可靠性、可维护性及功能的多样性等均有了显著的改善。人们通常以电子管、晶体管、中小规模集成电路、大规模和超大规模集成电路等器件的变革作为计算机换代的标志。但是,计算机系统实际上是器件、硬件、软件、算法、语言、系统结构以及通讯技术等的综合,所以计算机的换代也反映在上述各方面的巨大变革上。

    促使计算机迅速发展和系统性能极大提高的因素是多方面的,其中,器件技术尤其是微电子技术的迅速发展无疑是最为关键的因素,它是计算机得以迅速发展的物质基础。然而,应当看到,如果不能最合理地利用这些新器件、新设备,最大限度地发挥出它们的内在潜力,设计和构成综合性能指标最佳的计算机系统,只靠器件技术的变革是不行的,还需要硬件、软件、算法、语言、系统结构、通讯技术等多方面的发展变革才行。

    在特定的时期里,器件的发展变化会因物理、工艺、价格等条件限制而有一定限度。在同一种器件技术水平上,进一步提高计算机系统性能的有效途径就是在系统结构上使用并行处理技术,挖掘出系统固有的并行性潜力,提高其并行性操作的程度。

    并行性在不同的处理级别中可表现为多种形式,如先行方式、流水方式、向量化、并发行、同时性、数据并行性、划分、交叉、重叠、多重性、重复、时间共享、空间共享、多任务处理、多道程序、多线程方式和分布式计算等。

    二、并行的概念

    2. 1 并行性

    只要在同一时刻或是同一时间间隔内完成两种或两种以上性质相同或不同的工作,它们在时间上相互重叠,都体现了并行性。也就是说,并行性包括同时性和并发性两重含义。同时性(simultaneity)指的是两个或多个时间在同一时刻发生,并发性(concurrency)指的是两个或多个事件在同一时间间隔内发生。

    2. 2 并行等级的划分

    并行性可以划分为不同的等级,从不同的角度出发,等级的划分方法也不一样。

    从计算机系统内部执行程序的角度来划分

    指令内部——一条指令内部各种微操作之间的并行

    指令之间——多条指令在某一时刻或同一时间间隔内并行执行

    任务或进程之间——多个任务或程序段之间的并行执行

    作业或程序之间——多个作业或多道程序之间的并行执行

    从计算机系统中处理数据的并行性角度来看

    字串位串——同时只对一个字的一位进行处理,通常指传统的串行单处理机,没有并行性

    字串位并——同时对一个字的全部位进行并行处理,通常指传统的并行单处理机,开始出现并行性

    字并位串——同时对许多字的同一位进行处理,开始进入并行处理领域

    字并位并——同时对许多字的全部或部分位组进行处理。

    从计算机信息加工的各个步骤和阶段来看

    存储器操作并行——可以采用单体多字、多体单字或多体多字方式在一个存储周期内访问多个字,进而采用按内容访问方式在一个存储周期内用位串字并获全并行方式实现对存储器中大量字的高速并行比较、检索、更新、变换等操作。典型的例子就是并行存储器系统和以相联存储器为核心构成的相联处理机。

    处理机操作步骤并行——处理机操作步骤可以指一条指令的取指、分析、执行等操作步骤,也可指如浮点加法的求阶差、对阶、尾加、舍入、规格化等具体操作的执行步骤。操作步骤并行就是将操作步骤或具体操作的执行步骤在时间上重叠流水地进行。典型的例子就是流水线处理机。

    处理机操作

    展开全文
  • 微机原理实验二 8255A并行接口应用实验二 8255A 并行接口应用一、实验目的1.掌握8255A 的功能及方式0、1 的实现2 .熟悉8255A 与CPU 的接口,以及传输数据的工作原理及编程方法。3 .了解七段数码管显示数字的原理...
  • 《湖南大学并行计算课程报告》由会员分享,可在线阅读,更多相关《湖南大学并行计算课程报告(7页珍藏版)》请在人人文库网上搜索。1、并行系统的调度设计问题我们组选取了五篇关于并行系统调度的相关论文,并进行了...
  • 天萃荷净Oracle研究中心学习笔记:分享一篇关于Oracle数据库parallel并行的文章,详细介绍了何时使用sql并行,与分析sql并行的执行计划的方法。详见文章内容关于Oracle 的并行执行,Oracle 官方文档有详细的说明:...
  • @Override public List getFollowers(@InvokeParameter("userId")Long userId) { 其中 @DataProvider 与前面的含义相同, 表示这个方法是一个数据提供者 @InvokeParameter 表示方法执行时, 需要手动传入的参数 ...
  • 尽管现在每个主要的数据库供应商都声称可以提供并行处理能力,但每个供应商所提供的体系结构其实存在关键的差异。 中国网管论坛bbs.bitscn.com本文讨论oracle9 i 并行处理的体系结构,并说明于在实际应用中其相对于...
  • 但是,随着神经网络结构设计技术不断成熟,想通过优化神经网络结构来打破模型的精度瓶颈遇到了很大的挑战。 ​ 根据一些研究表明,通过增大数据规模和模型规模,可以进一步提升模型精度。但是,这也意味着训练时间...
  • 当前在 Web 端使用图形 API 实现 GPGPU 的技术原理,以及前端开发者可能遇到的难点 相关业界实践,包括布局计算、动画插值等 局限性与未来展望 一 什么是 GPGPU 由于硬件结构不同,GPU 与 CPU 擅长执行不同类型...
  • 并行程序在效率上的简单比较问题:多核与单核的CPU在运行串行、并行程序时时,在效率上的差别。多核兴起:20世纪40年代第一台电子管计算机的发明标志计算工具进入了一个崭新的时代。20世纪50年代末,晶体管的发现...
  • [Java教程]并发 并行 同步 异步 多线程的区别0 2016-07-29 19:00:171. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系...
  • PARALLEL(并行

    2021-06-16 11:01:12
    如何启用并行? 可以用hint、alter session或者设置对象并行属性三种方式设置启用并行。三种方式任意一种就可以使并行生效,如果多种方式同时存在的话,则优先级顺序是:hint -> alter session -> table/...
  • 《Oracle 高性能SQL引擎剖析:Oracle SQL 优化与调优技术详解》一书的附录部分。作为对该书的补充,帮助读者理解和掌握“提示”这一项在SQL优化中使用的这一重要辅助手段。语法:DRIVING_SITE([])描述:指示优化器...
  • 并行性分析的数学原理》既是计算机工程技术领域的理论专著,又是用抽象数学解决工程技术实际问题的应用专著。它囊括了(微积分学开创、由微分方程和复变函数等继承与发展的)精确思维与(概率论与数理统计和信息论...
  • postgres中的并行控制 文章目录postgres中的并行控制前言一、postgres的并行控制思想,二、数据的隔离级别2.1.四种隔离级别2.2读已提交隔离级别2.3 可重复读隔离级别2.4 可序列化隔离级别三.显式锁定3.1 为什么需要...
  • 23、【解析题】 并行计算是同时使用多个处理器来协同工作求解计算问题的过程,是提高计算机系统和处理能力的一种有效手段。 24、【解析题】 函数Len("大学计算机+基础")的结果是( ) 25、【解析题】 发展并不总是...
  • 23、【解析题】 微型计算机中使用的人事档案管理系统,属下列计算机应用中的 24、【解析题】 并行计算是同时使用多个处理器来协同工作求解计算问题的过程,是提高计算机系统和处理能力的一种有效手段。 25、【解析...
  • 《微机原理与接口技术综述论文》由会员分享,可在线阅读,更多相关《微机原理与接口技术综述论文(5页珍藏版)》请在人人文库网上搜索。1、微机原理与接口技术综 述 论 文班级:10计本(1)班姓名:许生亮学号:...
  • 除Hadoop外的9个大数据技术:1.Apache Flink2.Apache Samza3.Google Cloud Data Flow4.StreamSets5.Tensor Flow6.Apache NiFi7.Druid8.LinkedIn WhereHows9.Microsoft Cognitive ServicesHadoop是大数据领域最流行的...
  • 作者|张俊林编辑|炼丹笔记 《推荐系统技术演进趋势》从召回篇、排序篇、重排篇依次更新,本文为排序篇。错过《推荐系统技术演进趋势:召回篇》的小伙伴可以点击链接跳转阅读。背景...
  • 计算机原理:CPU、并发、并行、多核、多线程、多进程0、计算机工作流程0.0 基础概念:计算机组成0.1 CPU(Central Processing Unit)(1)控制单元(2)运算单元(3)存储单元:0.2 计算机总线(Bus)0.3计算机工作...
  • 解:指令流水线是指8086/8088CPU内部的执行单元EU和总线接口单元BIU通过指令预取队列协同工作从而实现指令的并行执行。指令流水线最主要的硬件支持是BIU内部的指令预取队列。 3. 逻辑地址如何转换成物理地址?已知...
  • 本文将介绍Python分布式并行编程模块Parallel python(简称PP),pp-1.6.4.4的使用。 PP是一个python模块,提供在SMP(多处理器或多核)和集群(通过网络连接的计算机)上并行执行python代码的机制。 PP模块克服了...
  • 【摘要】近年来,网络与各类电子产品在我国得到了广泛的普及,电子信息科学技术已成为现代人高品质、高效率生活不可或缺的组成部分,它的广泛应用也对我们的生活理念产生了深远的影响,以此,有对电子信息科学技术的...
  • 串口通信基本概念(一)——串行与并行通信,同步与异步通信 一、串口通信简介 串口通信,顾名思义也就是利用串行接口进行通信。串行接口指串口按位(bit)发送和接收字节。尽管比按字节(byte)传输的并行通信慢,...
  • 对于很多有限元分析计算量都非常庞大,为了提高有限元分析的计算速度,Ansys允许在一次分析中使用多台计算机进行并行计算,或使用单台计算机的多个CPU内核进行多核运算。在Ansys中进行并行计算或多核计算设置,可在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,147
精华内容 18,058
关键字:

并行技术的含义