如何避免讀寫字元設備時CPU佔用率過高?

如何避免讀寫字元設備時CPU佔用率過高?

我需要為具有 SRAM 的 PCIe 裝置編寫 Linux 核心驅動程式。

對於第一次嘗試,我編寫了一個驅動程序,用於使用字元設備從 PCIe 存取 SRAM。

一切都按預期進行,但有一個問題。 SRAM 速度較慢,1MB 的讀取/寫入大約需要 2 秒,這是硬體限制。讀/寫時 CPU 100% 繁忙。女巫是個問題。我不需要速度,讀/寫可能會很慢,但為什麼它需要這麼多CPU?

緩衝區初始化為pci_iomap

  g_mmio_buffer[0] = pci_iomap(pdev, SRAM_BAR_H, g_mmio_length);

讀/寫函數如下所示:

static ssize_t dev_read(struct file *fp, char *buf, size_t len, loff_t *off) {
  unsigned long rval;
  size_t copied;

  rval = copy_to_user(buf, g_mmio_buffer[SRAM_BAR] + *off, len);

  if (rval < 0) return -EFAULT;

  copied = len - rval;
  *off += copied;

  return copied;
}

static ssize_t dev_write(struct file *fp, const char *buf, size_t len, loff_t *off) {
  unsigned long rval;
  size_t copied;

  rval = copy_from_user(g_mmio_buffer[SRAM_BAR] + *off, buf, len);

  if (rval < 0) return -EFAULT;

  copied = len - rval;
  *off += copied;

  return copied;
}

問題是CPU佔用率高怎麼辦?

我應該重寫驅動程式以使用區塊設備而不是字元嗎?

允許CPU在讀取/保存資料時處理另一個進程嗎?

相關內容