Я столкнулся со странным результатом при выполнении задачи предварительной обработки данных. Ниже я подвожу итог моей проблемы.
story
Я выполнил задачу предварительной обработки данных, чтобы прочитать данные из многих файлов размером 80 МБ.
Я видел разницу в производительности между сервером и моим локальным компьютером. (Мой локальный компьютер намного лучше, чем сервер)
Я думал, что причина в производительности диска, потому что у моего локального компьютера есть SSD, но на сервере есть жесткие диски. (На самом деле, для одной задачи процесса, локальный компьютер лучше, чем сервер)
после установки дополнительного SSD на сервер, я вижу еще одну проблему ..
1. описание
задача: извлечение данных из файла. преобразовать его в python структуру данных и точно указать числовые значения. Итак, 2D массив загружается в память.
относительно размера файла, размер извлеченных данных чрезвычайно мал (менее 20 целых чисел)
задача выполняется параллельно с помощью многопроцессорной обработки. 70% лимита дискового ввода-вывода (в размере файла) эффективно обрабатывается во время выполнения задачи. кроме этого, другие процессы ждут файлы ввода-вывода.
: множество двоичных файлов размером 80 МБ (формат файла grib - файл прогноза погоды) * среда 1025 *
: используйте сервер Dell R640 (есть Dell PER C Мини-RAID-контроллер H730P)
жесткий диск: 2 из жесткого диска Seagate ST900MP0026 900 ГБ SAS, монтирование жесткого диска в / home / user / A в RAID 1
sdd: 1 из DELL EM C MZ-ILT800A SAS SSD 800 ГБ, монтирование ssd в / home / B в RAID 0
2. Что я делал
2-1 запускал один и тот же скрипт дважды с разницей только в пути к файлу (наверняка, те же файлы в этих каталогах) в первый раз в / home / user / A (HDD) и во второй раз to / home / B (точка монтирования SSD)
2-2 получает почти одинаковое время для результата (очищает кэш каждый раз перед запуском)
3. Мой вопрос
Я думал, что проблема с производительностью связана с типом диска, потому что я считаю, что моей задачей является просто последовательность открытия и закрытия файлов.
Но почему-то SSD и HDD внутри сервера имеют одинаковую производительность во время задачи ввода-вывода (моя гипотеза). Итак, мой первый вопрос:
3.1. На мою задачу существенное влияние оказывает дисковый ввод-вывод?
, и второй вопрос из-за того, что я увидел разницу в производительности процессора на локальном компьютере и на сервере. компьютер, выполняющий задание,
3.2 Может ли процессор (а не диск) в основном влиять на этот тип работы?
4. соответствующий код
# file open
pygrib_file = pygrib.open(os.path.join(CONSTANT.files_path,
file.name))
# preprocessing for dataframe
nwp_var_index_dic = base_setting(self.grid_analyzer)
crtn_tm = file.crtn_tm + datetime.timedelta(hours=9)
fcst_tm = file.fcst_tm + datetime.timedelta(hours=9)
row_num = len(file.location_points)
# fill basic info of dataframe
df = pd.DataFrame()
crtn_column = [crtn_tm for i in range(row_num)]
df["CRTN_TM"] = crtn_column
df["horizon"] = file.horizon
df["FCST_TM"] = fcst_tm
df["lat"] = [point[0] for point in file.location_points]
df["lon"] = [point[1] for point in file.location_points]
df["location_num"] = [i for i in range(len(file.location_points))]
# make columns
if file.variables == "all":
file.variables = pd.read_excel(file.info_file_name).set_index(
"index")["var_abbrev"].to_list()
# for every weather variable, extract numerical value from a file.
for i, var_name in enumerate(file.variables):
var_index_inside_pygrib_file = nwp_var_index_dic[var_name].\
item()
value_array = pygrib_file[var_index_inside_pygrib_file].values
value_list = []
for point in file.location_points:
if nearest_type != 1:
nearest_point_dis_index_dic, _ = \
self.grid_analyzer.nearest_n_grid_point(
point[0], point[1], nearest_type)
value = self.grid_analyzer.\
nearest_n_point_weighted_value(
value_array, nearest_point_dis_index_dic)
value_list.append(value)
else:
nearest_point_index = self.grid_analyzer.\
nearest_point_index(point[0], point[1])
value = value_array[nearest_point_index[0]][
nearest_point_index[1]]
value_list.append(value)
df[var_name] = value_list
pygrib_file.close()
Я не могу описать мою проблему. Если так, пожалуйста, посоветуйте мне. Спасибо за чтение!
Обновление
vmstat во время задания
vmstat без задания