Re: [PATCH v19 00/40] DEPT(DEPendency Tracker)

"David Hildenbrand (Arm)" <[email protected]>
Newsgroups org.kernel.vger.rcu,dev.linux.lists.linux-rt-devel,org.kernel.vger.linux-arch,org.kernel.vger.linux-block,org.kernel.vger.linux-doc,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-i2c,org.kernel.vger.linux-ide,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media,org.kernel.vger.linux-modules,org.kernel.vger.linux-nfs,org.kernel.vger.netdev,org.kernel.vger.rust-for-linux,org.kvack.linux-mm
Message-ID <[email protected]>
Hi!

>>>
>>> That's a good news for lockdep.  (And even for DEPT :)
>>
>> He :) Where do you currently store the additional per-page information?
> 
> lockdep doesn't need to store per-page information.  Possibly DEPT
> doesn't either.

That would be even better.

[...]

> 
> maybe you put the folio which is locked on a queue or an lru or
> whatever.

For readahead, I think that queues / lru are not involved. We submit the I/O,
and once the I/O is done, we unlock the folio from interrupt context.

end_buffer_async_read() / iomap_finish_folio_read() end up calling
folio_end_read(), where we do the magic

	folio_wake_bit(folio, PG_locked);

It's interesting, that for writeback we never unlock the folio on the I/O path,
but instead have the dedicated page flag to tell us when writeback is complete.

> 
> There is no way to say "that queue owns this lock".  Maybe that could
> usefully be added - assuming coherent semantics can be designed.
> 
> Somewhere else some other task takes responsibility for that folio and
> the lock.  maybe it dequeues a page, or maybe an lru callback gives the
> locked page to some code.
> That code then calls
>    lock_map_acquire_try(&the_lock_map)

I'd assume that's what the unlock path would do from interrupt context.

> 
> This says "this task is now holding this lock" (or more accurately "now
> holding a lock of this class").
> Note the "_try" - that says that the task didn't have to wait for the
> lock, it just got it for free, which in fact it did.
> 
> Now if that task takes some other lock, lockdep will see a dependency
> between the page lock and the new lock, and will accept or reject it as
> you would expect.

I guess on the interrupt path, we primarily unlock the folio lock only. But we
might take some other spinlocks temporarily indeed, like
iomap_finish_folio_read() does.


>  But I'd like to see a coherent
> explanation of how the functionality offered by DEPT is clearly better.

Yes, that's also what I am missing.

Stating that lockdep is stable and should not be destabilized is not really a
good argument.

-- 
Cheers,

David
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.