[新闻稿存档 ^] [< 第 4 卷第 1 号] [第 4 卷第 3 号 >]

Systems Internals 通讯第 4 卷,第 2 号

http://www.sysinternals.com
版权所有 (C) 2002 Mark Russinovich


8 月 12 日 - 本期:

  1. 编辑

  2. SYSINTERNALS 最近更新

    • TCPView v2.21
    • LiveKd v2.0
    • PsInfo v1.33|
    • PsList v1.21
    • BgInfo v3.0
    • PageDefrag v2.2
    • 适用于 Win64/Itanium 的 Regmon v4.34
    • PC World Magazine 中的 Sysinternals
    • Microsoft 的 Sysinternals
  3. 内部信息

    • Mark 和 David Solomon 在伦敦 Teach Internals
    • Inside Windows NT Development
    • 更改不计数时
    • .NET Server RC1
    • WMI 脚本负载
    • 使用 BootVis 分析启动进程
  4. 即将推出

    • 故障转储分析快速简介

赞助商:WINTERNALS SOFTWARE

Sysinternals 通讯由 Winternals Software 赞助,网址为 http://www.winternals.com. Winternals Software 是 Windows NT/2K/XP 高级系统工具的领先开发者和提供商。 Winternals Software 产品包括用于 Windows NT 4.0 的 FAT32、NTFSDOS Professional Edition(用于 DOS 的读/写 NTFS 驱动程序)和 Remote Recover。 Winternals 自豪地宣布,Defrag Manager 版本 2.0 是可用的最快、最彻底的企业碎片整理程序。 现在,你可以通过简单的 MMC 管理单元在整个 Windows 企业中管理碎片整理计划,甚至无需在 NT 或 Windows 2000 系统上安装任何客户端软件。 请访问 http://www.winternals.com/es 以获取详细信息或请求 30 天免费试用版。

大家好,

欢迎阅读 Sysinternals 新闻稿。 该新闻稿目前有 35,000 名订阅者。

你可能听说过 AMD 即将推出的 Hammer 处理器(现在正式宣布为“Opteron”)将于今年晚些时候发布。 借助 Hammer,AMD 正在将其与 Intel 的战争从 32 位领域带到 64 位领域。 我认为 Intel 应该害怕,我会告诉你为什么。

Itanium 是 Intel 进入 64 位领域的入口,包括 x86 二进制兼容性,作为简化迁移的一种方式。 Itanium 已进入市场近两年,但即使 HP-UX、Linux、Windows XP 64 位版本和 Windows Advanced Server 64 位版本都支持它,Itanium 也未能取得进步。 业内估计,Itaniums 只售出了几千台,我的猜测是,最近发布的 Itanium II 不会提高部署速度。

Itanium 到目前为止令人沮丧的原因是什么? 我认为,主要因素是,Itanium 和 Intel 的整个 64 位策略都基于新的 RISC 类型体系结构,除了 x86 二进制兼容性之外,Itanium 只是 Alpha、PA-RISC、Sparc64 和 PowerPC 中的又一个 64 位处理器。 尽管 Itanium 支持现有的 x86 32 位应用程序,但与本机 64 位应用程序相比,这些应用程序的性能会显著下降。 这意味着你需要确保希望在 Itanium 上以合理性能运行的任何应用程序都移植到 64 位。

另一方面,Hammer 是一种自然地将 x86 体系结构和指令集扩展到 64 位的演变。 它能够以几乎相同的性能级别并行运行 32 位应用程序和 64 位应用程序。 此外,可以将 Hammer 启动到完整的 32 位模式,让它好像是能够运行 32 位 OS 的标准 x86 系统。 不仅如此,Hammer 还支持 x86 16 位模式,并且即使启动到 64 位操作系统,也可以使用标准的 32 位 x86 BIOS 代码。 这意味着你可以有一个双启动系统,将 32 位 OS 作为一个选择,将 64 位 OS 作为另一个选择。

