нет разницы между 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()

Я не могу хорошо описать свою проблему. Если да, пожалуйста, посоветуйте мне. Спасибо за прочтение!

Обновить

vmstat во время задачи

vmstat без задачи

0 ответов

Другие вопросы по тегам