avva: (Default)
[personal profile] avva
(эта запись может быть интересна программистам)

Представьте себе, что вы работаете бюрократом в большой организации. Каждый день вы сидите за столом в большом кабинете (где кроме вас сидят еще несколько человек, каждый за своим столом) и разбираете какие-то папки с документами, то читаете бумаги, то исправляете что-то, то печатаете новый бланк и добавляете в папку. Этих папок огромное количество и вам все время нужно находить правильные. Самые нужные вы положили к себе на стол, другие стоят в многочисленных канцелярских шкафах по периметру кабинета. Некоторых папок нет даже в шкафах, и за ними надо посылать в архив.

Если вы уже читаете какую-то папку, то прочитать следующее слово у вас занимает меньше секунды. Если не читаете, но она лежит у вас на столе - то найти ее и прочитать нужную строку занимает секунд 10. Если на столе нет, но есть в шкафах в комнате, то найти ее по учетному номеру, принести к столу, прочитать что надо - это уже где-то минута. Но иногда ее нет в шкафах, и нужно посылать запрос в архив - или ненужную больше папку отправить в архив, чтобы освободить место в комнате. И это очень долгое и муторное дело.

Архив по размерам - как целый город, а устроен он совершенно нелепо. В нем работает всего один старый больной хромой подслеповатый библиотекарь. По сложным историческим причинам добавить к нему коллег или заменить его невозможно. Когда он получает запрос на выдачу или папку на хранение, он долгие дни и недели идет черепашьим шагом по всему гигантскому архиву, пока ему не попадется нужная полка. В итоге получить папку из архива занимает примерно 4 месяца (!) - а вы тем временем делайте что хотите. Неудивительно, что вы и все ваши коллеги стремитесь как можно больше папок иметь при себе на столе или даже в комнате.

В последние годы, чтобы как-то улучшить скорость работы бюрократов, придумали несколько нововведений.

Во-первых, наряду с старым огромным архивом сделали новый, современный. Он не такой огромный, размером скорее с квартал, а не с город, и в нем работает целый отряд библиотекарей. Но он все равно далеко, сообщение с ним медленное, поиск в нем тоже не такой быстрый, как хотелось... короче, получить папку можно уже не за 4 месяца, а за день-полтора. И на том спасибо.

Во-вторых, в каждой комнате установили внутренний телефон, и теперь, если у вас в комнате папки нет, а у коллеги на другом этаже или в соседнем здании есть, то можно позвонить ему и попросить переслать копию папки по факсу. Это занимает где-то час, причем часть этого времени вы ждете, пока коллега закончит свои срочные дела и лишь потом найдет для вас папку. Это не очень удобно - факс-машина работает очень медленно, и коллега одновременно продолжает свою работу и все время отвлекается на то, чтобы новую страницу в нее зарядить. Вы сами очень не любите, когда вас такими запросами отвлекают. Но все же это куда лучше, чем день-полтора или 4 месяца.

И наконец, недавно даже и это улучшили. Начальство догадалось посадить в каждую комнату стажеров, которые с бумагами не умеют еще пока работать, но могут найти в шкафу, что нужно. Теперь, когда вам нужна бумага из чужого кабинета, вы говорите своему стажеру, он звонит туда и говорит с тамошним стажером, и они организовывают пересылку всего содержимого папки по факсу. Вашим коллегам даже отвлекаться не надо. Папка у вас на столе через 30-40 минут. Еще быстрее работа пошла.

----------------------------------

Этот рассказ написан для того, чтобы показать на наглядном примере, как устроена работа с данными в современных компьютерах.

Вы, бюрократ, работающий с бумагами - на самом деле центральный процессор компьютера, или, если точнее, одно ядро процессора. Все временные задержки увеличены ровно в миллиард раз - вместо "секунда" следует понимать "наносекунда" и так далее.

Чтение папки, которая у вас в руках - это работа с данными, которые уже лежат в регистрах процессора. Найти папку на столе - это прочитать данные из процессорного кэша (неважно какого, L1/L2/L3 - 10 секунд это усредненные данные). Канцелярские шкафы в вашей комнате, найти папку в которых занимает минута - это рабочая память, RAM.

Архив с полуслепым инвалидом, который 4 месяца ищет вашу папку - это жесткий диск. Новый современный архив, из которого папка приходит за день-полтора - диски SSD.

Телефонная связь вместе с факсом - это быстрая локальная сеть. Переслать папку по факсу - прочитать данные из памяти другого компьютера, который расположен на одной локальной сети с вами. Наконец, стажеры - это технология RDMA, позволяющая читать через сеть память другого компьютера напрямую, не отвлекая тамошний процессор.

----------------------------------

