нет разницы между SSD и HDD в задаче файлового ввода-вывода
Я столкнулся со странным результатом во время предварительной обработки данных. Я резюмирую ниже свою проблему.
история
Я выполнил задачу предварительной обработки данных, прочитав данные из многих файлов размером 80 МБ.
Я заметил разницу в производительности между сервером и моим локальным компьютером. (Мой локальный компьютер намного лучше сервера)
Я думал, что причина в производительности диска, потому что на моем локальном компьютере есть SSD, а на сервере есть жесткие диски (на самом деле, также для задачи с одним процессом, локальный компьютер лучше, чем сервер)
после того, как я поставил на сервер дополнительный SSD, я вижу другую проблему..
1. описание
задача: извлечение данных внутри файла. преобразовать его в структуру данных Python и определить числовые значения. Итак, 2D-массив загружен в память.
относительно размера файла размер извлеченных данных чрезвычайно мал (менее 20 целых чисел)
задача выполняется параллельно за счет многопроцессорности. 70% предела дискового ввода-вывода (в размере файла) эффективно обрабатывается во время задачи. кроме этого, другие процессы ждут ввода-вывода.
файлы: множество двоичных файлов размером 80 МБ (формат файла grib - файл прогноза погоды)
среда: используйте сервер Dell R640 (есть контроллер Dell PERC H730P Mini RAID)
жесткий диск: 2 жестких диска Seagate ST900MP0026 900 ГБ SAS, смонтировать жесткий диск на /home/user/A в RAID 1
sdd: 1 из DELL EMC MZ-ILT800A 800GB SAS SSD, смонтировать ssd на /home/B в RAID 0
2. Что я сделал
2-1 запустить один и тот же сценарий дважды с разницей только в пути к файлу (наверняка, те же файлы внутри этих каталогов) первый раз в /home/user/A (HDD) и второй раз в /home/B (точка монтирования SSD)
2-2 получили почти одинаковое время результата (очищал кеш каждый раз перед запуском)
3. Мой вопрос
Я думал, что проблема производительности связана с типом диска, потому что моя задача - это просто последовательность открытия и закрытия файлов.
Но почему-то SSD и HDD внутри сервера имеют одинаковую производительность во время задачи ввода-вывода (моя догадка). Итак, мой первый вопрос:
3.1 На мою задачу существенно влияет Disk IO?
и второй вопрос из-за того, что я увидел разницу в производительности процессора на локальном и серверном компьютерах, которая вступает в производительность при выполнении задачи,
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()
Я не могу хорошо описать свою проблему. Если да, пожалуйста, посоветуйте мне. Спасибо за прочтение!
Обновить