在 Linux 中写入 /dev/null 的优化程度如何?
How optimized are writes to /dev/null in Linux?
在 Linux 用户态程序中,如果我 open(2)
/dev/null
(或做一些等效的事情,比如将 stdout
重定向到 /dev/null
),然后write(2)
对于生成的句柄,我的写入请求在被丢弃之前传播到内核的深度有多深?是否发生数据的内存复制?是否发生内核上下文切换?
如果我对 /dev/null
句柄使用 writev(2)
,内核是否足够智能以跳过遍历传递的 iovec?
由于 null 是一个字符设备,写入会传递一个指向数据的指针和一个大小。只写 returns 传入的计数,不会发生数据复制。参见:https://elixir.bootlin.com/linux/v5.18/source/drivers/char/mem.c#L453
在 Linux 用户态程序中,如果我 open(2)
/dev/null
(或做一些等效的事情,比如将 stdout
重定向到 /dev/null
),然后write(2)
对于生成的句柄,我的写入请求在被丢弃之前传播到内核的深度有多深?是否发生数据的内存复制?是否发生内核上下文切换?
如果我对 /dev/null
句柄使用 writev(2)
,内核是否足够智能以跳过遍历传递的 iovec?
由于 null 是一个字符设备,写入会传递一个指向数据的指针和一个大小。只写 returns 传入的计数,不会发生数据复制。参见:https://elixir.bootlin.com/linux/v5.18/source/drivers/char/mem.c#L453