我相信 AMD 的方法比 Intel 在 Itanium 上的方向相比具有巨大的优势。 AMD 可以立即开始销售 Hammer,只要客户可能还没有准备好使用 64 位,或者只有一个应用程序可以利用 64 位计算机。 32 位应用程序可以充分利用 AMD 为 Hammer 提供的性能创新,如果 AMD 将 Hammer 定价为接近 32 位 CPU 的价格,那么购买的决策可能毫不费力。 这应该使 AMD 能够通过其 64 位处理器从低端开始渗透市场。 这与 Intel 的高端方法形成鲜明对比,那种策略的风险可能要大得多,而且需要更长的时间。 我相信 Hammer 会给 AMD 一个悄然进入的机会,并成为真正的 64 位平台。

Intel 可能会声称 Itanium 的“干净”显式并行指令计算 (EPIC) 体系结构提供了优于 AMD x86-64 的性能优势,是这样吗? 我们将不得不拭目以待,但目前来看 AMD 在 32 位领域已经给英特尔带来了巨大的冲击。 而且,如果你看看 Itanium II 与最好的 x86 处理器的比较(请参阅 www.spec.org),你会发现它们在整数性能上旗鼓相当,而 Itanium 在浮点方面领先 50-75%。 但是事实上,Itanium 的价格大约是它的两倍。 例如,Hewlett Packard 的低端 Itanium II 系统售价为 5865 美元,在同等配置中以 2GHz 运行的 Hewlett Packard Pentium IV 系统的成本仅为 2385 美元。

AMD 从何处获得了扩展 x86 体系结构的想法,而不选择定义一个具有 x86 兼容性功能的新体系? 当 Intel 进入 32 位世界时,它通过扩展 16 位 x86 体系结构和指令集来生成也可以运行 16 位应用程序的 32 位版本。 因此,32 位 x86 处理器可以运行 16 位和 32 位操作系统。 但是,Intel 没有将此方法用于它的 64 位策略。 这可能是因为,在90年代中期,它看到 x86 在性能方面快速接近天花板,考虑到设计的复杂性,它觉得一个新的设计可以在未来走得更远。 今天,Intel 和 AMD 都用惊人的 x86 时钟速度证明了这一假设是错误的 - Intel 已经演示了以 4 GHz 运行的 Pentium IV。 Intel 可能会为他们的误判付出代价。

请将这篇新闻稿传递给你认为可能对该内容感兴趣的朋友。

谢谢!

-马克

SYSINTERNALS 最近更新

TCPVIEW V2.21

TCPView 是 Sysinternals 网站上已有几年历史的应用程序,但在最近的 2.0 更新之前,它只不过是 Windows netstat 命令行工具的 GUI 版本。 此主要修订版带来了一系列强大的功能,其中最重要的功能是拥有每个 TCP 和 UDP 终结点的进程 NT 4、Windows 2000 和 Windows XP 上的显示。 还可以查看进程的版本数据和可执行文件路径,以及终止恶意进程。 如果想要阻止应用程序使用特定端口,一项非常有用的功能是在不终止进程的情况下动态关闭连接。

在 UI 区域中,最新版本以可选择的间隔和差异突出显示引入了自动刷新。 差异突出显示可帮助你在活动发生时放大活动,它会描述新项和已删除项的颜色突出显示,这是我从进程资源管理器带过来的功能。

在此处下载 TCPView v2.21:
http://www.sysinternals.com/ntw2k/source/tcpview.shtml

LIVEKD V2.0

