新闻中心

EEPW首页 > EDA/PCB > 学习方法与实践 > 多核调试方案加速开发进程

多核调试方案加速开发进程

——
作者:时间:2007-12-24来源:Wind River公司收藏
    对于设备而言,技术是指在单一处理器芯片中放入多个处理内核,可提供更高的处理器性能、更有效的电源利用率,并且占用更少的物理空间,因此给硬件和软件工程师带来了许多优势。 

  与解决方案相提并论的是多处理器技术,即在单块电路板或一个集成系统中包含多个处理器。为充分发挥以及多处理解决方案的潜能,仅仅拥有高性能的芯片是不够的,还需要采用新的方法和工具,以帮助软件和硬件人员在完整的多核系统环境中高效地进行工作,进而对“编译—编辑—”的流程进行优化。 

  在传统上,JTAG调试技术主要是用于硬件bring-up,近来也常常被用于配合基于代理的调试(agent-based debugging)。不过,在多核和多处理的环境中,片上调试(on-chip debugging)正扮演着越来越重要的角色,因为这种技术可隔离运行在单个或多个内核中不同软件之间复杂的交互活动,从而帮助人员对操作系统或中间件实施更加有效的调试。 

  多核处理器在单个芯片中植入了多个处理器引擎,这就可以提供更高的CPU性能、功能特性和分区选项。多核处理器通常有两种实现形式:第一种是对称多处理(SMP)。在这种情况下,开发人员面对的并非是多个内核,而是单一的抽象化硬件平台,由SMP操作系统决定具体由哪一个内核来运行哪个任务,其中每个内核都是相同的,而且在同一个操作系统的管理控制之下,共享同一个内存。第二种是非对称多处理(AMP)。在这种情况下,各个处理器内核都运行着各自独立的操作系统。这种独立性意味着,系统中的各个处理器内核既可以是同构的(运行同样的操作系统),也可以是异构的(运行各自不同的操作系统)。  

 

  由于多核环境显著增加了系统复杂度,因此在对操作系统和与多核相关的硬件进行调试的时候,就必须采用一整套更有效的工具。尽管传统的多核是指在单个芯片中放入多个内核,但是在实际开发工作中所遇到的与多核有关的问题,实际上不仅仅局限于在单一芯片中的多个内核。调试工作中的问题常常呈现为多处理的形式,而这些处理器的内核却不一定是在同一个芯片之中。不论这些处理器内核是在同一个芯片之中,或者是分布在同一个电路板中的多个芯片之中,甚至是同一个系统中的多个电路板之中,开发人员都必须解决好多处理环境中的调试问题。在一个非常复杂的系统中,开发人员很可能面临着系统中的多个CPU板采用了多内核和多处理器技术的问题。 

  多核与多处理技术带来了许多新的调试挑战,因为系统复杂度不断增加,以及要求通过优化硬件和软件来充分发挥多核的性能潜力,难度就更大了。其中最主要的挑战来自以下几个方面: 

  如何有效地管理内存和外设等共享资源; 

  如何在多内核、多电路板和多操作系统的环境中对操作系统和应用代码进行调试; 

  如何优化JTAG接口并充分利用JTAG带宽; 

  如何调试单个芯片中的同构和异构内核,进而实现整个系统的协同调试; 

  如何有效地利用基于代理的JTAG调试方法,并确保不同调试任务之间的平滑过渡; 

  如何确保多核环境中应用系统调试的同步机制。 

  对于多核JTAG调试来说,有三种主要的技术选择:以单一JTAG接口支持所有内核的调试器;在单一JTAG调试接口中采用独立调试器的JTAG多路技术;JTAG链接器或可编址扫描端口(addressable scan port)。在多核调试中,上述三种技术途径都是在处理同一个核心问题——由SoC厂商所提供的JTAG接口所造成的局限性。为了节省成本,许多SoC厂商都只为芯片提供单一的JTAG接口,而不理会其中包含了多少个内核。对于开发者来说,最大的挑战就是成本有效地使用这些接口来同步多核以及多处理器的调试工作。其中,单个调试器方式采用IEEE 1149.1标准菊花链(daisy chain)方法。 

  JTAG接口是4线:TDI、TDO、TCK和TMS。为了在多核调试中能够与LTAG接口相连,需用到的是TDI和TDO。在菊花链中,第一个内核的输出被连接到第二个内核的输入,以此类推,直到连接了所有的内核。被广泛应用的菊花链方法是基于标准的,并且在所有的多核调试环境中都是有效的。也就是说,不管是单个芯片中的多核、同一电路板中的多个CPU以及复杂系统中的多个CPU,菊花链方法都是有效的。在移动电话以及许多消费电子产品中十分常见的异构环境(不止一种处理器,也不止一种操作系统)中,菊花链也十分有效。 

  在菊花链方法中,JTAG调试器利用JTAG服务器的软件接口来解决多核环境中经常遇到的JTAG连接受限问题。不论内核位于何处,JTAG服务器都可通过JTAG接口来实现每个内核的编址。JTAG服务器还帮助开发者实现同一JTAG时钟下的内核同步、进程的起始与停止,以及连接的增加和移除,而且不会影响到扫描链中的微处理器或器件。这种方法可以保持精确的时钟,同时为跨越多个内核的不同操作系统或同一操作系统中不同进程的调试提供便利。而菊花链方法的核心目标是充分利用性能和JTAG带宽。 

  菊花链JTAG的主要问题是在Shift-IR阶段发送的数据量取决于在扫描链中发出数据的设备数量以及每个设备的IR长度。例如,在一个包含3个设备的菊花链中访问一个8位IR寄存器需要24位的数据量。这类问题对于DR同样存在,但由于一个处于旁路(bypass)模式的设备在Shift-DR阶段仅需1位的数据,从而减小了这类问题的影响。 

  如果JTAG服务器能够设计得十分恰当,则几乎可以避免对性能造成任何影响。这也正是Wind River所提供的JTAG解决方案的最大特点。Wind River提供的JTAG器和服务器技术可以显著减小JTAG序列包之间的空闲时间,完全充分地利用可用的JTAG带宽(如图2所示)。 



  与JTAG服务器有关的另一个问题涉及调试性能,例如,用停止请求信号来立即停止某个内核,或者用停止指示信号来停止某个内核并同步其它内核的停止动作。与其它所有的局限性一样,这类问题也依赖于供应商的实现方案。例如,Wind River Workbench片上调试解决方案就可以同时启动和停止多个内核。实际上,Wind River提供的JTAG解决方案(即Workbench On-Chip Debugging)是以集中化的方式来实现多核和多处理的调试功能。该解决方案可在单个扫描链中同时调试多达8个内核,而不管这些内核是处于单个芯片、电路板或是复杂的系统配置中。 

  在Wind River的多核解决方案中,开发人员可以同时停止或者启动任何内核,在一个或者多个内核上设置断点(包括条件断点)。此外,Workbench Eclipse框架和基于代理的调试方式使开发人员可在单一控制台上管理多内核/多处理开发项目。开发人员可以在JTAG调试和基于代理的调试之间灵活地选择,例如在硬件Bring-Up、内核、中间件和其它应用功能调试的时候采用JTAG连接,然后在适当的时候平滑地转移到基于代理的调试,而所有这些调试工作都是围绕着同一个应用的。这些功能会增强不同开发人员之间的协作能力,并改善解决问题的效率。 

  单个调试器采用的主流方法仍然是JTAG多路技术。这种技术对IEEE JTAG标准规范进行了扩展,以便为通过共享JTAG接口连接起来的每个内核提供独立的调试器。在多路技术的支持下,通过对待调试的内核进行注册,开发人员可经由单一JTAG接口访问多个离散的内核。这种解决方案的最大优势在于它的连接和调试性能。由于多路技术单独连接到每个内核,因而避免了菊花链方法中比特位移(bit shifting)的麻烦,并在单个芯片上提供了更高的性能。这种解决方案的另一个好处是不需要对开发工具进行修改,这使得它可以有效地应用在多个开发项目之中。 

  多路技术方法所存在的主要问题是在多内核调试过程中无法同时启动和停止内核来同步应用。如果要停止全部内核,开发人员只能逐个顺序进行,这就引发了调用延迟问题。调试过程中的延迟问题会导致很难在内核之间的操作系统、中间件和应用软件中找到问题的确切位置,特别是当运行在不同内核之中的应用存在相互依赖性的时候。例如,某个产品包含DSP功能和ARM 9内核,其中DSP用来处理视频流,ARM 9内核提供文件系统,那么内核的启动与停止同步将会十分关键。如果调试过程中在ARM内核的启动和DSP的停止之间出现较大的延迟,DSP视频流数据就会很快溢出ARM文件缓冲区,而视频流也将会中止。如果出现这种情况,就很难判断系统中的问题出在哪里。而且,多路进程也给开发人员在故障排除时带来了许多新的问题,将会大幅增加调试时间。 

  如果在由多家供应商器件组成的异构环境中进行调试(例如处理器来自一家厂商,而DSP器件来自另一家厂商),则会出现更复杂的问题。在这种情况下,多路机制更为复杂,如果各部分之间的兼容性未得到保证,就很难保证系统正常运行。当多个内核运行在一个系统上时,这一问题更加混乱。此时,仅仅依靠多路技术是无法解决问题的,开发人员还需要采用可编址扫描端口(addressable scan port)。这种架构需采用非常专有的组件,开发人员用这些组件将JTAG扫描链分割成多个功能组,并通过唯一的地址来访问每个功能组。这种多支路(multi-drop)架构经常被用于背板环境中,在那里,一个单独的可编址扫描链在背板上实现路由,从而使机箱中的每块电路板都拥有自己专属的扫描链。这种架构的运行速度受限于可编址扫描端口的速度,典型情况下为25MHz。 

  在多核开发中,JTAG调试可以担当非常有价值的角色,有效地改善“编辑-编译-调试”周期时间。但是,实现这一点的前提是将JTAG调试与基于标准的集成化开发环境(例如Eclipse)紧密地集成起来。最理想的技术方案是,在菊花链中采用遵从IEEE 1149.1 JTAG标准的单个JTAG调试器,而JTAG的主要作用是改善系统的吞吐能力和性能。Wind River提供的独有片上调试能力有效地集成了基于代理的调试技术,从而帮助开发人员即使在面临非常复杂的系统时,也可以极大地改善调试效率。 
linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