Основные идеи, которые должен продемонстрировать этот рассказ - это насколько быстрее иметь нужные данные в рабочей памяти, чем читать их с диска; а если все же их нет в памяти, то насколько быстрее читать их SSD, чем с HD, и насколько через локальную сеть, чем с любого диска, даже SSD.

Идея не моя - я позаимствовал ее и немного развил из записи в блоге Адриана Кольера. Кстати, один из лучших блогов на свете для интересующихся компьютерными науками.
Page 1 of 3 << [1] [2] [3] >>

Date: 2017-05-07 04:30 pm (UTC)
From: [identity profile] nomen-nescio.livejournal.com
Здорово!
Следует ли из этого для меня, чайника-пользователя Майкрософт Оффис и Хром, что в моём бюджетном ноутбуке чем больше оперативной памяти, тем лучше?

Date: 2017-05-07 04:35 pm (UTC)
From: [identity profile] karpion.livejournal.com
Ну, начиная с какого-то момента увеличение памяти перестанет давать эффект. А вообще - да, чем больше памяти, тем быстрее работает компьютер.

Date: 2017-05-07 04:36 pm (UTC)
From: [identity profile] karpion.livejournal.com
Аналогия не очень хорошая, т.к. тут явно просвечивает многопроцессорная система. А там, кроме кэша, есть ещё масса тонкостей, от которых зависит скорость работы.

Date: 2017-05-07 04:40 pm (UTC)
From: [identity profile] tn.livejournal.com
Эти идеи стары почти так же, как и все компьютерные науки. Еще сорок лет назад я перелопачивал в Ленинке горы статей, посвященных алгоритмам обмена между внешней и оперативной памятью. Были разработаны сотни алгоритмов, пытающихся эффективно замещать блоки данных, уже вызванных в ОП новыми, попытки определить по предыстории, какие данные следует придержать в ОП, чтобы потом не подкачивать их снова (всяческие FIFO, LIFO и прочие алгоритмы с бесчисленными с вариациями ) . И эта метафора с бюрократом уже была. Я всегда ее применял для объяснения дилетантам. Только я говорил "Представьте, что вы пишете статью в библиотеке, на вашем столе помещается ограниченное число книг, время от времени вы заказываете из архива новую, и вам надо расстаться с какой-то, что лежит на столе" и.т.п, и.тд Короче, это все, как и все остальное на этом свете - уже было.

Date: 2017-05-07 04:40 pm (UTC)
From: [identity profile] nomen-nescio.livejournal.com
А с какого?
From: [identity profile] yoksel-moksel.livejournal.com
А раньше вы сами работали в разы медленнее, и новый архив ещё не построили, и папок под рукой было меньше, а как не хватало вместительных шкафов в комнате! И ведь как-то справлялись! Почему же сейчас клиенты жалуются на задержки? Что произошло? Может быть вас завалили бюрократическими инструкциями?

Date: 2017-05-07 04:53 pm (UTC)
From: [identity profile] yoksel-moksel.livejournal.com
С того момента, когда перестаёт активно использоваться файл подкачки (место в большом старом архиве, куда вы вынуждены пересылать нужные вам папки из-за нехватки шкафов для их хранения у вас в кабинете)
Edited Date: 2017-05-07 04:54 pm (UTC)

Date: 2017-05-07 04:54 pm (UTC)
From: [identity profile] freedom_of_sea.livejournal.com
никогда не задумывался что сеть быстрее чем seek time

Date: 2017-05-07 05:02 pm (UTC)
From: [identity profile] shlem59.livejournal.com
А вы уверены, что чтение по локальной сети даже из RAM соседнего компьютера быстрее чем чтение из собственной SSD?
И если да -то насколько быстрее?

Date: 2017-05-07 05:03 pm (UTC)
From: [identity profile] thedimka.livejournal.com
хочется сказать что это не новая метафора, но это уже сказали.
этим видимо она и хорошая, раз многим людям пришла независимо.

Date: 2017-05-07 05:10 pm (UTC)
From: [identity profile] karpion.livejournal.com
Если память позволяет вместить в себя код всех программ, которые Вы запускаете одновременно, и все данные этих программ во время их работы - то дальше наращивать память нет смысла.

Дать точную формулу я не готов - там много разных факторов.

Date: 2017-05-07 05:16 pm (UTC)
From: [identity profile] karpion.livejournal.com
Подсказка: среднее время дисковой операции с HDD (при одном диске, без RAID) - это половина оборота диска плюс ещё что-то, причём первое слагаемое тут самое большое. Средняя скорость вращения дисков - от 5'400 до 10'000 оборотов в минуту (в секунду - считайте сами).

А вот у SSD этой задержки нет, там ничего не крутится, так что надо смотреть по скорости передачи данных.
У SSD другая особенность: у него запись существенно медленнее чтения. И если записывать надо много, то SSD Не успевает обнулять секторы, что ещё сильнее снижает скорость.

