热门标签 | 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 年运行编译器的硬盘延迟不会很大。


推荐阅读
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
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社区 版权所有