【问题标题】:System call: once and multiple, which is better?系统调用:一次和多次,哪个更好?
【发布时间】:2018-06-19 08:12:15
【问题描述】:

我有一个内核驱动程序来提供 I2C 的东西。

通过 I2C 支持单个 R/W 或批量(多个)R/W

如果是批处理,有什么好方法:

  1. 将批处理数据从用户传输到内核。然后从内核多次调用 I2C
  2. 从用户那里多次调用单个 R/W。

哪种方式更好?

【问题讨论】:

  • 这和c++有什么关系?
  • 我正在实现的用户应用程序是c++
  • 你量过吗?
  • 不,目前我正在使用方法#1,但它会在另一个操作系统上出现问题。因为,我转了一批数据,而且不是按顺序的。所以对于 Linux,我们可以随时调用 copy_from_user。但是对于另一个操作系统,它只允许将数据传输到内核一次。这意味着我必须打包和拆包。代码看起来很匆忙,浪费精力。
  • 系统调用比单纯的函数调用要贵几个数量级。尽量减少它们。

标签: c++ system-calls


【解决方案1】:

除非您使用一个微不足道的外内核,否则系统调用将涉及硬件中的上下文切换。这将比函数调用或复制一页数据大约几次花费更多的时间。

我假设您不是在谈论兆字节的数据,而只是几个字节。更好的打包和解包,绝对减少系统调用的次数。

【讨论】:

  • 还会导致调用线程的挂起和重新调度,并且还需要将参数从用户soace复制到内核soace,以及从另一个方向复制结果和错误,这两者都是昂贵的.
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 2011-01-04
  • 2012-06-12
  • 1970-01-01
  • 2011-03-17
  • 2015-02-23
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多