我有两台运行 Ubuntu Mate 22.04.3 的计算机。它们的配置应该完全相同。在每台计算机上,我都运行全屏 OpenGL 应用程序。一台机器 xorg 持续使用 ~4% 的 CPU。在另一台机器上,在完全相同的负载下,xorg 使用 20-40% 的 CPU。我正在尝试确定为什么存在差异。
我比较了两个系统上的以下命令:
- apt 列表--已安装
- gsettings 列表递归
在两种情况下,系统之间没有差异。
还有哪些工具/文件/文件夹/设置可用于比较两个系统?
谢谢!
答案1
由于找不到其他工具来执行此操作,所以我编写了自己的 Python 脚本。该脚本将扫描文件系统并获取它遇到的每个文件的文件大小和 CRC。输出一个 CSV 文件,其中包含文件名、大小、CRC。然后我使用 Notepad++ 的比较插件来比较每个系统的 CSV 文件。我还没有找到差异的原因,但万一这对其他人有用,下面是脚本:
import sys
from zlib import crc32
from os import walk, stat
from os.path import join
import csv
MB = 1024*1024
size_threshold = MB * 512 # don't bother with files > 512 MB
chunksize = MB * 8 # read in 8 MB chunks
# the folders that will be scanned recursively
accepted_roots = ['/bin', '/boot', '/etc', '/home', '/lib', '/opt', '/sbin', '/usr', '/var']
def get_crc(fname, expected_size):
c = 0
with open(fname, 'rb') as source:
read_size = 0
while True:
all = source.read(chunksize)
read_size += len(all)
c = crc32(all, c)
if len(all) != chunksize or read_size >= expected_size:
break
return c
if __name__ == "__main__":
with open(sys.argv[1], 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile, dialect='excel')
csvwriter.writerow(['File', 'Size', 'CRC'])
for check_root in accepted_roots:
for (root, dirs, files) in walk(check_root, topdown=True):
print("Checking: " + root)
for f in files:
fname = join(root, f)
try:
size = stat(fname).st_size
c = -1 if (size == 0 or size > size_threshold) else get_crc(fname, size)
csvwriter.writerow([fname, str(size), str(c)])
except Exception as ex:
print(f'Error with {fname}: {str(ex)}')