mirror of
https://github.com/php/php-src.git
synced 2026-03-24 08:12:21 +01:00
session: Slightly reorder the members within the module globals
The previous ordering resulted in a needlessly large number of holes and split
several `zval`s across cache line boundaries. Do the bare minimum of reordering
to keep related members grouped, but reducing the struct size by 32 bytes and
keeping `zval`s within a single cache line.
Before:
struct _php_session_rfc1867_progress {
size_t sname_len; /* 0 8 */
zval sid; /* 8 16 */
smart_str key; /* 24 16 */
zend_long update_step; /* 40 8 */
zend_long next_update; /* 48 8 */
double next_update_time; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
_Bool cancel_upload; /* 64 1 */
_Bool apply_trans_sid; /* 65 1 */
/* XXX 6 bytes hole, try to pack */
size_t content_length; /* 72 8 */
zval data; /* 80 16 */
zval * post_bytes_processed; /* 96 8 */
zval files; /* 104 16 */
zval current_file; /* 120 16 */
/* --- cacheline 2 boundary (128 bytes) was 8 bytes ago --- */
zval * current_file_bytes_processed; /* 136 8 */
/* size: 144, cachelines: 3, members: 14 */
/* sum members: 138, holes: 1, sum holes: 6 */
/* last cacheline: 16 bytes */
};
struct _php_ps_globals {
char * save_path; /* 0 8 */
char * session_name; /* 8 8 */
zend_string * id; /* 16 8 */
char * extern_referer_chk; /* 24 8 */
char * cache_limiter; /* 32 8 */
zend_long cookie_lifetime; /* 40 8 */
char * cookie_path; /* 48 8 */
char * cookie_domain; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
_Bool cookie_secure; /* 64 1 */
_Bool cookie_httponly; /* 65 1 */
/* XXX 6 bytes hole, try to pack */
char * cookie_samesite; /* 72 8 */
const ps_module * mod; /* 80 8 */
const ps_module * default_mod; /* 88 8 */
void * mod_data; /* 96 8 */
php_session_status session_status; /* 104 4 */
/* XXX 4 bytes hole, try to pack */
zend_string * session_started_filename; /* 112 8 */
uint32_t session_started_lineno; /* 120 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 2 boundary (128 bytes) --- */
zend_long gc_probability; /* 128 8 */
zend_long gc_divisor; /* 136 8 */
zend_long gc_maxlifetime; /* 144 8 */
int module_number; /* 152 4 */
/* XXX 4 bytes hole, try to pack */
zend_long cache_expire; /* 160 8 */
struct {
zval ps_open; /* 168 16 */
zval ps_close; /* 184 16 */
/* --- cacheline 3 boundary (192 bytes) was 8 bytes ago --- */
zval ps_read; /* 200 16 */
zval ps_write; /* 216 16 */
zval ps_destroy; /* 232 16 */
zval ps_gc; /* 248 16 */
/* --- cacheline 4 boundary (256 bytes) was 8 bytes ago --- */
zval ps_create_sid; /* 264 16 */
zval ps_validate_sid; /* 280 16 */
zval ps_update_timestamp; /* 296 16 */
} mod_user_names; /* 168 144 */
_Bool mod_user_implemented; /* 312 1 */
_Bool mod_user_is_open; /* 313 1 */
/* XXX 6 bytes hole, try to pack */
/* --- cacheline 5 boundary (320 bytes) --- */
zend_string * mod_user_class_name; /* 320 8 */
const struct ps_serializer_struct * serializer; /* 328 8 */
zval http_session_vars; /* 336 16 */
_Bool auto_start; /* 352 1 */
_Bool use_cookies; /* 353 1 */
_Bool use_only_cookies; /* 354 1 */
_Bool use_trans_sid; /* 355 1 */
/* XXX 4 bytes hole, try to pack */
zend_long sid_length; /* 360 8 */
zend_long sid_bits_per_character; /* 368 8 */
_Bool send_cookie; /* 376 1 */
_Bool define_sid; /* 377 1 */
/* XXX 6 bytes hole, try to pack */
/* --- cacheline 6 boundary (384 bytes) --- */
php_session_rfc1867_progress * rfc1867_progress; /* 384 8 */
_Bool rfc1867_enabled; /* 392 1 */
_Bool rfc1867_cleanup; /* 393 1 */
/* XXX 6 bytes hole, try to pack */
char * rfc1867_prefix; /* 400 8 */
char * rfc1867_name; /* 408 8 */
zend_long rfc1867_freq; /* 416 8 */
double rfc1867_min_freq; /* 424 8 */
_Bool use_strict_mode; /* 432 1 */
_Bool lazy_write; /* 433 1 */
_Bool in_save_handler; /* 434 1 */
_Bool set_handler; /* 435 1 */
/* XXX 4 bytes hole, try to pack */
zend_string * session_vars; /* 440 8 */
/* size: 448, cachelines: 7, members: 48 */
/* sum members: 404, holes: 9, sum holes: 44 */
};
After:
struct _php_session_rfc1867_progress {
size_t sname_len; /* 0 8 */
zval sid; /* 8 16 */
smart_str key; /* 24 16 */
zend_long update_step; /* 40 8 */
zend_long next_update; /* 48 8 */
double next_update_time; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
_Bool cancel_upload; /* 64 1 */
_Bool apply_trans_sid; /* 65 1 */
/* XXX 6 bytes hole, try to pack */
size_t content_length; /* 72 8 */
zval data; /* 80 16 */
zval files; /* 96 16 */
zval * post_bytes_processed; /* 112 8 */
zval * current_file_bytes_processed; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
zval current_file; /* 128 16 */
/* size: 144, cachelines: 3, members: 14 */
/* sum members: 138, holes: 1, sum holes: 6 */
/* last cacheline: 16 bytes */
};
struct _php_ps_globals {
char * save_path; /* 0 8 */
char * session_name; /* 8 8 */
zend_string * id; /* 16 8 */
char * extern_referer_chk; /* 24 8 */
char * cache_limiter; /* 32 8 */
zend_long cookie_lifetime; /* 40 8 */
char * cookie_path; /* 48 8 */
char * cookie_domain; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
char * cookie_samesite; /* 64 8 */
_Bool cookie_secure; /* 72 1 */
_Bool cookie_httponly; /* 73 1 */
/* XXX 6 bytes hole, try to pack */
const ps_module * mod; /* 80 8 */
const ps_module * default_mod; /* 88 8 */
void * mod_data; /* 96 8 */
php_session_status session_status; /* 104 4 */
/* XXX 4 bytes hole, try to pack */
zend_string * session_started_filename; /* 112 8 */
uint32_t session_started_lineno; /* 120 4 */
int module_number; /* 124 4 */
/* --- cacheline 2 boundary (128 bytes) --- */
zend_long gc_probability; /* 128 8 */
zend_long gc_divisor; /* 136 8 */
zend_long gc_maxlifetime; /* 144 8 */
zend_long cache_expire; /* 152 8 */
struct {
zval ps_open; /* 160 16 */
zval ps_close; /* 176 16 */
/* --- cacheline 3 boundary (192 bytes) --- */
zval ps_read; /* 192 16 */
zval ps_write; /* 208 16 */
zval ps_destroy; /* 224 16 */
zval ps_gc; /* 240 16 */
/* --- cacheline 4 boundary (256 bytes) --- */
zval ps_create_sid; /* 256 16 */
zval ps_validate_sid; /* 272 16 */
zval ps_update_timestamp; /* 288 16 */
} mod_user_names; /* 160 144 */
zend_string * mod_user_class_name; /* 304 8 */
_Bool mod_user_implemented; /* 312 1 */
_Bool mod_user_is_open; /* 313 1 */
_Bool auto_start; /* 314 1 */
_Bool use_cookies; /* 315 1 */
_Bool use_only_cookies; /* 316 1 */
_Bool use_trans_sid; /* 317 1 */
_Bool send_cookie; /* 318 1 */
_Bool define_sid; /* 319 1 */
/* --- cacheline 5 boundary (320 bytes) --- */
const struct ps_serializer_struct * serializer; /* 320 8 */
zval http_session_vars; /* 328 16 */
zend_long sid_length; /* 344 8 */
zend_long sid_bits_per_character; /* 352 8 */
php_session_rfc1867_progress * rfc1867_progress; /* 360 8 */
char * rfc1867_prefix; /* 368 8 */
char * rfc1867_name; /* 376 8 */
/* --- cacheline 6 boundary (384 bytes) --- */
zend_long rfc1867_freq; /* 384 8 */
double rfc1867_min_freq; /* 392 8 */
_Bool rfc1867_enabled; /* 400 1 */
_Bool rfc1867_cleanup; /* 401 1 */
_Bool use_strict_mode; /* 402 1 */
_Bool lazy_write; /* 403 1 */
_Bool in_save_handler; /* 404 1 */
_Bool set_handler; /* 405 1 */
/* XXX 2 bytes hole, try to pack */
zend_string * session_vars; /* 408 8 */
/* size: 416, cachelines: 7, members: 48 */
/* sum members: 404, holes: 3, sum holes: 12 */
/* last cacheline: 32 bytes */
};
This commit is contained in:
committed by
Gina Peter Banyard
parent
ffc6f192a8
commit
4df911efcb
@@ -132,10 +132,10 @@ typedef struct _php_session_rfc1867_progress {
|
||||
size_t content_length;
|
||||
|
||||
zval data; /* the array exported to session data */
|
||||
zval *post_bytes_processed; /* data["bytes_processed"] */
|
||||
zval files; /* data["files"] array */
|
||||
zval current_file; /* array of currently uploading file */
|
||||
zval *post_bytes_processed; /* data["bytes_processed"] */
|
||||
zval *current_file_bytes_processed;
|
||||
zval current_file; /* array of currently uploading file */
|
||||
} php_session_rfc1867_progress;
|
||||
|
||||
typedef struct _php_ps_globals {
|
||||
@@ -147,19 +147,19 @@ typedef struct _php_ps_globals {
|
||||
zend_long cookie_lifetime;
|
||||
char *cookie_path;
|
||||
char *cookie_domain;
|
||||
char *cookie_samesite;
|
||||
bool cookie_secure;
|
||||
bool cookie_httponly;
|
||||
char *cookie_samesite;
|
||||
const ps_module *mod;
|
||||
const ps_module *default_mod;
|
||||
void *mod_data;
|
||||
php_session_status session_status;
|
||||
zend_string *session_started_filename;
|
||||
uint32_t session_started_lineno;
|
||||
int module_number;
|
||||
zend_long gc_probability;
|
||||
zend_long gc_divisor;
|
||||
zend_long gc_maxlifetime;
|
||||
int module_number;
|
||||
zend_long cache_expire;
|
||||
struct {
|
||||
zval ps_open;
|
||||
@@ -172,28 +172,29 @@ typedef struct _php_ps_globals {
|
||||
zval ps_validate_sid;
|
||||
zval ps_update_timestamp;
|
||||
} mod_user_names;
|
||||
zend_string *mod_user_class_name;
|
||||
bool mod_user_implemented;
|
||||
bool mod_user_is_open;
|
||||
zend_string *mod_user_class_name;
|
||||
const struct ps_serializer_struct *serializer;
|
||||
zval http_session_vars;
|
||||
bool auto_start;
|
||||
bool use_cookies;
|
||||
bool use_only_cookies;
|
||||
bool use_trans_sid; /* contains the INI value of whether to use trans-sid */
|
||||
|
||||
zend_long sid_length;
|
||||
zend_long sid_bits_per_character;
|
||||
bool send_cookie;
|
||||
bool define_sid;
|
||||
|
||||
const struct ps_serializer_struct *serializer;
|
||||
zval http_session_vars;
|
||||
|
||||
zend_long sid_length;
|
||||
zend_long sid_bits_per_character;
|
||||
|
||||
php_session_rfc1867_progress *rfc1867_progress;
|
||||
bool rfc1867_enabled; /* session.upload_progress.enabled */
|
||||
bool rfc1867_cleanup; /* session.upload_progress.cleanup */
|
||||
char *rfc1867_prefix; /* session.upload_progress.prefix */
|
||||
char *rfc1867_name; /* session.upload_progress.name */
|
||||
zend_long rfc1867_freq; /* session.upload_progress.freq */
|
||||
double rfc1867_min_freq; /* session.upload_progress.min_freq */
|
||||
bool rfc1867_enabled; /* session.upload_progress.enabled */
|
||||
bool rfc1867_cleanup; /* session.upload_progress.cleanup */
|
||||
|
||||
bool use_strict_mode; /* whether or not PHP accepts unknown session ids */
|
||||
bool lazy_write; /* omit session write when it is possible */
|
||||
|
||||
Reference in New Issue
Block a user