нет разницы между SSD и HDD в задаче ввода-вывода файла - PullRequest
0 голосов
/ 27 февраля 2020

Я столкнулся со странным результатом при выполнении задачи предварительной обработки данных. Ниже я подвожу итог моей проблемы.

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 без задания

...