Date: 2017-05-07 05:18 pm (UTC)
From: [identity profile] karpion.livejournal.com
Вы забыли, кто файл с запущенной программой как бы присоединяется к файлу подкачки. Т.е. возможна ситуация, когда свопинг/пейджинг очень активный, но файл подкачки не используется - это когда код большой, а данных мало.

А ещё бывает интенсивная работа с данными, когда программа читает файлы.

Date: 2017-05-07 06:17 pm (UTC)
From: (Anonymous)
Осталось понять, каким боком объяснение разницы между HDD и SSD отвечает на вопрос про разницу между SSD и RDMA.

Date: 2017-05-07 06:22 pm (UTC)
From: [identity profile] dmarck.livejournal.com
NVMe эту несправедливость призваны заткнуть -- но пока очень дорого, и не без граблей.

Date: 2017-05-07 06:28 pm (UTC)
From: (Anonymous)
Ну так про HDD никто и не спорит. Написано-то было, что от SSD гораздо дольше ждать, чем по сети!

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

Date: 2017-05-07 06:48 pm (UTC)
From: [identity profile] moon-aka-sun.livejournal.com
Да, было уже такое, не на примере бюрократов, но время компьютерных устройств, масштабированное к человеческим меркам, начиная с секунды, внушает.

Зато я сегодня узнал что процессор не только делает xor eax,eax быстрее, чем mov eax,0, потому что команда короче и как бы только регистры, но и оказывается, он вообще распознаёт, что это просто надо в eax поместить ноль, и более того, он даже этого не делает, а просто переименует регистр! Внутри процессора, Карл! Один и тот же eax в разных командах обозначает разные регистры и всё это работает параллельно. Вот молодцы!
Edited Date: 2017-05-07 06:51 pm (UTC)

Date: 2017-05-07 07:40 pm (UTC)
From: [identity profile] karpion.livejournal.com
Я объясняю, откуда берётся мнение, будто сеть (RDMA) м.б. быстрее, чем диск - оно от того, что когда-то SSD не было, и все рассуждения строились для HDD.

Date: 2017-05-07 07:47 pm (UTC)
From: [identity profile] dmarck.livejournal.com
Вообще говоря, правильно организованная 10Gbps (и быстрее) сеть вполне даёт sub-millisecond latencies на сотнях (а при удаче и тысячах) одновременных запросов.

Но, да, тема серая.

Date: 2017-05-07 07:48 pm (UTC)
From: [identity profile] dmarck.livejournal.com
... и сеть была медленная, не быстрее гигабита ;-P

Date: 2017-05-07 07:54 pm (UTC)
From: (Anonymous)
Ну быстрый гуглинг показал, что например Infiniband имеет latency порядка единиц микросекунд, а ssd - десятки-сотни на физическом уровне, так что на уровне очень грубой оценки rdma будет быстрее ssd в те самые 10-100 раз.

Date: 2017-05-07 07:58 pm (UTC)
From: (Anonymous)
А это точно должно быть интересно именно программистам? Просто стиль изложения скорее намекает на информацию для широкой публики. Вроде бы все примазанные к IT и так представляют масштаб проблемы, а уж иерархию скоростей доступа, кажется, суют в любой мало-мальски значимый курс по архитектуре чего угодно

Date: 2017-05-07 08:09 pm (UTC)
From: [identity profile] dmarck.livejournal.com
более того, современный эзернет-свитчинг укладывается в задержки менее микросекунды (!) -- наример: https://www.arista.com/en/products/7280e-series

NVMe говорит о 3 микросекундах, вроде бы, но там с параллельностью лучше.

Date: 2017-05-07 08:18 pm (UTC)
From: [identity profile] occuserpens.livejournal.com
[прочитать данные из памяти другого компьютера, который расположен на одной локальной сети с вами]

Причем тут телефон, факс и слепой инвалид?! В виндах есть шерные драйвы, а это что такое с точки зрения программиста? Особенно если не между ВМ на одном физическом компе, а в настоящей сети.
Edited Date: 2017-05-07 08:20 pm (UTC)

Date: 2017-05-07 09:24 pm (UTC)
From: [identity profile] avva.livejournal.com
SSD в среднем где-то 150 микросекунд, чтение через хорошо организованную локальную сеть в современном датацентре может быть 1-3 микросекунд.

NVME обещает сильно убыстрить SSD, но я в этом не очень разбираюсь (в статье по ссылке из поста есть кое-какие цифры полуторагодичной давности).
Page 1 of 3 << [1] [2] [3] >>

January 2026

S M T W T F S
    1 2 3
4 5 6 7 8 910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 10th, 2026 03:21 am
Powered by Dreamwidth Studios