热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我的i5笔记本电脑运行python脚本的速度比至强40核心服务器的CPUUbuntu18.04快,为什么?

我创建了一个python脚本,该脚本正在从文件中读取数据并从中提取所需的数据,问题

我创建了一个python脚本,该脚本正在从文件中读取数据并从中提取所需的数据,问题是该脚本在我的i5(Intel(R)Core(TM)i5-8300H CPU @ 2.30)上耗时37秒GHz)笔记本电脑,但在具有CPU(Intel®Xeon®CPU E5-2670 v2 @ 2.50GHz)的服务器上花费70秒。

服务器的CPU有40个内核,因此它应该比我的笔记本电脑执行任务更快。两个系统都运行ubuntu 18.04 OS。

该脚本正在使用多处理程序,而服务器是我的另一个系统,它没有承受更高的负载。我的笔记本电脑同时具有SSD和HHD(操作系统已安装在SSD中),但是我已将文件放在HDD驱动器中,脚本从该驱动器读取数据,而Server仅具有HDD。文件大小约为1 GB,我已经测试了1000条记录的性能。

1)https://www.youtube.com/watch?v=0Q2wv6saL3Q-在我的40核心服务器上测试脚本。

2)https://www.youtube.com/watch?v=hSInldq1uRY-在她的8核计算机上测试相同的脚本

下面的代码在for循环中运行,同时从1GB的文件中读取数据,目标方法使用漂亮的汤从我从文件中获取的doc中提取数据。

t0 = multiprocessing.Process(target=get_domain,args=(record.url,processedData))
t1 = multiprocessing.Process(target=getTLD,processedData))
t2 = multiprocessing.Process(target=geturlscheme,processedData))
t3 = multiprocessing.Process(target=getallemails,args=(soup,processedData))
t4 = multiprocessing.Process(target=getcanonicalURL,processedData))
t5 = multiprocessing.Process(target=getMetaKeyword,processedData))
t0.start()
t1.start()
t2.start()
t3.start()
t4.start()
t5.start()
t0.join()
t1.join()
t2.join()
t3.join()
t4.join()
t5.join()

以下是使用lscpu命令的两个系统的cps的详细信息:

笔记本电脑的详细信息

:~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit,64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
Stepping: 10
CPU MHz: 800.023
CPU max MHz: 4000.0000
CPU min MHz: 800.0000
BogoMIPS: 4608.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7

服务器的详细信息

root@ubuntu18:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit,64-bit
Byte Order: Little Endian
CPU(s): 40
On-line CPU(s) list: 0-39
Thread(s) per core: 2
Core(s) per socket: 10
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 62
Model name: Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
Stepping: 4
CPU MHz: 1200.470
CPU max MHz: 3300.0000
CPU min MHz: 1200.0000
BogoMIPS: 5000.02
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0-9,20-29
NUMA node1 CPU(s): 10-19,30-39

请让我知道可能是什么原因,我错过了什么吗?

谢谢



Xeon E5-xxxx v2是IvyBridge。那已经很老了如果您的工作量主要是单线程性能的瓶颈,那么您的结果看起来非常合理。现代的四核具有更好的每线程内存带宽(但具有多个线程的最大聚合更低),以及更低的内存延迟。 (内核与内存控制器之间的较小的环形总线)。

笔记本电脑的最大涡轮速度也更高(4GHz与3.3GHz)。

Haswell和更新的分支预测器在运行解释器(例如CPython)方面要好得多;可能想分析分支的错误预测,以了解其中是否有很大差异。

您似乎拥有固定数量的线程。它不仅具有笔记本电脑上的物理核心,而且可以通过超线程很好地扩展(或者几个线程相对较快地完成,因此总运行时间通常是最慢的线程单独运行的时间)。看来这不会成为共享内存带宽的瓶颈。

然后,您最担心的是单线程性能,而笔记本电脑的单线程速度更快。


重新:1GB文件:希望它在操作系统的磁盘缓存中保持高温。 (在Unix / Linux下也称为“ pagecache”)。因此,实际的磁盘IO不会发生,仅读取RAM。

,

我发现了两个严重降低服务器速度的问题。


  1. 固态硬盘。或者缺少SSD,真的。 Python 可能经常访问其链接或参考文件。


  2. 笔记本电脑的硬盘驱动器比它看起来的要快:它有一个旧硬盘所没有的强大的主动缓存管理。如果它寻找 x 数据,它仍然是一个缓慢的驱动器,但如果读取或写入大块文件,它会很快,因为它不必寻找 python 链接和引用文件,缓存不受影响。


一种廉价的解决方法是在服务器上安装廉价的 ssd 升级,并在其上安装操作系统、编译器和交换文件。 2021 年运行编译器的硬盘延迟不会很大。


推荐阅读
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 本文介绍了如何在C#应用程序中有效隐藏SQLCMD命令行窗口,确保程序运行时不会弹出黑色命令提示符窗口。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • RedHat 系统下配置国内 YUM 源以替代官方收费源的方法
    本文详细介绍如何在 RedHat Linux 中安装并配置 YUM 包管理器,并通过使用国内镜像源来解决因未购买官方服务而导致的更新源限制问题。 ... [详细]
  • Ihaveai5-4250UwhichhasAVX2andFMA3.IamtestingsomedensematrixmultiplicationcodeinGCC ... [详细]
author-avatar
妩媚的麻醉效应
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有