Awk比lz4解压慢

问题描述 投票:0回答:1

我有50万个文件,每个文件290 MB,其中大多数都是数字。我想(常规地)过滤掉这些数据,但是发现awk比解压缩要慢。例如,>

/usr/bin/time unlz4 bigfile.lz4 --stdout > /dev/null 0.20user 0.05system 0:00.44elapsed 57%CPU

/usr/bin/time unlz4 bigfile.lz4 --stdout | awk '{if ($26>120.) print}' > /dev/null 0.25user 0.25system 0:01.35elapsed 37%CPU

注意:

  • 在每个定时之前,我清除了页面缓存。
  • 输出数据的大小很小且不相关。在这种运动中,输出被完全丢弃。
  • awk在Ubuntu上是gawk 5.0.1
  • 尝试使用mawk而不是awk。没什么不同。
  • 我编写了一个C程序,该程序使用fscanf读取数据。它比awk慢得多。
  • 我尝试从HDD和SSD读取。两者的awk都比unlz4慢。
  • 每个lz4文件都有大约66 MB(从290 MB压缩)。
  • 使用未压缩的文件甚至更慢。cat bigfile | awk '{if ($26>120.) print}' > /dev/null
  • 我得出结论,使用lz4这样的快速解压缩格式而不是更强和更慢的压缩格式都无济于事,因为即使使用awk进行最简单的过滤也将成为瓶颈。

有人对此有任何见识或聪明的主意吗?有什么方法可以加快速度,还是我达到了身体极限?

我有50万个文件,每个文件290 MB,其中大多数都是数字。我想(常规地)过滤掉这些数据,但是发现awk比解压缩要慢。例如,/ usr / bin / ...

awk bigdata throughput lz4
1个回答
0
投票

看来您的文件足够小,以至于启动时间是运行时的重要因素。简而言之,unzl4 | anything > /dev/null总是比unlz4 > /dev/null花费更长的时间,因为在处理可以发生之前,流水线的两端都需要启动。因此,在流水线情况下测量较大的时间并不一定意味着使用者比生产者慢,或者您选择的压缩算法无关紧要。如果要衡量更改压缩算法的影响,请更改压缩算法并进行测量!

© www.soinside.com 2019 - 2024. All rights reserved.