Skip to content

Commit 562fcaf

Browse files
committed
Enhance moving PHP code pages into huge pages
The former implementation of huge pages for PHP code segments may fail to map in certain scenarios. For instance, if the initial 'r-x-' segment is not PHP, it will result in a failure to map into huge pages. Consequently, the optimization for huge pages with PHP code will no longer be effective. This patch improves the implementation by accurately matching all 'r-x-' segments until it locates the PHP code segment. Subsequently, it performs the necessary huge page mapping. Signed-off-by: PeterYang12 <yuhan.yang@intel.com> Reviewed-by: chen-hu-97 <hu1.chen@intel.com>
1 parent bea5676 commit 562fcaf

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

ext/opcache/ZendAccelerator.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3019,11 +3019,15 @@ static void accel_move_code_to_huge_pages(void)
30193019
long unsigned int start, end, offset, inode;
30203020
char perm[5], dev[10], name[MAXPATHLEN];
30213021
int ret;
3022+
extern char *__progname;
3023+
char buffer[MAXPATHLEN];
30223024

3023-
while (1) {
3024-
ret = fscanf(f, "%lx-%lx %4s %lx %9s %lu %s\n", &start, &end, perm, &offset, dev, &inode, name);
3025+
while (fgets(buffer, MAXPATHLEN, f)) {
3026+
ret = sscanf(buffer, "%lx-%lx %4s %lx %9s %lu %s\n", &start, &end, perm, &offset, dev, &inode, name);
30253027
if (ret == 7) {
3026-
if (perm[0] == 'r' && perm[1] == '-' && perm[2] == 'x' && name[0] == '/') {
3028+
// try to find the php text segment and map it into huge pages
3029+
char *is_substring = strstr(name, __progname);
3030+
if (perm[0] == 'r' && perm[1] == '-' && perm[2] == 'x' && name[0] == '/' && is_substring != NULL) {
30273031
long unsigned int seg_start = ZEND_MM_ALIGNED_SIZE_EX(start, huge_page_size);
30283032
long unsigned int seg_end = (end & ~(huge_page_size-1L));
30293033
long unsigned int real_end;
@@ -3042,8 +3046,6 @@ static void accel_move_code_to_huge_pages(void)
30423046
}
30433047
break;
30443048
}
3045-
} else {
3046-
break;
30473049
}
30483050
}
30493051
fclose(f);

0 commit comments

Comments
 (0)