本教程说明了如何在 Solaris 10 或 OpenSolaris 操作系统上运行的 C/C++ 项目中使用 I/O 使用情况工具。只有 Solaris 操作系统支持该工具,因为需要使用 Solaris DTrace 实用程序为该工具收集系统数据和程序数据。在 Solaris 操作系统上运行 C 或 C++ NetBeans 项目时,将缺省运行 I/O 使用情况工具。如果需要,可以在项目属性中禁用该工具。
如果您是 Windows 或 MacOS X 用户并且网络上有可用的 Solaris 系统,请注意,您可以在 PC 或 Mac 本地运行 IDE 并将项目设置为使用 Solaris 系统作为远程开发主机。通过进行远程开发,即使您在 Windows 或 MacOS X 上运行 IDE,也可以使用 I/O 使用情况工具和其他基于 Solaris 的工具。仅 NetBeans IDE 的 C/C++/Fortran 模块中提供了远程开发功能。有关如何进行设置以在远程开发主机上生成项目的详细信息,请参见 C/C++ 远程开发教程。
本教程使用在基于 SPARC 处理器的单核 Solaris 系统上运行的项目。如果在基于 SPARC 或 x86 的 Solaris 操作系统上运行 NetBeans IDE 6.8,则可以按照本教程中的步骤进行操作。请注意,本教程使用“Solaris 操作系统”表示 OpenSolaris 和 Solaris 10 操作系统。
I/O 数据收集
可以使用 DTrace 收集输入/输出数据,该工具用于跟踪在 Solaris 10 和 OpenSolaris 操作系统中运行的程序的活动。将使用一个特殊 DTrace 脚本截取与 I/O 有关的 Solaris 系统调用:打开、创建、关闭、读取和写入。该脚本累积数据并将其传送到 NetBeans IDE 进行分析,然后 IDE 以图形方式显示这些信息;在单击“I/O 详细信息”按钮时,将以表格形式显示这些信息。
为了说明 I/O 使用情况性能分析功能,我们将通过 IDE 中包含的性能分析演示样例应用程序创建一个新项目。
性能分析演示应用程序包含三个阶段,每个阶段在 10 秒钟内重复执行任务,以使用三种不同的方法生成一些相关活动以便在性能分析工具中进行显示。第一个任务在文件中写入一些数据,然后执行一些任务(数量不固定)以进行一些计算。计算任务数量取决于 CPU 数。
对于单 CPU 计算机,任务集包含两个任务:一个任务在文件中写入数据,另一个任务执行一些计算。
对于多 CPU 计算机,任务总数等于 CPU 数。如果 CPU 数为 N 个,则任务集包含 N 个任务:一个任务在文件中写入数据,N-1 个任务执行计算。
例如,如果开发主机有 32 个内核,则程序执行一个写入任务和 31 个计算任务。必须按 Enter 键才能开始执行每个任务,因此,必须注意输出窗口。
性能分析演示项目的各个阶段如下:
串行演示是一个单线程程序,它依次运行两个任务,每个任务运行 10 秒。在具有大量 CPU 的系统上,这可能需要一些时间,因为将依次执行更多的任务集。
并行演示是一个多线程程序,它在单独线程中同时执行相同的文件写入和计算任务,每个 CPU 执行一次。在多内核计算机上,此阶段比串行演示快得多,因为此阶段执行的任务数与串行演示相同,但这些任务是同时执行的。不过,无法防止线程竞争访问相同的数据,这可能会导致结果不准确。性能分析演示中的线程没有共享数据,因此不会出现结果不准确的风险。当然,在其他程序中不能保证能获得准确结果。
请注意,在输出窗口中,性能分析演示程序将告诉您所执行的操作,这样您就可以将其与 IDE 在工具中以图形表示的数据进行比较。例如,程序显示在要求您按 Enter 键之前经过的运行时间,显示将要分配的内存量,执行计算,然后释放内存。您可以看到该图反映了程序的活动。
串行演示输出
对于本教程,请运行程序一直到完成,每次出现提示时按 Enter 键。将保存收集的数据,我们将逐步执行程序并了解 I/O 使用情况工具的功能。
了解 I/O 使用情况
I/O 使用情况工具显示项目运行期间的程序读取和写入活动的概况。
下面的屏幕快照是在开始运行程序的串行演示部分时生成的,该阶段将在单个线程中依次运行两个任务。程序启动需要几秒钟的时间,然后等待用户按 Enter 键。在约 0:02 秒处,用户按 Enter 键,程序将在临时文件中写入字符。在 I/O 使用情况工具中,将使用橙色线显示写入的字节数以反映该活动。请注意以下内容: