我正在使用Scientific Linux (SL)。我正在尝试编译一个使用一堆 C++ (.cpp) 文件的项目。
在目录中user/project/Build,我输入make以编译和链接所有 .cpp 文件。然后我必须去user/run/然后输入./run.sh values.txt
要使用 GDB 进行调试,我必须转到user/run然后键入gdb ../project/Build/bin/Project并运行,我输入run -Project INPUT/inputfile.txt. 但是,我正在尝试使用p variablename.
但是,我收到了消息s1 = <value optimized out>。我在网上做了一些研究,似乎我需要在没有优化的情况下编译-O0来解决这个问题。但是我在哪里输入呢?在CMakeLists?如果是这样,哪些 CMakeLists ?在project/Build或project/src/project?
在某些环境中,对某些指令或使用某些寄存器存在限制。例如,在 Linux 内核中,通常不允许使用 SSE/AVX 或 FP 寄存器。因此,大多数优化的 memcpy 变体无法使用,因为它们依赖于 SSE 或 AVX 寄存器,并且在 x86 上使用了基于 mov 的纯 64 位副本。对于这些平台,使用 rep movsb 可以在不破坏 SIMD 代码限制的情况下获得优化的 memcpy 的大部分性能。
为什么 x86_64 内核不能使用 SSE/AVX?如果它会使memcopy()速度更快,似乎应该允许它。我只是在学习 Intel Assembly,当我看到这个评论时,我特别想学习 SEE/AVX。
对 Linux 内核中的 SSE/MME 和 AVX 优化特别感兴趣。
我每天生成大约 200 GB 的日志数据,分布在大约 150 个不同的日志文件中。
我有一个脚本将文件移动到一个临时位置,并在临时目录上执行 tar-bz2。
我得到了很好的结果,因为 200 GB 的日志被压缩到大约 12-15 GB。
问题是压缩文件需要很长时间。该cron的工作上午2:30每天运行,并继续运行,直到5:00-6:00 PM。
有没有办法提高压缩速度,更快地完成工作?有任何想法吗?
不要担心其他进程和所有,压缩发生的位置在NAS 上,我可以在专用VM上运行挂载 NAS并从那里运行压缩脚本。
以下是top的输出供参考:
top - 15:53:50 up 1093 days, 6:36, 1 user, load average: 1.00, 1.05, 1.07
Tasks: 101 total, 3 running, 98 sleeping, 0 stopped, 0 zombie
Cpu(s): 25.1%us, 0.7%sy, 0.0%ni, 74.1%id, 0.0%wa, 0.0%hi, 0.1%si, 0.1%st
Mem: 8388608k total, 8334844k used, 53764k free, 9800k buffers
Swap: 12550136k total, 488k used, 12549648k free, 4936168k …Run Code Online (Sandbox Code Playgroud) 给定的
cmd='fun(){ echo "$@"; }; fun $(fun $(fun hi))'
Run Code Online (Sandbox Code Playgroud)
贝壳往往需要制作 2 个叉子才能实现
strace-f(){ strace -f "$@" 2>&1; };
for sh in dash bash zsh ksh; do
printf "$sh\t" ; strace-f $sh -c "$cmd" |grep -e clone -e fork -c;
done
Run Code Online (Sandbox Code Playgroud)
除了ksh英勇地使它没有分叉一次:
dash 2
bash 2
zsh 2
ksh 0
Run Code Online (Sandbox Code Playgroud)
它是如何做到的?
编辑:
下面是它如何随着一个管道的插入而下降:
cmd='fun(){ echo "$@"| echo "$@"; }; fun $(fun $(fun hi))'
Run Code Online (Sandbox Code Playgroud)
输出:
dash 11
bash 10
zsh 5
ksh 3
Run Code Online (Sandbox Code Playgroud) 是否等同于将命令直接打印到文件,而不是写入文件描述符?
插图
直接写入文件:
for i in {1..1000}; do >>x echo "$i"; done
Run Code Online (Sandbox Code Playgroud)
使用 fd:
exec 3>&1 1>x
for i in {1..1000}; do echo "$i"; done
exec 1>&3 3>&-
Run Code Online (Sandbox Code Playgroud)
后一种效率更高吗?
我知道这已经讨论过很多次了,但是互联网上有很多不同的意见,哪些优化对 SSD 有利(以及是否使用它们)。此外,技术已经进步,一些建议可能已经过时。
这似乎仍然相关,但根据ycombinator讨论中的用户 cabirum 的说法:
您不必过度配置未分区的空间并保留 20% 的分区可用空间。这是一个或另一个,关键是要有足够的可用空间来进行适当的磨损平衡。
另一方面,在ArchWiki或namhuy 的这篇文章中没有提到它。还有什么更简单的 Linux建议!
namhuy建议两者,ArchWiki和easylinux建议仅 noatime 和用户 andmarios 在ycombinator说:
noatime:这是旧的,使用relatime。
这是根据自 Linux 2.6.30 以来的手册页默认行为。
这可能是最大的混乱
/etc/rc.local. 不要使用discard挂载选项。fstrim.service和fstrim.timer. 警告有关discard.discard选项。ArchWiki、namhuy、easylinux建议将浏览器缓存移至 RAM。这在ycombinator 中通常是不同意的。 …
有没有机会创建一个配置来完成以下工作?
仅当信号强于 30% 时才连接到可用的 WiFi
在很多地方,我都住在几乎没有wifi信号的边境地区。于是那些不可避免的信号中断就很烦人,所以我总是不得不自己手动在移动数据和wifi之间切换。
是否有机会设置一些仅允许连接到 WiFi 的配置,以便在信号强度足以避免终止的情况下(并由此保证稳定的连接)?
简化方法:
如果信号强度 < 30 % ? 连接不容许
如果信号强度是 ? 30%?允许连接
30% 的值当然只是一个例子......也许 20% 会更有意义,我们会看到!
我写了两个 C 程序
现在我想知道两个程序消耗的内存,看看如何优化内存。
optimization ×8
shell ×2
assembly ×1
bash ×1
bzip2 ×1
c ×1
cmake ×1
connectivity ×1
cpu ×1
debugging ×1
fork ×1
gdb ×1
intel ×1
kernel ×1
ksh ×1
memory ×1
networking ×1
performance ×1
shell-script ×1
ssd ×1
syscalls ×1
tar ×1
wifi ×1