Hi John,

Entry level locks still exist. I've described locks coming from page
memory, page memory and its locks is lower-level abstraction than entries
level.

Segment is part of region consist from number of pages.

1 region - * segments, 1 segment - * pages.

Segment lock is performed when set of pages in this segment is changed
(page rotated with disk - this process named page replacement, or new
additional page is created - allocatePage).

Segments intended to decrease contention to page sets, by default number of
segments is coming from CPU count.

Some info can be found here
https://cwiki.apache.org/confluence/display/IGNITE/Ignite+Durable+Memory+-+under+the+hood#IgniteDurableMemory-underthehood-Regionandsegmentstructure

Unfortunately there is no picture there about segments, but I hope some day
it will be created.

Sincerely,
Dmitriy Pavlov

вт, 13 февр. 2018 г. в 16:51, John Wilson <sami.hailu...@gmail.com>:

> Hi Pavlov,
>
> Thanks for your explanation. However, I still have these questions:
>
>
>    1. If locking is per page-level and there are no entry-level locks,
>    then why does the documentation here talk about having entry-level
>    transaction locks? https://apacheignite.readme.io/docs/transactions
>    2. I'm not clear with what "locking a durable memory region segment "
>    means, what is a segment? Does a page contain multiple segments or a
>    segment contains multiple pages? The mental picture I have is: a memory
>    region is divided into pages (which can be meta data pages, index, or data
>    pages). Index pages hold links to data page id and offset for key-value
>    pairs while data pages contain the actual key-value pairs. So, what really
>    is a segment and what does locking a memory segment means? I understanding
>    page-locks, what is segment lock?
>
> Appreciate your response!!!
>
> On Tue, Feb 13, 2018 at 2:32 AM, Dmitry Pavlov <dpavlov....@gmail.com>
> wrote:
>
>> Hi John,
>>
>> 1. No, content modification require lock holding to page to provide
>> consitency in multithreaded environment.
>> 2. Page is locked for read before reading its content, and unlocked after.
>> Same for lock for write for writting. 1 writer or N readers allowed for
>> page. On unlock write lock, dirty flag for page may be set if there data
>> was actually modified.
>> 3. Lock has per-page basis, additional striping by any offest within page
>> is not required accoring to tests.
>>
>> Only one contention is observed sometimes in high load test, it is
>> contention of threads to lock to durable memory region segment. But this
>> situation can be handled by setting concurrenclyLevel in
>> DataStorageConfiguration.
>>
>> Sincerely,
>> Dmitriy Pavlov
>>
>>
>> вт, 13 февр. 2018 г. в 9:56, John Wilson <sami.hailu...@gmail.com>:
>>
>> > Hi,
>> >
>> > Ignite documentation talks about entry-level locks and the page
>> structure
>> > has a LOCK_OFFSET that I assume is used to store tag info. I have these
>> > questions.
>> >
>> >    1. Does Ignite use a lock-free implementation to lock pages and/or
>> >    entries?
>> >    2. When is a page locked and when is it released?
>> >    3. When an entry is inserted/modified in a page, is the page locked
>> >    (forbidding other threads from inserting entries in the page)? or
>> only
>> > the
>> >    entry's offset is locked? (allowing other threads to insert/modify
>> other
>> >    items)
>> >
>> > Thanks!
>> >
>>
>
>

Reply via email to