标签: performance

糟糕的一般 dm-crypt (LUKS) 写入性能

我正在调查一个问题,即加密块设备会在写入时造成巨大的性能损失。数小时的互联网阅读和实验并没有让我得到正确的理解,更不用说解决方案了。

简而言之:为什么将 btrfs 放到块设备上时我的写入速度非常快(~170MB/s),而将 dm-crypt/LUKS 放在块设备之间时写入速度会下降(~20MB/s)文件系统和块设备,尽管系统能够维持足够高的加密吞吐量?

设想

/home/schlimmchen/random是一个 4.0GB 的文件,里面装满了之前的数据/dev/urandom

dd if=/dev/urandom of=/home/schlimmchen/Documents/random bs=1M count=4096
Run Code Online (Sandbox Code Playgroud)

阅读速度超快:

$ dd if=/home/schlimmchen/Documents/random of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 6.58036 s, 648 MB/s
$ dd if=/home/schlimmchen/Documents/random of=/dev/null bs=1M
4265841146 bytes (4.3 GB) copied, 0.786102 s, 5.4 GB/s
Run Code Online (Sandbox Code Playgroud)

(第二次,文件显然是从缓存中读取的)。

未加密的 btrfs

设备直接用btrfs格式化(块设备上没有分区表)。

$ sudo mkfs.btrfs /dev/sdf
$ sudo mount /dev/sdf /mnt
$ sudo chmod 777 /mnt
Run Code Online (Sandbox Code Playgroud)

写入速度高达 ~170MB/s:

$ dd if=/home/schlimmchen/Documents/random of=/mnt/dd-test1 bs=1M conv=fsync
4265841146 bytes …
Run Code Online (Sandbox Code Playgroud)

performance dm-crypt btrfs luks cryptsetup

24
推荐指数
1
解决办法
9578
查看次数

如何平均时间命令?

我正在执行time一些命令。现在为了平均测量值,我想按照指定的次数运行和计时我的命令,并获得具有计算平均值和标准偏差的结果。结果是这样的:

avgtime -n 100 my_command

real    0m5.388s stdev 0m0.068s
user    0m5.380s stdev 0m0.067s
sys     0m0.004s stdev 0m0.000s
Run Code Online (Sandbox Code Playgroud)

是否有用于此的 UNIX 工具?GNU/Linux 有吗?

performance time benchmark time-utility

23
推荐指数
3
解决办法
6595
查看次数

使用 grep 与 awk

要捕获特定模式,awk并且grep可以使用。为什么我们应该使用一个?哪个更快,为什么?

如果我有一个日志文件并且我想获取某个模式,我可以执行以下操作之一

awk '/pattern/' /var/log/messages
Run Code Online (Sandbox Code Playgroud)

或者

grep 'pattern' /var/log/messages
Run Code Online (Sandbox Code Playgroud)

我没有做过任何基准测试,所以我不知道。有人可以详细说明吗?很高兴了解这两个工具的内部工作原理。

linux performance grep awk

23
推荐指数
4
解决办法
1万
查看次数

What is the quickest way of replacing 0 by 1 and vice-versa in a stream?

Given a string composed of 0s and 1s, my goal is to replace 0 by 1 and vice-versa. Example:

Input

111111100000000000000
Run Code Online (Sandbox Code Playgroud)

Intended output

000000011111111111111
Run Code Online (Sandbox Code Playgroud)

I tried, unsuccessfully, the following sed command

echo '111111100000000000000' | sed -e 's/0/1/g ; s/1/0/g'
000000000000000000000
Run Code Online (Sandbox Code Playgroud)

What am I missing?

performance sed text-processing

23
推荐指数
3
解决办法
3998
查看次数

如何使用“并行”来加速适合 RAM 的大文件的“排序”?

我有一个 100 M 行的文件,它适合 GNU/Linux 系统上的 RAM。

这是相当慢的:

sort bigfile > bigfile.sorted
Run Code Online (Sandbox Code Playgroud)

并且没有在我的机器上使用所有 48 个内核。

如何快速对该文件进行排序?

performance bash sort multithreading

23
推荐指数
1
解决办法
2106
查看次数

有没有开源工具来衡量cpu性能?

