На моем ноутбуке i5 скрипт python работает быстрее, чем процессор Ubuntu 18.04 с ядром Xeon 40, почему? - PullRequest
0 голосов
/ 11 декабря 2019

Я создал скрипт Python, который считывает данные из файла и извлекает из него необходимые данные, проблема в том, что скрипт занимает 37 секунд на моем процессоре i5 (Intel® Core (TM) i5-8300H @ 2.30)GHz), но это занимает 70 секунд на сервере с процессором (Intel® Xeon® CPU E5-2670 v2 @ 2,50 ГГц).

ЦП сервера имеет 40 ядер, поэтому он должен был выполнять задачу быстрее, чеммой ноутбук. Обе системы работают под управлением ОС Ubuntu 18.04.

Скрипт использует многопроцессорность, а сервер - моя другая система, он не находится под повышенной нагрузкой. На моем ноутбуке есть и SSD, и HHD (ОС установлена ​​на SSD), но я поместил файл на жесткий диск, с которого скрипт считывает данные, а на сервере есть только жесткий диск. Размер файла составляет около 1 ГБ, и я проверил производительность с 1000 записями.

1) https://www.youtube.com/watch?v=0Q2wv6saL3Q - тестирование сценария на моем 40-ядерном сервере.

2) https://www.youtube.com/watch?v=hSInldq1uRY - тестирование того же скрипта на ее 8-ядерном компьютере

Следующий код выполняется в цикле for при чтении данных из файла 1 ГБ, а целевые методы используют красивый суп для извлечения данных из документа, которым я являюсьПолучение из файла.

t0 = multiprocessing.Process(target=get_domain, args=(record.url, processedData))
t1 = multiprocessing.Process(target=getTLD, args=(record.url, processedData))
t2 = multiprocessing.Process(target=geturlscheme, args=(record.url, processedData))
t3 = multiprocessing.Process(target=getAllemails, args=(soup, processedData))
t4 = multiprocessing.Process(target=getCanonicalURL, args=(soup, processedData))
t5 = multiprocessing.Process(target=getMetaKeyword, args=(soup, 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()

Ниже приведены подробности о cps обеих систем с помощью команды lscpu:

Информация о ноутбуке

:~$ 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

Пожалуйста, дайте мне знать, в чем может быть причина, я что-то упустил?

Спасибо

...