2

我正在尝试使用 DTrace 分析 TCP 滑动窗口。我找到了以下博客文章 ( https://blogs.oracle.com/amaguire/entry/dtrace_tcp_provider_and_tcp ),其中包含一个 dtrace 脚本。不幸的是,我总是得到错误

line 4: translator does not define conversion for member: cs_cid

我还检查了 tcp 探针的文档(https://wikis.oracle.com/display/DTrace/tcp+Provider)并且似乎定义了 cs_cid 。

我正在使用 Mac OS X 10.9。

我不确定我做错了什么,所以任何建议将不胜感激......

4

1 回答 1

4

简短的回答是,您发现的脚本利用了特定于操作系统的 Solaris 知识,因此与 OS X 无关。

查看tcp 提供程序的 Solaris 文档显示, fortcp:::sendargs[1]类型为csinfo_t *where

typedef struct csinfo {
    uintptr_t cs_addr;
    uint64_t cs_cid;
    pid_t cs_pid;
    zoneid_t cs_zoneid;
} csinfo_t;

这不是内核数据结构:它的存在只是为了 DTrace 消费者的利益,并由翻译器动态填充。这允许在不破坏依赖接口的脚本的情况下更改操作系统实现。在 Solaris 系统上,您可以csinfo_t/usr/lib/dtrace/ip.d.

不同的供应商可以自由地实施他们认为合适的提供程序。从您所写的内容来看,似乎在 OS X 上tcp:::send'sargs[1]不是 acsinfo_t *或 acsinfo_t不包含 a cs_cid。如果没有任何证据表明 OS X tcp 提供程序反映了 Solaris,那么我会说追求使用您的脚本是徒劳的。

请注意,提供者不一定要面向最终用户。如果没有公开文档,那么我会看看是否有任何 OS X 实用程序在使用它——看看是否包含任何文件,例如字符串“ tcp:::”。也许那里已经有一些东西可以满足您的需求。

于 2013-11-14T15:06:47.743 回答