我曾多次ab用于测量 Web 性能、hdparm测量硬盘性能和netperf测量网络性能。

但是我没有找到任何测量cpu性能的工具。

您知道可以测量 CPU 性能的工具吗?我更具体地希望测量 Gflops。

linux performance opensource-projects

22
推荐指数
1
解决办法
2万
查看次数

为什么 rm 在具有 50Gb 文件的外部存储驱动器(通过 USB 连接,类型为 fuseblk)上速度很慢?

我一直在尝试使用rsnapshot进行备份,但我发现它无法使用。虽然它能够在几分钟内区分一个目录 (50gb) 并复制它(硬链接每个文件),我可以在大约半小时内 cp 整个目录,但删除它需要一个多小时。即使直接使用rm -rfv,我发现 rm 单个文件最多可能需要半秒钟,而cplink命令会立即完成。

为什么 rm 这么慢?有没有更快的方法来递归删除硬链接?复制文件比删除文件花费的时间更少对我来说没有意义。

我正在使用的文件系统是一个外部存储驱动器,通过 USB 连接并键入 fuseblk(我认为这意味着它是 ntfs)。我的电脑运行的是 ubuntu linux。

从顶部输出:

Cpu(s):  3.0%us,  1.5%sy,  0.0%ni, 54.8%id, 40.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8063700k total,  3602416k used,  4461284k free,   557604k buffers
Run Code Online (Sandbox Code Playgroud)

performance external-hdd rm

22
推荐指数
2
解决办法
2万
查看次数

为什么 coreutils 排序比 Python 慢?

我编写了以下脚本来测试 Python 排序功能的速度:

from sys import stdin, stdout
lines = list(stdin)
lines.sort()
stdout.writelines(lines)
Run Code Online (Sandbox Code Playgroud)

然后,我将其与sort包含 1000 万行的文件上的 coreutils命令进行了比较:

$ time python sort.py <numbers.txt >s1.txt
real    0m16.707s
user    0m16.288s
sys     0m0.420s

$ time sort <numbers.txt >s2.txt 
real    0m45.141s
user    2m28.304s
sys     0m0.380s
Run Code Online (Sandbox Code Playgroud)

内置命令使用了所有四个 CPU(Python 只使用了一个),但运行时间大约是其 3 倍!是什么赋予了?

我使用的是 Ubuntu 12.04.5(32 位)、Python 2.7.3 和sort8.13

performance python coreutils sort benchmark

22
推荐指数
3
解决办法
4267
查看次数

在将文件从 nfs-share 复制到本地目录时,rsync 与 cp 相比非常慢(因子 8 到 10)

我有一个新安装的 Ubuntu 服务器,它应该是我们 VM 存储的新备份服务器。该服务器有 4 个网卡,其中 2 个是 10Gbit(实际上是具有最新驱动程序的 intel x540-T2),用于连接到 SAN。我在本地安装了 nfs-share 并比较了速度差异,同时复制了一个包含 ~30 个文件、大约 15 个 vm-images 和相应日志文件的目录。图像大小介于 8 GB 和 600 GB 之间。

使用:

cp -rf /mnt/nfs-share /backup-storage/
Run Code Online (Sandbox Code Playgroud)

bmon 因此显示大约 600 MiB/s。

使用

rsync -av /mnt/nfs-share /backup-storage/
Run Code Online (Sandbox Code Playgroud)

bmon 在前几秒显示一些数据包,暂停大约 30 秒,然后增加到大约 60-75 MiB/s。CPU在60%左右。

我应该/可以更改什么以使用rsync与 相同的性能cp

performance ubuntu cp rsync

21
推荐指数
2
解决办法
5万
查看次数

有没有最快的方法关闭系统?

或者是shutdown -h now它可以得到的最快的?

我寻找一些 syscall 或类似的东西,它们将允许跳过在关闭之前完成的大量工作(特别是关心正在运行的过程)。

充其量我想要一个与内核相关的解决方案,对init-middleware(如systemdupstart)一无所知。

与即直接杀死所有服务(如cups/apache/pulseaudio 等)相关的风险......我不在乎......

备注:解决方案应该是软件副。在设备上按下按钮不是我想要的。

shutdown performance

21
推荐指数
3
解决办法
8827
查看次数