【问题标题】:Kernel traces returning Truncated message内核跟踪返回截断消息
【发布时间】:2018-04-12 07:17:46
【问题描述】:

“文件可能被截断。至少需要 %ld 大小,但大小为 %ld”。任何人都可以帮助我了解如何调用此消息吗?我在尝试收集内核跟踪时看到此消息。谁能解释为什么在我尝试收集内核跟踪时会发生这种情况?

我注意到的另一件事是,当我第一次看到上述消息时尝试收集内核跟踪。当我再次尝试立即收集时,我能够收集日志。但是当我在 > 5 分钟后再次尝试收集时,我看到了上述消息。

【问题讨论】:

    标签: kernel trace ftrace


    【解决方案1】:

    好的,当您尝试一次性获取/收集大量信息时,这就是内核的行为。

    话虽如此,在您的情况下,您需要再次调用您所做的操作,以便内核了解您确实想要显示那些 huge 信息。这就是您能够在第二次尝试中收集内核跟踪的原因。

    如果我没记错的话,您实际上是在调用read() 系统调用,它将尝试从 fd 读取字节并将其计数到从 buf 开始的缓冲区中。

    正如您可以从 Linux 内核源代码中看到的 read_write.crw_verify_area 函数不喜欢巨大的 counts。因此,它将它们限制在通常适合int 的范围内。所以它不必一直进行范围检查。

    TL;DR

    你得到的不是错误,很可能是一个特性让内核努力从用户错误地打开大文件。这个限制是由 Linux 内核中的rw_verify_area 函数创建的。 因此,它旨在至少调用两次 read 系统调用来获取您的数据。

    【讨论】:

    • 感谢 nzoueidi 的回复...我还有一个疑问。正如您所说,当一次性获取大量信息时会出现问题,但是“文件可能被截断”的消息与该问题有何关系。我的意思是说应该有一些其他警告或功能通知我们......(我希望你可能已经理解我的查询)
    • 不客气,该链接[1] 可以让您更好地了解“文件可能被截断”的消息。 [1]lwn.net/Articles/341352
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2011-06-11
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多