linux - Solaris 与 Linux 中的系统调用开销

标签 linux io solaris system-calls

不久前,我问了一个有关 SPARC 硬件上的 Solaris 10 系统调用成本的问题。在过去的几个月里,这个问题再次出现了几次,这是我发现的。

如果我们进行综合测试,以 256 字节 block 的形式从磁盘读取 300MB 文件,那么在 Solaris 10 中所需的时间比在 Linux 中要长得多。测试按以下方式完成:

dd if=test.dat of=/dev/null bs=256

即使 test.dat 存储在内存映射文件系统(如 /tmp)上,Linux 的性能也远远优于 Solaris。 Solaris 中用户空间和内核空间之间来回切换的开销似乎比 Linux 中高得多,即使两者都运行在相同的硬件上。

我有两个问题:

  1. 这是 Solaris 相对于 Linux 的某种已知缺点吗?
  2. 假设我无法将 I/O block 的大小从 256 增加,是否有办法调整 Solaris 以匹配 Linux 数字?

谢谢!

最佳答案

我想您已经进行了真正的同类比较,Solaris 和 LINUX 机器在性能/容量上是相同的?无论如何,一些关键问题可以帮助您解决这个问题:

1) 如果您在 dd 运行时运行命令 vmstat 1,您会在 Solaris 10 机器上与 LINUX 机器上得到什么类型的数字?

2) 该操作花费了多少时间?我发现在运行 Solaris 10 x86 的 PC 上只需要 2 秒就可以完成此操作...

3) 尝试为 if 参数使用完全限定路径(即 if=/tmp/test.datif=test.dat strong>) 只是为了双重确保您正在运行/tmp。

肖恩。

关于linux - Solaris 与 Linux 中的系统调用开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9970782/

相关文章:

c - 与 gcc 链接时 Solaris 和 GNU/Linux 之间的 lpthread 库差异

sockets - Solaris10中如何发送ACK包

regex - sed 命令在 solaris 中不能正常工作但在 linux 中工作

c++ - 在已经运行的循环上添加另一个计时器

linux - 循环 bash 脚本

linux - Linux C 应用程序中的原始套接字与 Libpcap

java i/o 读取多行文件并存储为数组列表

linux - amazon linux ami 的启动脚本

java - 数组的输入被 "quit "字停止

Java 命令 lastModified() 在 Clojure 中不起作用