David Solomon 和我为我们的《Inside Windows 2000》一书的 CD(请参阅 http://www.sysinternals.com/insidew2k.shtml)加入的一款工具是 LiveKd。 LiveKd 是 Microsoft 内核调试器的前端,可用于运行调试器以与实时系统交互。 使用调试器查看系统而无需使用第二台计算机和串行调试连接,这使探索内部功能变得简单,甚至可以用作故障排除帮助。 LiveKd 的第一个版本仅支持 NT 4 和 Windows 2000-LiveKd 版本 2.0,适用于 Windows XP。

尽管 Microsoft 遵循了我的领导,将实时内核调试功能添加到了 Windows XP,但在实时系统上运行时,一些调试命令不起作用,这就是为什么我需要更新 LiveKd 以便让它在 Windows XP 上工作。

一个示例是 !process 或 !thread 命令的堆栈输出。 LiveKd 会显示完整的内核堆栈,而使用内置的 XP 实时调试功能时则不显示。 另一个示例是 !stacks 命令,可用于查看线程当前正在执行的位置以及它们可能已开始执行的位置。 在调试涉及系统线程的问题并想要确定其用途时,!stacks 命令非常有用 - 我们知道执行线程的驱动程序可能是解决问题所需的线索。

在此处下载 LiveKd v2.0 补丁:
http://www.sysinternals.com/insidew2k.shtml
请注意,你需要书籍 CD 中的 LiveKd 副本,才能向其应用补丁。

PSINFO V1.33

PsInfo 是构成 PsTools 命令行套件的十几个工具之一,可远程支持 Windows NT/2000/XP 管理工具,会根据用户反馈不断发展。 版本 1.33 添加了列出已安装的修补程序和应用程序以及报告计算机磁盘卷的标签、大小和使用情况数据的功能。

在此处下载 PsInfo v1.33:
http://www.sysinternals.com/ntw2k/freeware/psinfo.shtml
在此处下载整个 PsTools 包:
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml

PSLIST V1.21

如果你喜欢使用命令行,或者曾希望获取具有 CPU 使用率数据的(本地或远程)计算机的进程列表,那么你将会对 PsList(PsTools 套件的另一个成员)的最新版本感兴趣。 PsList v1.2 推出了命令行开关,在命令窗口中以任务管理器模式运行它时,会按可配置的间隔更新并显示 CPU 使用率。 另一个新开关使 PsList 使用缩进来显示进程父子关系,这有时有助于理解你难以识别的进程的目的。

在此处下载 PsList v1.21:
http://www.sysinternals.com/ntw2k/freeware/pslist.shtml
在此处下载整个 PsTools 包:
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml

BGINFO V3.0

管理多个系统通常意味着必须处理使用便笺或打开系统信息实用工具来确定系统的规格和配置的烦恼。 BgInfo 是一个实用工具,可显示你直接在桌面上指定的标准和自定义系统信息,让你一目了然地了解你认为重要的所有数据。

BgInfo 已经很全能了,它允许你指定任何预定义的值集或指示 BgInfo 从注册表或文件中获取值。 BgInfo v3.0 推出了对 Visual Basic 脚本的支持,从而增加了更多的自定义功能,以便你可以创建脚本来捕获自定义配置设置并将其报告给 BgInfo 以供演示。

在此处下载 BgInfo v3.0:
http://www.sysinternals.com/ntw2k/freeware/bginfo.shtml

PAGEDEFRAG V2.2

你是否发现分页文件、注册表文件或事件日志文件越来越碎片化? 内置碎片整理程序不会处理这些文件,因为必须在操作系统运行之前在启动时对这些文件进行碎片整理。 PageDefrag 是一种轻量级碎片整理程序,其单一用途是对这些关键系统文件进行碎片整理。

PageDefrag 版本 2.2 包括 Windows XP 支持,它允许你指定 PageDefrag 在碎片整理之前显示的倒计时计时器。 该计时器的工作方式类似于 chkdsk 的一个实现,其中在倒计时期间按任意键会中止碎片整理。

在此处下载 PageDefrag v2.2:
http://www.sysinternals.com/ntw2k/freeware/pagedefrag.shtml

REGMON V4.34 for WIN64/ITANIUM

去年,Microsoft 借给我一个 Itanium 系统,让我可以将 Sysinternals 工具移植到 Win64。 并非所有工具都需要移植,因为借助 Itanium 的 32 位二进制兼容性支持,大多数 32 位应用程序可在运行 Windows XP 64 位版本的 Itanium 上运行,而无需更改。 但是,Windows XP 64 位版本不会加载 32 位驱动程序,这意味着任何具有驱动程序组件的 Sysinternals 工具都必须至少将驱动程序移植到 64 位。

我移植的第一个实用工具是 Filemon。 Filemon 的端口相对简单,因为只需更改驱动程序和 GUI 源以符合 64 位数据类型规则,然后重新编译。 我在上一期时事通讯中介绍了移植流程。 Regmon 的端口包含相同的数据类型问题,但还包含其他问题,这些问题使得移植更加困难。

Regmon 依赖于一个驱动程序,该驱动程序使用 Regmon 拦截例程修补内核中的系统调用表,以便它可以监视注册表活动。 简言之,Itanium 上的系统调用接口具有依赖于处理器的特征,使我在 32 位驱动程序中使用的方法不可用。 因此,我必须使用一些复杂的代码来获取系统调用拦截,然后才能在 64 位 XP 上工作。

幸运的是,Microsoft 已在 Windows .NET Server 内核中实现了注册表活动回调接口,这使得 Regmon 用于监视注册表活动的技术变得没有必要。 请在不远的将来查看 Regmon 更新,它会演示新的 Windows .NET Server API 以及新闻稿中的 API 说明。

在此处下载 Regmon v4.34:
http://www.sysinternals.com/ntw2k/source/regmon.shtml

PC World Magazine 中的 Sysinternals

Regmon 和 Filemon 在 8 月期的 PC World 杂志(发行量很高的计算机杂志)上都得到了很好的推荐,被作为推荐的故障排除工具。 有关详细信息,请参阅 http://www.pcworld.com/features/article/0,aid,101750,00.asp

WWW.MICROSOFT.COM 上的 SYSINTERNALS

以下是自上次新闻稿以来发布的 Microsoft 知识库 (KB) 文章中 Sysinternals 参考的最新一期。 从此,关于 Sysinternals 的 KB 参考文章总数达到 38 篇。

  • 如何:在 Windows 2000 中创建自定义管理模板
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;q323639

  • 如果未为策略文件授予 Oplock,则慢速链接会导致登录延迟
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319440

  • XCON:MTA 进程泄漏内存,句柄计数较高 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q313735

此外,Microsoft 已将 Sysinternals 视为当前精选的 Windows XP Embedded 社区网站! 查看 http://www.microsoft.com/windows/embedded/community/default.asp

内部信息

Mark 和 David Solomon 在伦敦 Teach Internals

来听我和 David Solomon 在伦敦 9 月 23 日至 25 日为期 3 天的 Windows 2000/XP/.NET Server 内部课程(下次课程在德克萨斯州奥斯汀 12 月 9 日至 11 日)。 该课程以《Inside Windows 2000,第三版》为基础,涵盖了内核体系结构、关键系统组件的相互关系,以及系统线程、系统调用调度、中断处理、启动和关闭等机制。 涵盖的关键子系统的内部包括进程和线程、线程计划、内存管理、安全性、I/O 系统、NTFS 和缓存管理器等。 通过了解 OS 的内部工作原理,可以更有效地利用平台,更有效地调试和排查问题。

有关详细信息,请参阅 http://www.sysinternals.com/seminar.shtml

INSIDE WINDOWS NT DEVELOPMENT

此演示文稿已经有几年的历史了,但还是一个有趣的了解 Windows NT 3.1 到 Windows 2000 的开发历史的入口。 Mark Lucovsky,最初的 NT 软件工程师之一,在 2000 年的 USENIX 年度技术会议上发表演讲。 他描述了开发团队的规模、缺陷率(他们编写的代码,不是成员)、源代码管理系统和团队开发挑战。

http://www.usenix.org/events/usenix-win2000/invitedtalks/lucovsky_html/ 查看 Mark Lucovsky 关于 NT 开发历史的演讲

作为参考,以下是 Microsoft 自己的 Windows 历史记录,从 Window 1.0 到 Windows .NET Server:http://www.microsoft.com/windows/WinHistoryIntro.asp

更改不计数时

Windows 跟踪文件和目录的多个时间戳。 它们包括创建、上次访问和上次修改的时间。 上次修改的时间戳记录为上次写入文件的时间。 遗憾的是,依赖于此项为真的应用程序会遇到很大的意外。

如果应用程序使用 CreateFile API 打开文件,然后通过 WriteFile 或其变体写入该文件,则上次修改时间会反映文件最近修改的时间。 如果应用程序使用 CreateFileMappingMapViewOfFile 打开内存映射 I/O 文件,然后通过更改映射的内容来修改文件,则内存管理器最终会将数据写回到该文件,并且磁盘版本会修改。 问题在于,当由于内存映射写入而发生修改时,文件系统驱动程序不会更新文件的上次修改时间。

为什么看不到? 我猜测开发人员为了提高性能而走了捷径,但此行为并未记录,因此我只能进行推测。 我猜并不是所有写入都是平等创建的。

.NET SERVER RC 1

Windows .NET Server RC 1 已发货,Microsoft 有可能在今年年底之前(与在同一年被蛇和鲨鱼咬伤的可能性差不多)推出新服务器操作系统的 RTM(发布给制造商)版本。 从内核的角度来看,与 Windows XP 相比没有重大的可见更改。 没有任何重大的新内核子系统、Win32 或内核 API - 只是做了一些调整以增强大型系统上的性能,补充了一些 API 来完善现有 API 集。

但是,用户空间发生了重大变化。 最大的当然是 .NET Framework,但也有面向服务器的新服务。 Windows XP 中为备份推出的卷影复制服务,它使客户端用户能够将服务器共享上的文件回滚到以前的版本。 无需管理员交互,因为用户只需在新的资源管理器文件属性选项卡中显示的文件历史记录列表中选择所需的条目。

服务器网络增强功能是 Winsock Direct,它是一种基础结构,允许具有专用网络互连的多层配置(称为系统区域网络 (SAN))中的服务器上的应用程序直接与网络硬件通信,绕过 TCP/IP 堆栈和内核。

可以期待一下 David Solomon 和我即将发布的一篇文章,其中介绍了 .NET 服务器系统级更改。 我们还会在 Inside Windows 2000 的下一个修订版(称为 Windows Internals)中介绍 .NET Server,发布时间为明年春季。

WMI 脚本的负载

如果你喜欢 Sysinternals 的 PsTools 套件,那么你可能是脚本迷,并且如果你的系统运行的是 Windows 2000 或 XP,或者安装了 NT 4 WMI 核心组件,那你应该前往 Microsoft 的 TechNet 网站,并获取他们在那里发布的免费 WMI 示例脚本。 那里有一个大型集合,它们分为“计算机管理”和“网络”等类别,你可以单独下载它们,也可以一次性全部下载。

在 http://www.microsoft.com/technet/treeview/default.asp?url=/technet/scrip tcenter/sampscr.asp 获取免费示例 WMI 脚本

说到 Microsoft 的免费内容,你可以找到已发布供下载的 Windows 2000 资源工具包工具的的一部分。 访问 http://www.microsoft.com/windows2000/techinfo/reskit/en-us/default.asp

使用 BOOTVIS 分析启动过程

我时不时收到一些请求,要求开发用于监视启动过程的 Sysinternals 工具,以便用户可以确定哪些原因导致了他们可能会遇到的延迟。 幸运的是,我等了足够长的时间,让 Microsoft 打败了我。 他们编写的工具叫做 BootVis,它在为 Windows XP 实现的启动性能优化方面扮演了重要角色。 可在 http://www.microsoft.com/HWDEV/PLATFORM/performance/fastboot/BootVis.asp 下载它。 BootVis 仅在 Windows XP 上运行,它使用 XP 的 WMI 内核跟踪工具收集启动过程的详细跟踪,包括 CPU 使用率、磁盘 I/O、进程启动和驱动程序 I/O。 将 BootVis 附带的帮助文件称为“简明扼要”都太客气了,所以我将指导你了解如何使用该工具。

如果你希望能够准确查看哪些具有驱动程序和模块的函数占 CPU 时间,请打开“工具|选项”对话框,然后将 BootVis 指向已安装的 Windows XP 符号。 接下来,通过选择“跟踪|下一次启动+驱动程序延迟”让 BootVis 捕获下一次启动的跟踪,包括驱动程序延迟。 BootVis 将倒计时,然后重新启动系统。

系统启动后,请登录并再次运行 BootVis。 选择“跟踪|停止跟踪”,它将提取从内核收集的跟踪,并将其保存到文件,然后它会加载该文件以进行显示。 你将看到四个图表。 在 CPU 使用率中,可以看到通过启动消耗的 CPU 处理量跟踪。 磁盘 I/O 条形图显示每秒发生的磁盘读取数(红色)和写入数(蓝色)。 在“驱动程序延迟”图中,你将看到表示持续时间大于默认的 BootVis 切割线 100 毫秒的驱动程序 I/O 的矩形 - 此类延迟被视为显著。 最后,“进程创建”图表显示已启动进程的被标记的矩形。

BootVis 不一定会显示启动时收集的所有跟踪数据,因此请使用“缩小”按钮,直到你开始看到图形数据的右边缘。 现在,查看每个图形。 如果你看到了 CPU 或磁盘峰值,或者想要放大进程启动活动,请使用放大工具栏按钮。 请注意,放大时显示的开始时间将保持为 0,因此,在手动缩放后,请在“显示时间”编辑框中输入你感兴趣的活动附近的时间。

CPU 使用率、磁盘 I/O 和驱动程序延迟图让你能够查看比立即可见更多的信息。 通过移动光标、按下和按住鼠标左键,然后拖动,在感兴趣的图表中选择一个区域。 然后右键单击以获取菜单。 CPU 使用率图中有趣的菜单选项是“显示摘要”,它会弹开一个对话框,其中列出了按所选时间间隔的 CPU 使用率进程的细分。 如果双击其中一个进程,另一个对话框将打开,其中按模块显示 CPU 使用率的明细(例如进程中的 DLL)。 如果配置了符号,你甚至可以双击模块并获取一个对话框,其中按函数显示该模块的 CPU 使用情况明细。

右键单击磁盘 I/O 图中的选定区域时,将显示两个菜单项:“显示摘要表”和“显示详细信息图”。 选择“显示摘要表”查看间隔期间发生的所有 I/O 的记录(按模块细分)。 选择“显示详细信息图”会显示一个折线图,表示在间隔内访问的磁盘中的实际扇区。 详细信息图甚至将 I/O 与执行它们的进程相关联,并允许通过在左侧的列表中取消选择进程来筛掉这些进程。 可以通过右键单击并选择生成的菜单项,在详细信息图中选择一个区域,并访问该子间隔的另一个摘要图表。

从“驱动程序延迟”图的上下文菜单中选择“显示摘要表”后,会显示所选区域中显示的 I/O 列表,其中包括执行 I/O 的驱动程序的名称、每个 I/O 的开始、结束和总时间,以及执行的 I/O 函数。

到这里我的 BootVis 教程就结束了。 虽然它不是最精美的工具,但在玩了 BootVis 一段时间后,你无疑会同意我的观点,即在它的图形中可查看的细节程度是惊艳的。 下次你再出现启动缓慢,并想知道问题来源的话,你就知道在哪里找到答案了。

即将推出

故障转储分析快速简介

Microsoft 最近对其内核调试工具的增强使故障转储的分析几乎不费力。 下次我会告诉你如何在一小时内成为转储分析专家。


感谢阅读 Sysinternals 新闻稿。

发布于 2002 年 8 月 12 日,星期一,晚上 7:00,ottoh

[新闻稿存档 ^] [< 第 4 卷第 1 号] [第 4 卷第 3 号 >]