Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


projects:libcds:dhp_refactor

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
projects:libcds:dhp_refactor [2015/12/10 13:36] – created khizmaxprojects:libcds:dhp_refactor [2015/12/10 13:41] khizmax
Line 1: Line 1:
 +====== Рефакторинг SMR-алгоритма cds::gc::DHP ======
 +
 DHP – это вариант алгоритма Hazard Pointer с неограниченным числом hazard pointer'ов для потока.  DHP – это вариант алгоритма Hazard Pointer с неограниченным числом hazard pointer'ов для потока. 
 Текущая реализация (libcds 2.1.0) предполагает, что массив retired data (данных, готовых для удаления) один для всех потоков,  Текущая реализация (libcds 2.1.0) предполагает, что массив retired data (данных, готовых для удаления) один для всех потоков, 
Line 15: Line 17:
 Предлагается модифицировать DHP, объявив массив retired ptr приватным (thread local data) для каждого потока, работающего с DHP-based структурами данных.  Предлагается модифицировать DHP, объявив массив retired ptr приватным (thread local data) для каждого потока, работающего с DHP-based структурами данных. 
 При этом надо учитывать: При этом надо учитывать:
-  * размер массива retired data должен изменяться динамически (он зависит от числа hazard ptr на момент вызова ''scan()'';  +  * размер массива retired data должен изменяться динамически (он зависит от числа hazard ptr на момент вызова ''scan()''; критерий увеличения размера: ''scan()'' не смогла удалить ни одного указателя из retired data). 
-критерий увеличения размера: ''scan()'' не смогла удалить ни одного указателя из retired data). +  * нагрузка на структуру данных может быть неравномерна: одни потоки — deleter thread – только удаляют данные из DHP-based структуры данных, то есть активно работают с retired ptr array, другие потоки — updater thread – в основном добавляют/ ищут в структуре. Поэтому retired ptr array каждого потока должен иметь некий ''timestamp'' последнего применения ''scan()'' и последующий вызов ''scan()'' должен происходить не только по заполнении retired ptr array, но и по превышению этого ''timestamp'' на некоторую дельту.
-  * нагрузка на структуру данных может быть неравномерна: одни потоки — deleter thread – только удаляют данные из DHP-based структуры данных,  +
-то есть активно работают с retired ptr array, другие потоки — updater thread – в основном добавляют/ ищут в структуре.  +
-Поэтому retired ptr array каждого потока должен иметь некий ''timestamp'' последнего применения ''scan()'' и последующий вызов ''scan()'' должен  +
-происходить не только по заполнении retired ptr array, но и по превышению этого ''timestamp'' на некоторую дельту.+
  
 Попутно следует упростить реализацию DHP, сократив иерархию структур.  Попутно следует упростить реализацию DHP, сократив иерархию структур. 
  
-**Требование**: API DHP-алгоритма измениться не должно.+**Требование**: API (public interface and nested classes) DHP-алгоритма измениться не должно.
projects/libcds/dhp_refactor.txt · Last modified: 2015/12/17 12:59 by khizmax