小编Pet*_*ter的帖子

如何限制复制使用的缓存,以便仍有可用于其他缓存的内存?

基本情况:

我在openSuSE中复制一些NTFS磁盘.每个都是2TB.当我这样做时,系统运行缓慢.

我的猜测:

我相信这可能是由于缓存.Linux决定丢弃有用的缓存(例如kde4膨胀,虚拟机磁盘,LibreOffice二进制文件,Thunderbird二进制文件等),而是用复制磁盘中的东西填充所有可用内存(总共24 GB),这些内容只读一次,然后写,再也没用过.因此,每当我使用这些应用程序(或kde4)时,需要再次读取磁盘,并再次读取磁盘上的膨胀使得事情冻结/打嗝.

由于缓存消失以及这些膨胀的应用程序需要大量缓存的事实,这使得系统非常慢.

由于它是USB,磁盘和磁盘控制器不是瓶颈,因此使用ionice不会使它更快.

我相信这是缓存,而不仅仅是主板太慢,因为如果我停止一切复制,它仍会运行一段时间,直到它重新读取所有内容.如果我重新启动复制,它需要一分钟才能再次出现波动.但是,我可以将它限制在大约40 MB/s,并且它再次运行得更快(不是因为它具有正确的缓存,而是因为主板总线为系统磁盘提供了大量额外带宽).我可以完全接受主板的IO功能被完全消耗的性能损失(100%使用,意味着0%的浪费功率让我开心),但我不能接受这种缓存机制在这个特定用途中表现如此糟糕案件.

# free
             total       used       free     shared    buffers     cached
Mem:      24731556   24531876     199680          0    8834056   12998916
-/+ buffers/cache:    2698904   22032652
Swap:      4194300      24764    4169536
Run Code Online (Sandbox Code Playgroud)

我也在Ubuntu上做了同样的事情,这导致整个系统挂起.;)

为了澄清,我不是要求如何为"系统"留出内存,而是为了"缓存".我知道缓存内存会在需要时自动返回给系统,但我的问题是它不会保留用于缓存特定的东西.

题:

有没有办法告诉这些复制操作限制内存使用,所以一些重要的事情仍然被缓存,因此任何减速是由于正常的磁盘使用而不重读相同的常用文件?例如,是否允许将每个进程/用户/文件系统的最大内存设置用作缓存/缓冲区?

linux filesystems usb caching file-copying

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

使用gdb通过共享库进入第三方功能

我正在使用gdb和一些共享库.我可以让gdb进入我自己的共享库,但不是第三方库.

当使用gdb时,我希望"s"(步骤)进入第三方库并向我展示它在这些opj_*函数中执行的行,而不是仅仅转到我自己的共享库代码中的下一行.

我很确定我在编译期间只是遗漏了一些东西,与链接有关(让gcc将一些调试标志传递给ld),但我不知道它是什么,或者在运行gdb时告诉它在哪里调试符号是.

以下是详细信息:

我安装了openjpeg库,调试信息和开发包.

# zypper search -si openjpeg
Loading repository data...
Reading installed packages...

S | Name                     | Type    | Version   | Arch   | Repository
--+--------------------------+---------+-----------+--------+-----------
i | libopenjpeg2_0           | package | 2.0.0-1.4 | x86_64 | packman   
i | libopenjpeg2_0-debuginfo | package | 2.0.0-1.4 | x86_64 | packman   
i | openjpeg2-devel          | package | 2.0.0-1.4 | x86_64 | packman   

# rpm -ql libopenjpeg2_0
/usr/lib64/libopenjpeg.so.2.0
/usr/lib64/libopenjpeg.so.2.0.0

# rpm -ql openjpeg2-devel
/usr/include/openjpeg-2.0
/usr/include/openjpeg-2.0/openjpeg.h
/usr/lib64/libopenjpeg.so
/usr/lib64/openjpeg-2.0
/usr/lib64/openjpeg-2.0/OpenJPEGConfig.cmake
/usr/lib64/openjpeg-2.0/OpenJPEGTargets-release.cmake
/usr/lib64/openjpeg-2.0/OpenJPEGTargets.cmake

# rpm …
Run Code Online (Sandbox Code Playgroud)

c gdb shared-libraries step-into

7
推荐指数
2
解决办法
3408
查看次数

标签 统计

c ×1

caching ×1

file-copying ×1

filesystems ×1

gdb ×1

linux ×1

shared-libraries ×1

step-into ×1

usb ×1