On 8/2/22 15:23, Ilya Maximets wrote:
> Transaction history is used only to construct row data updates for
> clients, it's not used for checking data integrity, hence it doesn't
> need a copy of weak references.
> 
> Not copying this data saves a lot of CPU cycles and memory in some
> cases.  For example, in 250-node density-heavy scenario in ovn-heater
> these references can take up to 70% of RSS, which is about 8 GB of
> essentially wasted memory as reported by valgrind massif:
> 
>  
> -------------------------------------------------------------------------------
>    n        time(i)         total(B)    useful-heap(B) extra-heap(B)   
> stacks(B)
>  
> -------------------------------------------------------------------------------
>   20 1,011,495,832,314  11,610,557,104  10,217,785,620 1,392,771,484        0
> 
>  88.00% (10,217,785,620B) (heap allocation functions) malloc/new/new[]
>  ->70.47% (8,181,819,064B) 0x455372: xcalloc__ (util.c:121)
>    ->70.07% (8,135,785,424B) 0x41609D: ovsdb_weak_ref_clone (row.c:66)
>      ->70.07% (8,135,785,424B) 0x41609D: ovsdb_row_clone (row.c:151)
>        ->34.74% (4,034,041,440B) 0x41B7C9: ovsdb_txn_clone 
> (transaction.c:1124)
>        | ->34.74% (4,034,041,440B) 0x41B7C9: ovsdb_txn_add_to_history 
> (transaction.c:1163)
>        |   ->34.74% (4,034,041,440B) 0x41B7C9: ovsdb_txn_replay_commit 
> (transaction.c:1198)
>        |     ->34.74% (4,034,041,440B) 0x408C35: parse_txn 
> (ovsdb-server.c:633)
>        |       ->34.74% (4,034,041,440B) 0x408C35: read_db 
> (ovsdb-server.c:663)
>        |         ->34.74% (4,034,041,440B) 0x406C9D: main_loop 
> (ovsdb-server.c:238)
>        |           ->34.74% (4,034,041,440B) 0x406C9D: main 
> (ovsdb-server.c:500)
>        |
>        ->34.74% (4,034,041,440B) 0x41B7DE: ovsdb_txn_clone 
> (transaction.c:1125)
>          ->34.74% (4,034,041,440B) 0x41B7DE: ovsdb_txn_add_to_history 
> (transaction.c:1163)
>            ->34.74% (4,034,041,440B) 0x41B7DE: ovsdb_txn_replay_commit 
> (transaction.c:1198)
>              ->34.74% (4,034,041,440B) 0x408C35: parse_txn 
> (ovsdb-server.c:633)
>                ->34.74% (4,034,041,440B) 0x408C35: read_db 
> (ovsdb-server.c:663)
>                  ->34.74% (4,034,041,440B) 0x406C9D: main_loop 
> (ovsdb-server.c:238)
>                    ->34.74% (4,034,041,440B) 0x406C9D: main 
> (ovsdb-server.c:500)
> 
> Replacing ovsdb_row_clone() with ovsdb_row_datum_clone() to avoid
> cloning unnecessary metadata.  The ovsdb_txn_clone() function re-named
> to avoid issues if it will be re-used in the future for some other
> use-case.
> 
> Signed-off-by: Ilya Maximets <[email protected]>
> ---


This is great, looks good to me, thanks!

Acked-by: Dumitru Ceara <[email protected]>

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to