Найти в Дзене

Почему мощный сервер работал медленнее старого ноутбука: поучительная история об одной строчке кода 💻🐢

Представьте: вы купили огромный, дорогой грузовик (мощный сервер с 24 ядрами), ожидая, что он перевезет гору груза в разы быстрее, чем ваш старый легковой автомобиль (ноутбук). Но на деле оказывается, что грузовик еле ползет и справляется с задачей хуже легковушки.
​Именно с такой загадкой столкнулся программист, создававший инструмент для тестирования баз данных.
​В чем была загадка?
​На обычном

Представьте: вы купили огромный, дорогой грузовик (мощный сервер с 24 ядрами), ожидая, что он перевезет гору груза в разы быстрее, чем ваш старый легковой автомобиль (ноутбук). Но на деле оказывается, что грузовик еле ползет и справляется с задачей хуже легковушки.

​Именно с такой загадкой столкнулся программист, создававший инструмент для тестирования баз данных.

​В чем была загадка?

​На обычном домашнем ноутбуке программа работала идеально. Но как только её запускали на профессиональном сервере, скорость резко падала. Казалось бы, чем больше «голов» (ядер процессора) у компьютера, тем быстрее он должен думать. Но здесь всё было наоборот: ядра мешали друг другу.

​Кто оказался «преступником»?

​Виновником оказалась всего одна строчка кода, связанная с так называемым Arc (умным счетчиком ссылок).

​Представьте, что у вас есть одна книга (данные), которую читают сразу 24 человека. Чтобы книга не пропала, каждый раз, когда кто-то её берет или кладет на место, он должен поставить отметку в специальном журнале.

​Когда читателей мало (как на ноутбуке), проблем нет.

​Но когда 24 человека одновременно пытаются выхватить этот журнал, чтобы поставить свою отметку, возникает давка. Вместо того чтобы читать, люди стоят в очереди к журналу.

​В компьютере это называется «конфликт кэша». Ядра процессора постоянно переспрашивали друг друга: «А ты уже поменял число в журнале? А ты?». На эти пустые разговоры уходило больше времени, чем на саму работу.

​Как починили «грузовик»?

​Решение оказалось простым и изящным. Вместо того чтобы заставлять всех пользоваться одним журналом, программист просто выдал каждому ядру по своей копии книги и своего журнала.

​Расход памяти немного вырос (теперь у нас 24 книги вместо одной), но зато давка исчезла мгновенно!

​Результат: После этого изменения сервер наконец-то заработал на полную мощь, обгоняя ноутбук в разы, как и положено дорогому оборудованию.

​Мораль истории: В мире больших компьютеров иногда «делиться» — это плохо. Чтобы работать быстро, иногда нужно просто дать каждому участнику процесса свой набор инструментов и не заставлять их толкаться в очереди. 😊

​А вы сталкивались с тем, что новая и мощная техника работает хуже старой? Расскажите свои истории в комментариях! 👇